@khipu/design-system 0.2.0-alpha.14 → 0.2.0-alpha.140

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/beercss/arch.svg +1 -0
  2. package/dist/beercss/arrow.svg +1 -0
  3. package/dist/beercss/boom.svg +1 -0
  4. package/dist/beercss/bun.svg +1 -0
  5. package/dist/beercss/burst.svg +1 -0
  6. package/dist/beercss/circle.svg +1 -0
  7. package/dist/beercss/clamshell.svg +1 -0
  8. package/dist/beercss/diamond.svg +1 -0
  9. package/dist/beercss/fan.svg +1 -0
  10. package/dist/beercss/flower.svg +1 -0
  11. package/dist/beercss/gem.svg +1 -0
  12. package/dist/beercss/ghost-ish.svg +1 -0
  13. package/dist/beercss/heart.svg +1 -0
  14. package/dist/beercss/khipu-beercss.css +2405 -264
  15. package/dist/beercss/khipu-beercss.js +152 -4
  16. package/dist/beercss/khipu-beercss.min.css +1 -1
  17. package/dist/beercss/khipu-beercss.min.js +1 -1
  18. package/dist/beercss/khipu-beercss.scoped.css +9183 -0
  19. package/dist/beercss/khipu-beercss.scoped.min.css +1 -0
  20. package/dist/beercss/leaf-clover4.svg +1 -0
  21. package/dist/beercss/leaf-clover8.svg +1 -0
  22. package/dist/beercss/loading-indicator.svg +1 -0
  23. package/dist/beercss/material-symbols-outlined.woff2 +0 -0
  24. package/dist/beercss/material-symbols-rounded.woff2 +0 -0
  25. package/dist/beercss/material-symbols-sharp.woff2 +0 -0
  26. package/dist/beercss/material-symbols-subset.woff2 +0 -0
  27. package/dist/beercss/metadata.json +8 -4
  28. package/dist/beercss/oval.svg +1 -0
  29. package/dist/beercss/pentagon.svg +1 -0
  30. package/dist/beercss/pill.svg +1 -0
  31. package/dist/beercss/pixel-circle.svg +1 -0
  32. package/dist/beercss/pixel-triangle.svg +1 -0
  33. package/dist/beercss/puffy-diamond.svg +1 -0
  34. package/dist/beercss/puffy.svg +1 -0
  35. package/dist/beercss/semicircle.svg +1 -0
  36. package/dist/beercss/sided-cookie12.svg +1 -0
  37. package/dist/beercss/sided-cookie4.svg +1 -0
  38. package/dist/beercss/sided-cookie6.svg +1 -0
  39. package/dist/beercss/sided-cookie7.svg +1 -0
  40. package/dist/beercss/sided-cookie9.svg +1 -0
  41. package/dist/beercss/slanted.svg +1 -0
  42. package/dist/beercss/soft-boom.svg +1 -0
  43. package/dist/beercss/soft-burst.svg +1 -0
  44. package/dist/beercss/square.svg +1 -0
  45. package/dist/beercss/sunny.svg +1 -0
  46. package/dist/beercss/triangle.svg +1 -0
  47. package/dist/beercss/very-sunny.svg +1 -0
  48. package/dist/beercss/wavy-circle.svg +1 -0
  49. package/dist/beercss/wavy.svg +1 -0
  50. package/dist/index.d.mts +1078 -266
  51. package/dist/index.d.ts +1078 -266
  52. package/dist/index.js +1582 -528
  53. package/dist/index.mjs +1533 -500
  54. package/package.json +14 -10
  55. package/dist/khipu-logo-color-TV75AKOV.svg +0 -19
@@ -1,5 +1,7 @@
1
1
  /* Khipu BeerCSS Bundle - Combined CSS */
2
2
 
3
+ @import url('https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600;700&family=Roboto:wght@400;500;700&family=Inter:wght@400;500;600&display=swap');
4
+
3
5
  /* BeerCSS v4.0.1 */
4
6
  :root{--size: 1rem;--font: Inter, Roboto, "Helvetica Neue", "Arial Nova", "Nimbus Sans", "Noto Sans", Arial, sans-serif;--font-icon: "Material Symbols Outlined";--speed1: .1s;--speed2: .2s;--speed3: .3s;--speed4: .4s;--active: rgb(128 128 128 / .192);--overlay: rgb(0 0 0 / .5);--elevate1: 0 .125rem .125rem 0 rgb(0 0 0 / .32);--elevate2: 0 .25rem .5rem 0 rgb(0 0 0 / .4);--elevate3: 0 .375rem .75rem 0 rgb(0 0 0 / .48);--top: env(safe-area-inset-top);--bottom: env(safe-area-inset-bottom);--left: env(safe-area-inset-left);--right: env(safe-area-inset-right);--image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4AWJiYGAQBgAAAP//ZyYa+wAAAAZJREFUAwAAIgAWeX9MsQAAAABJRU5ErkJggg==)}body.dark{--image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4AWL6//+/FAAAAP//qSv5QwAAAAZJREFUAwAJIAMaJWjIvQAAAABJRU5ErkJggg==)}html{font-size:var(--size)}body{color:var(--on-surface);background-color:var(--surface);overflow-x:hidden;font-family:var(--font);font-size:.875rem;line-height:1.5rem;letter-spacing:.0313rem}@media(pointer:fine){body ::-webkit-scrollbar,body ::-webkit-scrollbar-thumb,body ::-webkit-scrollbar-button{background:none;inline-size:.4rem;block-size:.4rem}body :is(:focus,:hover)::-webkit-scrollbar-thumb,body :has(:focus,:hover)::-webkit-scrollbar-thumb{background:var(--outline);border-radius:1rem}}@media(pointer:coarse){body:has(dialog[open],dialog.active),body:has(input[type=range]:focus){overflow:hidden}}@keyframes to-page{0%{opacity:0;transform:var(--_transform)}to{opacity:1;transform:translate(0)}}@keyframes to-linear-progress{0%{margin:0 0 0 -100%}50%{margin:0}to{margin:0 0 0 100%}}@keyframes to-indeterminate-progress{0%{padding:0 100% 0 0}50%{padding:0}to{padding:0 0 0 100%}}@keyframes to-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes to-ripple{to{transform:scale(4);opacity:0}}:root,body.light{--primary: #6750a4;--on-primary: #ffffff;--primary-container: #e9ddff;--on-primary-container: #22005d;--secondary: #625b71;--on-secondary: #ffffff;--secondary-container: #e8def8;--on-secondary-container: #1e192b;--tertiary: #7e5260;--on-tertiary: #ffffff;--tertiary-container: #ffd9e3;--on-tertiary-container: #31101d;--error: #ba1a1a;--on-error: #ffffff;--error-container: #ffdad6;--on-error-container: #410002;--background: #fffbff;--on-background: #1c1b1e;--surface: #fdf8fd;--on-surface: #1c1b1e;--surface-variant: #e7e0eb;--on-surface-variant: #49454e;--outline: #7a757f;--outline-variant: #cac4cf;--shadow: #000000;--scrim: #000000;--inverse-surface: #313033;--inverse-on-surface: #f4eff4;--inverse-primary: #cfbcff;--surface-dim: #ddd8dd;--surface-bright: #fdf8fd;--surface-container-lowest: #ffffff;--surface-container-low: #f7f2f7;--surface-container: #f2ecf1;--surface-container-high: #ece7eb;--surface-container-highest: #e6e1e6}body.dark{--primary: #cfbcff;--on-primary: #381e72;--primary-container: #4f378a;--on-primary-container: #e9ddff;--secondary: #cbc2db;--on-secondary: #332d41;--secondary-container: #4a4458;--on-secondary-container: #e8def8;--tertiary: #efb8c8;--on-tertiary: #4a2532;--tertiary-container: #633b48;--on-tertiary-container: #ffd9e3;--error: #ffb4ab;--on-error: #690005;--error-container: #93000a;--on-error-container: #ffb4ab;--background: #1c1b1e;--on-background: #e6e1e6;--surface: #141316;--on-surface: #e6e1e6;--surface-variant: #49454e;--on-surface-variant: #cac4cf;--outline: #948f99;--outline-variant: #49454e;--shadow: #000000;--scrim: #000000;--inverse-surface: #e6e1e6;--inverse-on-surface: #313033;--inverse-primary: #6750a4;--surface-dim: #141316;--surface-bright: #3a383c;--surface-container-lowest: #0f0e11;--surface-container-low: #1c1b1e;--surface-container: #201f22;--surface-container-high: #2b292d;--surface-container-highest: #363438}@font-face{font-family:Material Symbols Outlined;font-style:normal;font-weight:400;font-display:swap;src:url(material-symbols-outlined.woff2) format("woff2"),url(https://cdn.jsdelivr.net/npm/beercss@4.0.19/dist/cdn/material-symbols-outlined.woff2) format("woff2")}@font-face{font-family:Material Symbols Rounded;font-style:normal;font-weight:400;font-display:swap;src:url(material-symbols-rounded.woff2) format("woff2"),url(https://cdn.jsdelivr.net/npm/beercss@4.0.19/dist/cdn/material-symbols-rounded.woff2) format("woff2")}@font-face{font-family:Material Symbols Sharp;font-style:normal;font-weight:400;font-display:swap;src:url(material-symbols-sharp.woff2) format("woff2"),url(https://cdn.jsdelivr.net/npm/beercss@4.0.19/dist/cdn/material-symbols-sharp.woff2) format("woff2")}@font-face{font-family:Material Symbols Subset;font-style:normal;font-weight:400;font-display:swap;src:url(material-symbols-subset.woff2) format("woff2"),url(https://cdn.jsdelivr.net/npm/beercss@4.0.19/dist/cdn/material-symbols-subset.woff2) format("woff2")}*{-webkit-tap-highlight-color:transparent;position:relative;vertical-align:middle;color:inherit;margin:0;padding:0;border-radius:inherit;box-sizing:border-box}*:after,*:before{all:unset}label{font-size:.75rem;vertical-align:baseline}a,b,i,span,strong,em,code{vertical-align:baseline}a,button,.button{cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:none;font-family:inherit;outline:inherit;justify-content:center}:is(nav,.tabs,.field)>a,button,.button,.chip,i,label{-webkit-user-select:none;user-select:none}:not(.grid,nav,.row)>:not(progress.max)+:is(address,article,blockquote,code,.field,fieldset,form,.grid,h1,h2,h3,h4,h5,h6,nav,ol,p,pre,.row,section,aside,table,.tabs,ul):not([class*=margin],.right,.left,.top,.bottom){margin-block-start:1rem}:has(>[class*=margin]){padding:.1px}:is(a,button,.button,.chip,summary):focus-visible{outline:.125rem solid var(--primary);outline-offset:.25rem}:is(nav,.row,li).group>:focus-visible{z-index:1}:is(button,.button,.chip)>:is(span,i,img,svg){pointer-events:none}div:is(:not([class]),[class=active]):has(>:not(.responsive)~:is(menu,.tooltip,input)){display:inline-flex}.middle-align{display:flex;align-items:center!important}.bottom-align{display:flex;align-items:flex-end!important}.top-align{display:flex;align-items:flex-start!important}.left-align{text-align:start;justify-content:flex-start!important}.right-align{text-align:end;justify-content:flex-end!important}.center-align{text-align:center;justify-content:center!important}[class*=blur],[class*=blur].light{--_blur: 1rem;-webkit-backdrop-filter:blur(var(--_blur));backdrop-filter:blur(var(--_blur));color:var(--on-surface);background-color:#ffffff80!important}.dark [class*=blur],[class*=blur].dark{background-color:#00000080!important}.small-blur{--_blur: .5rem}.large-blur{--_blur: 1.5rem}.horizontal{display:inline-flex;flex-direction:row!important;gap:1rem;inline-size:auto!important;max-inline-size:none!important}.horizontal>*{margin-block:0!important}.vertical{display:flex;flex-direction:column!important}:is(a,button,.button,.chip).vertical{display:inline-flex;gap:.25rem;block-size:auto!important;max-block-size:none!important;padding-block:.5rem}.vertical>*{margin-inline:0!important}.no-elevate{box-shadow:none!important}.small-elevate,.elevate{box-shadow:var(--elevate1)!important}.medium-elevate{box-shadow:var(--elevate2)!important}.large-elevate{box-shadow:var(--elevate3)!important}.round,[class*=-round]{--_round: 2rem;border-radius:var(--_round)!important}.small-round{--_round: .5rem}.large-round{--_round: 3.5rem}.no-round,.square,.top-round,.bottom-round,.left-round,.right-round{border-radius:.5rem!important}.top-round{border-start-start-radius:var(--_round)!important;border-start-end-radius:var(--_round)!important}.bottom-round{border-end-end-radius:var(--_round)!important;border-end-start-radius:var(--_round)!important}.left-round{border-start-start-radius:var(--_round)!important;border-end-start-radius:var(--_round)!important}.right-round{border-start-end-radius:var(--_round)!important;border-end-end-radius:var(--_round)!important}.circle:not(.extend){border-radius:50%}:is(.circle,.square):is(button,.button,.chip){padding:0;block-size:var(--_size);inline-size:var(--_size)}:is(.circle,.square)>span:not([class]){display:none}:is(.circle,.square).round{border-radius:1rem!important}.border:not(table,.field,.list,menu,article){box-sizing:border-box;border:.0625rem solid var(--outline);background-color:transparent;box-shadow:none}.no-border{border-color:transparent!important}.margin,[class*=-margin]:not(.left-margin,.right-margin,.top-margin,.bottom-margin,.horizontal-margin,.vertical-margin){margin:var(--_margin)!important}.margin,[class*=-margin]{--_margin: 1rem}.no-margin{--_margin: 0}.auto-margin{--_margin: auto}.tiny-margin{--_margin: .25rem}.small-margin{--_margin: .5rem}.large-margin{--_margin: 1.5rem}.left-margin,.horizontal-margin{margin-inline-start:var(--_margin)!important}.right-margin,.horizontal-margin{margin-inline-end:var(--_margin)!important}.top-margin,.vertical-margin{margin-block-start:var(--_margin)!important}.bottom-margin,.vertical-margin{margin-block-end:var(--_margin)!important}.no-opacity{opacity:0!important}.small-opacity{opacity:.25!important}.medium-opacity{opacity:.5!important}.large-opacity{opacity:.75!important}.opacity{opacity:1!important}.padding,[class*=-padding]:not(.left-padding,.right-padding,.top-padding,.bottom-padding,.horizontal-padding,.vertical-padding){padding:var(--_padding)!important}.padding,[class*=-padding]{--_padding: 1rem}.no-padding{--_padding: 0 !important}.tiny-padding{--_padding: .25rem !important}.small-padding{--_padding: .5rem !important}.large-padding{--_padding: 1.5rem !important}.left-padding,.horizontal-padding{padding-inline-start:var(--_padding)!important}.right-padding,.horizontal-padding{padding-inline-end:var(--_padding)!important}.top-padding,.vertical-padding{padding-block-start:var(--_padding)!important}.bottom-padding,.vertical-padding{padding-block-end:var(--_padding)!important}.front{z-index:10!important}.back{z-index:-10!important}.left{inset-inline-start:0}.right{inset-inline-end:0}.top{inset-block-start:0}.bottom{inset-block-end:0}.center{inset-inline-start:50%;transform:translate(-50%)}[dir=rtl] .center{transform:translate(50%)}.middle{inset-block-start:50%;transform:translateY(-50%)}.middle.center{transform:translate(-50%,-50%)}[dir=rtl] .middle.center{transform:translate(50%,-50%)}[class*=ripple]:is(:hover,:focus-visible):after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:currentColor;opacity:.1;border-radius:inherit}.ripple{--_duration: .6s}.fast-ripple{--_duration: .2s}.slow-ripple{--_duration: 1.8s}.ripple-js{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.ripple-js>div{position:absolute;border-radius:50%;background:currentColor;opacity:.3;transform:scale(0);animation:to-ripple var(--_duration) linear}.scroll{overflow:auto}.no-scroll{overflow:hidden}.shadow{background-color:#00000050}:is(.left-shadow,.right-shadow,.top-shadow,.bottom-shadow){background-color:transparent!important}.left-shadow{background-image:linear-gradient(to right,black,transparent)!important}.right-shadow{background-image:linear-gradient(to left,black,transparent)!important}.bottom-shadow{background-image:linear-gradient(to top,black,transparent)!important}.top-shadow{background-image:linear-gradient(to bottom,black,transparent)!important}[class*=-width]{max-inline-size:100%}.auto-width{inline-size:auto}.small-width{inline-size:12rem!important}.medium-width{inline-size:24rem!important}.large-width{inline-size:36rem!important}.auto-height{block-size:auto}.small-height{block-size:12rem!important}.medium-height{block-size:24rem!important}.large-height{block-size:36rem!important}.wrap{display:block;white-space:normal}.no-wrap:not(menu){display:flex;white-space:nowrap}.tiny-space:not(nav,.row,.grid,table,.tooltip,.list,menu,.shape){block-size:.5rem}:is(.space,.small-space):not(nav,.row,.grid,table,.tooltip,.list,menu,.shape){block-size:1rem}.medium-space:not(nav,.row,.grid,table,.tooltip,.list,menu,.shape){block-size:2rem}.large-space:not(nav,.row,.grid,table,.tooltip,.list,menu,.shape){block-size:3rem}.extra-space:not(nav,.row,.grid,table,.tooltip,.list,menu,.shape){block-size:4rem}.responsive{inline-size:-webkit-fill-available;inline-size:-moz-available}@media only screen and (max-width:600px){:is(.m,.l):not(.s){display:none!important}}@media only screen and (min-width:601px)and (max-width:992px){:is(.s,.l):not(.m){display:none!important}}@media only screen and (min-width:993px){:is(.m,.s):not(.l){display:none!important}}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:400;display:block;align-items:center;line-height:normal}h1,.h1{font-size:3.5625rem}h2,.h2{font-size:2.8125rem}h3,.h3{font-size:2.25rem}h4,.h4{font-size:2rem}h5,.h5{font-size:1.75rem}h6,.h6{font-size:1.5rem}:is(h1,.h1).small{font-size:3.0625rem}:is(h2,.h2).small{font-size:2.3125rem}:is(h3,.h3).small{font-size:1.75rem}:is(h4,.h4).small{font-size:1.5rem}:is(h5,.h5).small{font-size:1.25rem}:is(h6,.h6).small{font-size:1rem}:is(h1,.h1).large{font-size:4.0625rem}:is(h2,.h2).large{font-size:3.3125rem}:is(h3,.h3).large{font-size:2.75rem}:is(h4,.h4).large{font-size:2.5rem}:is(h5,.h5).large{font-size:2.25rem}:is(h6,.h6).large{font-size:2rem}.link{color:var(--primary)!important}.inverse-link{color:var(--inverse-primary)!important}.truncate{overflow:hidden;white-space:nowrap!important;text-overflow:ellipsis;flex:inherit}.truncate>*{white-space:nowrap!important}.small-text{font-size:.75rem}.medium-text{font-size:.875rem}.large-text{font-size:1rem}.upper{text-transform:uppercase}.lower{text-transform:lowercase}.capitalize{text-transform:capitalize}.bold{font-weight:700}.overline{text-decoration:line-through}.underline{text-decoration:underline}.italic{font-style:italic}p{margin:.5rem 0}.no-line{line-height:normal}.tiny-line{line-height:1.25rem}.small-line{line-height:1.5rem}.medium-line{line-height:1.75rem}.large-line{line-height:2rem}.extra-line{line-height:2.25rem}pre{border-radius:0;background-color:var(--surface-container);white-space:pre-wrap;padding:1rem;border-inline-start:.25rem solid var(--primary);font-family:inherit}blockquote{border-radius:0;padding:1rem;border-inline-start:.25rem solid var(--primary);font-family:inherit}code{border-radius:0;background-color:var(--surface-container);white-space:pre-wrap;padding:.25rem}pre>code,blockquote>code{padding:0}.scroll>code{white-space:pre}pre:has(>code){direction:ltr;text-align:start}sub{vertical-align:sub}sup{vertical-align:super}:is(.wave,.chip,.button,button,nav.tabbed>a,.tabs>a,nav.toolbar>a):not([class*=ripple]):after,nav:is(.left,.right,.bottom,.top).max>a:after,nav:is(.left,.right,.bottom,.top).max>:is(ol,ul)>li>a:after,nav:is(.left,.right,.bottom,.top):not(.max)>a>i:after,nav:is(.left,.right,.bottom,.top):not(.max)>:is(ol,ul)>li>a>i:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border-radius:inherit;inline-size:100%;block-size:100%;background-position:center;background-image:radial-gradient(circle,currentColor 1%,transparent 1%);opacity:0;transition:none;pointer-events:none}:is(.wave,.chip,.button,button,nav.tabbed>a,.tabs>a,nav.toolbar>a):not([class*=ripple]):is(:focus-visible,:hover):after,nav:is(.left,.right,.bottom,.top).max>a:not(.button,.chip):is(:focus-visible,:hover):after,nav:is(.left,.right,.bottom,.top).max>:is(ol,ul)>li>a:not(.button,.chip):is(:focus-visible,:hover):after,nav:is(.left,.right,.bottom,.top):not(.max)>a:not(.button,.chip):is(:focus-visible,:hover)>i:after,nav:is(.left,.right,.bottom,.top):not(.max)>:is(ol,ul)>li>a:not(.button,.chip):is(:focus-visible,:hover)>i:after{background-size:22500%;opacity:.1;transition:background-size var(--speed2) linear}:is(.wave,.chip,.button,button,nav.tabbed>a,.tabs>a,nav.toolbar>a,nav.max>a):not([class*=ripple]):active:after,nav:is(.left,.right,.bottom,.top).max>a:active:after,nav:is(.left,.right,.bottom,.top).max>:is(ol,ul)>li>a:active:after,nav:is(.left,.right,.bottom,.top):not(.max)>a:active>i:after,nav:is(.left,.right,.bottom,.top):not(.max)>:is(ol,ul)>li>a:active>i:after{background-size:0%;opacity:0;transition:none}.no-wave:after,.no-wave:is(:hover,:active):after{display:none}.zoom,.tiny-zoom{zoom:2}.small-zoom{zoom:3}.medium-zoom{zoom:4}.large-zoom{zoom:5}.extra-zoom{zoom:6}.badge{--_x: 0;--_y: -100%;display:inline-flex;align-items:center;justify-content:center;position:absolute;font-size:.6875rem;z-index:2;padding:0 .25rem;min-block-size:1rem;min-inline-size:1rem;background-color:var(--error);color:var(--on-error);line-height:normal;border-radius:1rem;inset:50% auto auto 50%;transform:translate(var(--_x, 50%),var(--_y, -50%));font-family:var(--font)}.badge.top{--_y: -100%}.badge.bottom{--_y: 0}.badge.left{--_x: -100%}.badge.right{--_x: 0}.badge.border{border-color:var(--error);color:var(--error);background-color:var(--surface)}.badge:is(.circle,.square){text-align:center;inline-size:auto;block-size:auto;padding:0 .25rem;border-radius:1rem}.badge.square{border-radius:0}.badge.min>*{display:none}.badge.min{clip-path:circle(18.75% at 50% 50%)}nav:is(.left,.right,.top,.bottom)>a>.badge,nav:is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a>.badge{inset:1rem auto auto 50%}.badge.none{inset:auto!important;transform:none;position:relative;margin:0 .125rem}header,footer{display:grid;align-content:center;border-radius:0;padding:0 1rem}:is(dialog,article)>:is(header,footer){padding-inline:0;top:0;right:0;bottom:0;left:0}header{min-block-size:4rem}footer{min-block-size:5rem}:is(header,footer,menu>*).fixed{position:sticky;top:0;right:0;bottom:0;left:0;z-index:11;background-color:inherit}header.fixed{inset:calc(-1 * var(--_padding, 0)) 0 0 0;margin-block-start:calc(-1 * var(--_padding, 0))}footer.fixed{inset:0 0 calc(-1 * var(--_padding, 0)) 0;margin-block-end:calc(-1 * var(--_padding, 0))}:is(header,footer).fixed.min{margin-inline:auto}dialog>:is(header,footer){background:none}dialog>:is(header,footer).fixed{background-color:inherit}:is(main,header,footer,section).responsive{max-inline-size:min(100vw,75rem);margin:0 auto}:is(main,header,footer,section).responsive.max{max-inline-size:none}:has(>main)>:is(header,footer).fixed{transform:none;box-sizing:content-box;position:sticky;top:0;right:0;bottom:0;left:0;z-index:12}:has(>main)>header{padding-block-start:var(--top, 0)}:has(>main)>footer{padding-block-end:var(--bottom, 0)}nav.top~header,nav.bottom~footer{padding-block:0}nav.top~header.fixed{inset-block:calc(var(--top, 0) + 4.5rem) 0}nav.bottom~footer.fixed{inset-block:0 calc(var(--bottom, 0) + 4.5rem)}:is(nav,.row)>header{background-color:inherit}.button,button{--_padding: 1rem;--_size: 2.5rem;--_round: calc(var(--_size) / 2) !important;box-sizing:content-box;display:inline-flex;align-items:center;justify-content:center;block-size:var(--_size);font-size:.875rem;font-weight:500;color:var(--on-primary);padding:0 var(--_padding);background-color:var(--primary);border-radius:1.25rem;transition:transform var(--speed3),border-radius var(--speed2),padding var(--speed3);-webkit-user-select:none;user-select:none;gap:.5rem;line-height:normal}:is(button,.button).small{--_size: 2rem;--_padding: .75rem}:is(button,.button).large{--_size: 3rem;--_padding: 1.25rem}:is(.button,button):is(.extra,.extend){--_size: 3.5rem;font-size:1rem;--_padding: 1.5rem}:is(button,.button):is(.square,.circle){--_padding: 0}:is(button,.button).border{border-color:var(--outline-variant);color:var(--primary)}.extend>span:not([class]){display:none}.extend:is(:hover,.active){inline-size:auto;--_padding: 1.5rem;padding:0 var(--_padding)}.extend:is(:hover,.active)>i+span{display:inherit;margin-inline-start:var(--_padding)}.extend:is(:hover,.active)>:is(img,svg)+span{display:inherit;margin-inline-start:calc(1rem + var(--_padding, 0))}:is(.button,button)[disabled]{opacity:.5;cursor:not-allowed}.button[disabled]{pointer-events:none}:is(.button,button)[disabled]:before,:is(.button,button)[disabled]:after{display:none}:is(.button,button):not(.chip,.extend).fill{background-color:var(--secondary-container)!important;color:var(--on-secondary-container)!important}:is(.button,button):not(.chip,.extend).active{background-color:var(--primary-container);color:var(--on-primary-container)}:is(.button,button):not(.chip,.extend).fill.active{background-color:var(--secondary)!important;color:var(--on-secondary)!important}:is(.button,button):not(.chip,.extend).border.active{background-color:var(--inverse-surface)!important;color:var(--inverse-on-surface)!important;border-color:var(--inverse-surface)!important}:is(.button,button):not(.chip):active,:is(.button,button):not(.chip).active{border-radius:.5rem!important}article{--_padding: 1rem;box-shadow:var(--elevate1);background-color:var(--surface-container-low);color:var(--on-surface);padding:var(--_padding);border-radius:.75rem;display:block;transition:transform var(--speed3),border-radius var(--speed3),padding var(--speed3)}article.small{block-size:12rem}article.medium{block-size:20rem}article.large{block-size:32rem}article.border{box-shadow:none;border:.0625rem solid var(--outline-variant)}.chip{--_padding: .75rem;--_size: 2rem;--_round: calc(var(--_size) / 2) !important;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;block-size:var(--_size);min-inline-size:var(--_size);font-size:.875rem;font-weight:500;background-color:transparent;border:.0625rem solid var(--outline-variant);color:var(--on-surface-variant);padding:0 var(--_padding);border-radius:.5rem;transition:transform var(--speed3),border-radius var(--speed3),padding var(--speed3);-webkit-user-select:none;user-select:none;gap:.5rem;line-height:normal;letter-spacing:normal}.chip.medium{--_size: 2.5rem;--_padding: 1rem}.chip.large{--_padding: 1.25rem;--_size: 3rem}.chip.fill{border:none}dialog{--_padding: 1.5rem;--_top: calc(var(--_padding, 0) + var(--top, 0));--_bottom: calc(var(--_padding, 0) + var(--bottom, 0));display:block;visibility:hidden;border:none;opacity:0;position:fixed;box-shadow:var(--elevate2);color:var(--on-surface);background-color:var(--surface-container-high);padding:var(--_padding);z-index:100;inset:10% auto auto 50%;min-inline-size:20rem;max-inline-size:100%;max-block-size:80%;overflow-x:hidden;overflow-y:auto;transition:all var(--speed3),0s background-color;border-radius:1.75rem;transform:translate(-50%,-4rem);outline:none}dialog.small{inline-size:25%;block-size:25%}dialog.medium{inline-size:50%;block-size:50%}dialog.large{inline-size:75%;block-size:75%}dialog:is(.active,[open]){visibility:visible;opacity:1;transform:translate(-50%)}dialog:popover-open{visibility:visible;opacity:1;transform:translate(-50%)}dialog:is(.top,.right,.bottom,.left,.max){--_padding: 1rem}dialog:is(.top,.bottom){opacity:1;block-size:auto;inline-size:100%;min-inline-size:auto;max-block-size:100%}dialog.top{inset:0 auto auto 0;transform:translateY(-100%);border-radius:0 0 1rem 1rem;padding-block-start:var(--_top)}dialog.bottom{inset:auto auto 0 0;transform:translateY(100%);border-radius:1rem 1rem 0 0;padding-block-end:var(--_bottom)}dialog:is(.left,.right){opacity:1;inset:0 auto auto 0;inline-size:auto;block-size:100%;max-block-size:100%;background-color:var(--surface);padding-block:var(--_top) var(--_bottom)}[dir=rtl] dialog.right,dialog.left{inset:0 auto auto 0;border-radius:0 1rem 1rem 0;transform:translate(-100%)}[dir=rtl] dialog.left,dialog.right{inset:0 0 auto auto;border-radius:1rem 0 0 1rem;transform:translate(100%)}dialog.max{inset:0 auto auto 0;inline-size:100%;block-size:100%;max-inline-size:100%;max-block-size:100%;transform:translateY(4rem);background-color:var(--surface);border-radius:0;padding-block:var(--_top) var(--_bottom)}dialog:is(.active,[open]):is(.left,.right,.top,.bottom,.max){transform:translate(0)}dialog:popover-open:is(.left,.right,.top,.bottom,.max){transform:translate(0)}dialog.small:is(.left,.right){inline-size:20rem}dialog.medium:is(.left,.right){inline-size:32rem}dialog.large:is(.left,.right){inline-size:44rem}dialog.small:is(.top,.bottom){block-size:16rem}dialog.medium:is(.top,.bottom){block-size:24rem}dialog.large:is(.top,.bottom){block-size:32rem}hr,[class*=divider]{all:unset;inline-size:-webkit-fill-available;min-block-size:auto;block-size:.0625rem;background-color:var(--outline-variant);display:block}hr+*,[class*=divider]+*{margin:0!important}hr.medium,.medium-divider{margin:1rem 0!important}hr.large,.large-divider{margin:1.5rem 0!important}hr.small,.small-divider{margin:.5rem 0!important}li:has(>:is(hr,.divider)){padding:0!important;align-self:normal!important;min-inline-size:auto!important;min-block-size:auto!important;inline-size:-webkit-fill-available;background:none!important}:is(hr,.divider).vertical,li:has(>:is(hr,.divider).vertical){padding:0!important;align-self:center!important;min-inline-size:auto;min-block-size:1.5rem;inline-size:.0625rem}summary{list-style-type:none;cursor:pointer}summary::-webkit-details-marker{display:none}summary>*{pointer-events:none;margin:0}li>details>summary+.list{margin:0!important}.field{--_input: 3rem;--_start: 1.2rem;--_middle: calc(var(--_input, 0) / 2);border-radius:.25rem .25rem 0 0;min-block-size:var(--_input);display:flex;flex-direction:column}.field.fill{--_background: var(--surface-variant);background-color:unset!important;color:unset!important}.field.fill>:is(input,select,textarea){background-color:var(--_background);z-index:0}.field.small{--_input: 2.5rem;--_start: 1rem}.field.large{--_input: 3.5rem;--_start: 1.4rem}.field.extra{--_input: 4rem;--_start: 1.6rem}.field.border{border-radius:.25rem}.field[class*=round].small{border-radius:1.25rem}.field[class*=round]{border-radius:1.5rem}.field[class*=round].large{border-radius:1.75rem}.field[class*=round].extra{border-radius:2rem}.field>:is(i,img,svg,progress.circle,a){position:absolute;inset:calc((var(--_input, 0) / 2) - .75rem) auto auto auto;cursor:pointer;z-index:10;inline-size:1.5rem;block-size:1.5rem;margin:auto 0;pointer-events:none}.field>:is(a,.front){pointer-events:all!important}.field>a>:is(i,img,svg,progress.circle,a){inline-size:1.5rem;block-size:1.5rem}.field>:is(i,img,svg,progress.circle,a),[dir=rtl] .field>:is(i,img,svg,progress.circle,a):first-child{inset:calc(var(--_middle, 0) - .75rem) 1rem auto auto}.field>:is(i,img,svg,progress.circle,a):first-child,[dir=rtl] .field>:is(i,img,svg,progress.circle,a){inset:calc(var(--_middle, 0) - .75rem) auto auto 1rem}.field.invalid>i{color:var(--error)}.field>progress.circle{border-width:.1875rem}.field>:is(input,textarea,select){all:unset;position:relative;display:flex;align-items:center;box-sizing:border-box;border-radius:inherit;border:.0625rem solid transparent;padding:0 .9375rem;font-family:inherit;font-size:1rem;min-block-size:var(--_input);outline:none;z-index:1;background:none;resize:none;text-align:start;cursor:text}input::-webkit-date-and-time-value{text-align:start}:is(input,select,textarea):is(:-webkit-autofill,:autofill){-webkit-background-clip:text;-webkit-text-fill-color:var(--on-surface)}.field>:is(input,textarea,select):focus{border:.125rem solid transparent;padding-inline:.875rem}.field>textarea:not([rows]){field-sizing:content;max-block-size:12rem}input[type=file],input[type=color],:not(.field)>input:is([type^=date],[type^=time],[type=month],[type=week]),input::-webkit-calendar-picker-indicator{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;inline-size:100%;block-size:100%;margin:0;padding:0;border:0;outline:0;z-index:2!important}@media(pointer:fine){.field>input::-webkit-calendar-picker-indicator{z-index:-1!important}}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration,input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{display:none}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.field.border>:is(input,textarea,select){border-color:var(--outline)}.field.border>:is(input,textarea,select):focus{border-color:var(--primary)}.field[class*=round]>:is(input,textarea,select){padding-inline:1.4376rem}.field[class*=round]>:is(input,textarea,select):focus{padding-inline:1.375rem}.field.prefix>:is(input,textarea,select){padding-inline-start:2.9375rem}.field.prefix>.slider{margin-inline-start:3.5rem}.field.prefix>:is(input,textarea,select):focus{padding-inline-start:2.875rem}.field.suffix>:is(input,textarea,select){padding-inline-end:2.9375rem}.field.suffix>.slider{margin-inline-end:3.5rem}.field.suffix>:is(input,textarea,select):focus{padding-inline-end:2.875rem}.field:not(.border,[class*=round])>:is(input,textarea,select){border-block-end-color:var(--outline)}.field:not(.border,[class*=round])>:is(input,textarea,select):focus{border-block-end-color:var(--primary)}.field[class*=round]:not(.border,.fill)>:is(input,textarea,select),.field[class*=round]:not(.border)>:is(input,textarea,select):focus{box-shadow:var(--elevate1)}.field[class*=round]:not(.border,.fill)>:is(input,textarea,select):focus{box-shadow:var(--elevate2)}.field.invalid:not(.border,[class*=round])>:is(input,textarea,select),.field.invalid:not(.border,[class*=round])>:is(input,textarea,select):focus{border-block-end-color:var(--error)}.field.invalid.border>:is(input,textarea,select),.field.invalid.border>:is(input,textarea,select):focus{border-color:var(--error)}.field:has(>:disabled){opacity:.5;cursor:not-allowed}.field>:disabled{cursor:not-allowed}.field>select{-webkit-user-select:none;user-select:none}@-moz-document url-prefix(){.field>select:focus{background-color:var(--surface)}.field.fill>select:focus{background-color:var(--surface-variant)}.field>select:focus+label{z-index:1}}.field>select>option{background-color:var(--surface)}.field>:is(input,select){padding-block-start:1rem}.field:not(.label)>:is(input,select),.field.border:not(.fill)>:is(input,select){padding-block-start:0}.field>textarea{padding-block-start:var(--_start)!important}.field>textarea:focus{padding-block-start:calc(var(--_start, 0) - .01rem)!important}.field:not(.label)>textarea,.field.border:not(.fill)>textarea{padding-block-start:calc(var(--_start, 0) - .5rem)!important}.field:not(.label)>textarea:focus,.field.border:not(.fill)>textarea:focus{padding-block-start:calc(var(--_start, 0) - .51rem)!important}.field.label>label{--_start: 1rem;position:absolute;inset:-.5rem .9375rem 0 var(--_start);display:flex;block-size:calc(var(--_input, 0) + 1rem);line-height:calc(var(--_input, 0) + 1rem);font-size:1rem;transition:all .2s;gap:.25rem;white-space:nowrap;pointer-events:none}[dir=rtl] .field.label>label{inset:-.5rem calc(var(--_start) - .0625rem) 0 .9375rem}.field.label[class*=round]>label{inset:-.5rem 1.9375rem 0 var(--_start)}[dir=rtl] .field.label[class*=round]>label{inset:-.5rem var(--_start) 0 1.9375rem}.field.label.border.prefix:not(.fill)>:is(label.active,:focus+label,[placeholder]:not(:placeholder-shown)+label,select+label){--_start: 1rem}.field.label[class*=round]>label,.field.label.border.prefix[class*=round]:not(.fill)>:is(label.active,:focus+label,[placeholder]:not(:placeholder-shown)+label,select+label){--_start: 1.5rem}.field.label.prefix>label{--_start: 3rem}.field.label>:is(label.active,:focus+label,[placeholder]:not(:placeholder-shown)+label,select+label){block-size:2.5rem;line-height:2.5rem;font-size:.75rem}.field.label.border:not(.fill)>:is(label.active,:focus+label,[placeholder]:not(:placeholder-shown)+label,select+label){block-size:1rem;line-height:1rem}.field.label.border:not(.fill)>label:after{content:"";display:block;margin:.5rem 0 0;border-block-start:.0625rem solid var(--outline);block-size:1rem;transition:none;flex:auto}.field.label.border:not(.fill)>:focus+label:after{border-block-start:.125rem solid var(--primary)}.field.label.border:not(.fill)>:is(input,textarea):is(:focus,[placeholder]:not(:placeholder-shown),.active),.field.label.border:not(.fill)>select{clip-path:polygon(-2% -2%,.75rem -2%,.75rem .5rem,calc(100% - 1rem) .5rem,calc(100% - 1rem) -2%,102% -2%,102% 102%,-2% 102%)}[dir=rtl] .field.label.border:not(.fill)>:is(input,textarea):is(:focus,[placeholder]:not(:placeholder-shown),.active),[dir=rtl] .field.label.border:not(.fill)>select{clip-path:polygon(-2% -2%,1rem -2%,1rem .5rem,calc(100% - .75rem) .5rem,calc(100% - .75rem) -2%,102% -2%,102% 102%,-2% 102%)}.field.label.border[class*=round]:not(.fill)>:is(input,textarea):is(:focus,[placeholder]:not(:placeholder-shown),.active),.field.label.border[class*=round]:not(.fill)>select{clip-path:polygon(-2% -2%,1.25rem -2%,1.25rem .5rem,calc(100% - 2rem) .5rem,calc(100% - 2rem) -2%,102% -2%,102% 102%,-2% 102%)}[dir=rtl] .field.label.border[class*=round]:not(.fill)>:is(input,textarea):is(:focus,[placeholder]:not(:placeholder-shown),.active),[dir=rtl] .field.label.border[class*=round]:not(.fill)>select{clip-path:polygon(-2% -2%,2rem -2%,2rem .5rem,calc(100% - 1.25rem) .5rem,calc(100% - 1.25rem) -2%,102% -2%,102% 102%,-2% 102%)}.field.label>:focus+label{color:var(--primary)}.field.label.invalid>label,.field.label.invalid>label:after{color:var(--error)!important;border-color:var(--error)!important}.field.label>label>a{block-size:inherit;line-height:inherit;inline-size:1rem}.field.label>label>a>:is(i,img,svg){block-size:1rem;line-height:1rem;inline-size:1rem;font-size:1rem}.field>output{display:inline-block;font-size:.75rem;background:none!important;padding:.25rem 1rem;line-height:1.25rem;align-self:start}.field>output.invalid{color:var(--error)!important}.field[class*=round]>output{padding:.25rem 1.5rem}.field.invalid>output:not(.invalid),.field:not(.invalid)>output.invalid{display:none}.field.invalid>output.invalid~menu,.field:not(.invalid)>output:not(.invalid)~menu{inset:auto auto 1.75rem 0}table td>.field{margin:0}fieldset{border-radius:.25rem;padding:1rem;border:.0625rem solid var(--outline-variant)}fieldset>legend{margin:0 -.25rem;padding:0 .25rem}fieldset>legend+*{margin-block-start:0!important}.grid{--_gap: 1rem;display:grid;grid-template-columns:repeat(12,1fr);gap:var(--_gap);block-size:auto}.grid.no-space{--_gap: 0rem}.grid.medium-space{--_gap: 1.5rem}.grid.large-space{--_gap: 2rem}.grid>*{margin:0}.s1{grid-area:auto/span 1}.s2{grid-area:auto/span 2}.s3{grid-area:auto/span 3}.s4{grid-area:auto/span 4}.s5{grid-area:auto/span 5}.s6{grid-area:auto/span 6}.s7{grid-area:auto/span 7}.s8{grid-area:auto/span 8}.s9{grid-area:auto/span 9}.s10{grid-area:auto/span 10}.s11{grid-area:auto/span 11}.s12{grid-area:auto/span 12}@media only screen and (min-width:601px){.m1{grid-area:auto/span 1}.m2{grid-area:auto/span 2}.m3{grid-area:auto/span 3}.m4{grid-area:auto/span 4}.m5{grid-area:auto/span 5}.m6{grid-area:auto/span 6}.m7{grid-area:auto/span 7}.m8{grid-area:auto/span 8}.m9{grid-area:auto/span 9}.m10{grid-area:auto/span 10}.m11{grid-area:auto/span 11}.m12{grid-area:auto/span 12}}@media only screen and (min-width:993px){.l1{grid-area:auto/span 1}.l2{grid-area:auto/span 2}.l3{grid-area:auto/span 3}.l4{grid-area:auto/span 4}.l5{grid-area:auto/span 5}.l6{grid-area:auto/span 6}.l7{grid-area:auto/span 7}.l8{grid-area:auto/span 8}.l9{grid-area:auto/span 9}.l10{grid-area:auto/span 10}.l11{grid-area:auto/span 11}.l12{grid-area:auto/span 12}}i,:is(.checkbox,.radio,.switch)>span:before,:is(.checkbox,.radio,.switch)>span>i{--_size: 1.5rem;font-family:var(--font-icon);font-weight:400;font-style:normal;font-size:var(--_size);letter-spacing:normal;text-transform:none;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;word-wrap:normal;direction:ltr;font-feature-settings:"liga";-webkit-font-smoothing:antialiased;vertical-align:middle;text-align:center;overflow:hidden;inline-size:var(--_size);min-inline-size:var(--_size);block-size:var(--_size);min-block-size:var(--_size);box-sizing:content-box;line-height:normal;border-radius:0}i:has(.badge){overflow:unset}i.tiny{--_size: 1rem}.chip>i,i.small{--_size: 1.25rem}i.medium{--_size: 1.5rem}i.large{--_size: 1.75rem}i.extra{--_size: 2rem}i.fill,a.active>i,button.active>i{font-variation-settings:"FILL" 1}i>:is(img,svg){inline-size:100%;block-size:100%;background-size:100%;border-radius:inherit;position:absolute;inset:0 auto auto 0;padding:inherit}i[class*=fa-]{font-size:calc(var(--_size, 0) * .85);line-height:normal;block-size:auto;min-block-size:auto}.absolute{position:absolute}.fixed{position:fixed}:is(.absolute,.fixed).left.right{inline-size:auto}:is(.absolute,.fixed).left.right.small{block-size:20rem}:is(.absolute,.fixed).left.right.medium{block-size:28rem}:is(.absolute,.fixed).left.right.large{block-size:44rem}:is(.absolute,.fixed).top.bottom.small{inline-size:20rem}:is(.absolute,.fixed).top.bottom.medium{inline-size:28rem}:is(.absolute,.fixed).top.bottom.large{inline-size:44rem}.list{display:flex;flex-direction:column;padding:0;margin:0;flex:1}.list>li,.list>li>details>summary,.list>li>a:only-child{all:unset;box-sizing:border-box;position:relative;display:flex;align-items:center;align-self:normal;text-align:start;justify-content:flex-start;white-space:nowrap;gap:1rem;min-block-size:3.5rem;padding:.5rem 1rem;cursor:pointer;flex:1}.list>li:has(ul,ol,details[open],a:only-child){padding:0}.list>li>.list{padding:0 0 0 1rem}.list>li>*,.list>li>a:only-child>*{margin:0}.list>li>:is(details,.max),.list>li>a:only-child>.max,.list>li>details>summary>.max{flex:1}.list.border>li:not(:last-child):before,.list.border>li>details[open]>summary:before{content:"";position:absolute;background-color:var(--outline-variant);inset:auto 0 0 0;block-size:.0625rem;inline-size:auto}.list.no-space>li,.list.no-space>li>details>summary{min-block-size:2.5rem}.list.medium-space>li,.list.medium-space>li>details>summary{min-block-size:4.5rem}.list.large-space>li,.list.large-space>li>details>summary{min-block-size:5.5rem}.list>li:focus-visible,.list>li>a:only-child:focus-visible{outline:.125rem solid var(--primary);outline-offset:-.25rem}:has(>main){display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto auto minmax(0,1fr) auto auto;grid-template-areas:"left top right" "left header right" "left main right" "left footer right" "left bottom right";min-block-size:100dvh;box-sizing:border-box;background-color:var(--surface)}nav.left{grid-area:left}nav.right{grid-area:right}nav.top{grid-area:top}nav.bottom{grid-area:bottom}header{grid-area:header}footer{grid-area:footer}main{--_padding: .5rem;grid-area:main;padding:var(--_padding);overflow:clip}aside{z-index:1}aside:not(.fixed,.absolute).right{float:right}aside:not(.fixed,.absolute).left{float:left}svg{fill:currentcolor}:is(img,svg,video):is(.small,.medium,.large,.tiny,.extra,.round,.circle,.square,.responsive){--_size: 3rem;object-fit:cover;object-position:center;transition:transform var(--speed3),border-radius var(--speed3),padding var(--speed3);block-size:var(--_size);inline-size:var(--_size)}:is(img,svg,video).round{--_round: .5rem}:is(img,svg,video).tiny{--_size: 2rem}:is(img,svg,video).small{--_size: 2.5rem}:is(img,svg,video).large{--_size: 3.5rem}:is(img,svg,video).extra{--_size: 4rem}:is(img,svg,video).responsive{--_size: 100%;margin:0 auto}:is(img,svg,video).responsive.tiny{inline-size:100%;block-size:4rem}:is(img,svg,video).responsive.small{inline-size:100%;block-size:8rem}:is(img,svg,video).responsive.medium{inline-size:100%;block-size:12rem}:is(img,svg,video).responsive.large{inline-size:100%;block-size:16rem}:is(img,svg,video).responsive.extra{inline-size:100%;block-size:20rem}:is(img,svg,video).responsive.round{--_round: 2rem}:is(img,svg,video).empty-state{max-inline-size:100%;inline-size:24rem}:is(button,.button,.chip):not(.transparent)>.responsive{border:.25rem solid transparent}:is(button,.button,.chip,.field)>:is(img,svg):not(.responsive),.tabs :is(img,svg):not(.responsive){min-inline-size:1.5rem;max-inline-size:1.5rem;min-block-size:1.5rem;max-block-size:1.5rem}:is(button,.button,.chip):not(.extend)>.responsive:first-child{margin-inline-start:calc(-1 * var(--_padding, 0))}:is(button,.button,.chip):not(.extend)>.responsive:not(:first-child){margin-inline-end:calc(-1 * var(--_padding, 0))}:is(button,.button,.chip,.circle,.square,.extend)>.responsive{--_size: inherit;margin:0 auto}.extend>:is(.responsive,i){margin:0;position:absolute;inset-inline:1rem;z-index:1}.extend>.responsive{inset-inline:0;inline-size:3.5rem}.extend.border>.responsive{inline-size:3.375rem}menu{opacity:0;visibility:hidden;position:absolute;box-shadow:var(--elevate2);background-color:var(--surface-container);z-index:13;inset:auto auto 0 0;inline-size:100%;max-block-size:50vh;max-inline-size:none!important;overflow-x:hidden;overflow-y:auto;font-size:.875rem;font-weight:400;text-transform:none;color:var(--on-surface);line-height:normal;text-align:start;border-radius:1rem;transform:scale(.8) translateY(120%);transition:all var(--speed2) var(--speed2);justify-content:flex-start;padding:.25rem;display:flex;flex-direction:column;gap:.125rem}menu.no-space{gap:0}menu.small-space{gap:.25rem}menu.medium-space{gap:.375rem}menu.large-space{gap:.5rem}menu.extra-space{gap:.625rem}[dir=rtl] menu{inset:auto 0 0 auto}menu.no-wrap{inline-size:max-content!important;white-space:nowrap!important}menu.active,:not([data-ui]):focus-within>menu,menu>li:hover>menu,menu>li>menu:hover{opacity:1;visibility:visible;transform:scale(1) translateY(100%);transition:all var(--speed2),background-color 0s}menu.top.active,:not([data-ui]):focus-within>menu.top,menu>li:hover>menu.top,menu>li>menu.top:hover{transform:scale(1) translateY(-100%)}menu:is(.min,.max).active,:not([data-ui]):focus-within>menu:is(.min,.max){transform:scale(1)}menu *{white-space:inherit!important}menu>li,menu>li>a:only-child{all:unset;box-sizing:border-box;position:relative;display:flex;align-items:center;align-self:normal;text-align:start;justify-content:inherit;white-space:nowrap;gap:1rem;padding:.5rem 1rem;min-block-size:2.75rem;flex:1;margin:0!important;cursor:pointer;border-radius:.25rem;transition:border-radius var(--speed2)}menu>li:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}menu>li:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}menu>li:hover{background-color:color-mix(in srgb,currentColor 10%,transparent)}menu>li.active{background-color:var(--tertiary-container);color:var(--on-tertiary-container)}menu>li:is(.active,:active){border-radius:.75rem}menu>li>:is(.max,.field),menu>li>a:only-child>.max,menu>li:has(.field,a:only-child){flex:1;padding:0;margin:0}menu.min{inset:0 0 auto 0;transform:scale(.8)}[dir=rtl] menu.min.right,menu.min.left,menu.top.left{inset:0 0 auto auto}[dir=rtl] menu.min.left,menu.min.right,menu.top,menu.top.right{inset:0 auto auto 0}menu.max{position:fixed;top:0;right:0;bottom:0;left:0;block-size:100%;max-block-size:none;min-block-size:auto;z-index:100;transform:scale(.8);border-radius:0}menu.max>li{flex:none!important}menu.no-wrap:is(.min,.max){min-inline-size:16rem}[dir=rtl] menu.right,[dir=rtl] menu.top.min.right,menu.left,menu.top.min.left{inset:auto 0 0 auto}[dir=rtl] menu.left,[dir=rtl] menu.top.min.left,menu.right,menu.top.min{inset:auto auto 0 0}menu.top{transform:scale(.8) translateY(-120%)}menu:has(menu){--_child: 1;--_type: 0;overflow:unset;white-space:nowrap;inline-size:auto;min-inline-size:12rem;max-block-size:none}menu>li>:is(menu,menu.right),[dir=rtl] menu>li>menu.left{inset:auto auto calc(3rem * (var(--_child, 0) - var(--_type, 0))) 100%}[dir=rtl] menu>li>:is(menu,menu.right),menu>li>menu.left{inset:auto 100% calc(3rem * (var(--_child, 0) - var(--_type, 0))) auto}menu>li>:is(menu.top,menu.top.right),[dir=rtl] menu>li>menu.top.left{inset:calc(3rem * (var(--_child, 0) - var(--_type, 0))) auto auto 100%}[dir=rtl] menu>li>:is(menu.top,menu.top.right),menu>li>menu.top.left{inset:calc(3rem * (var(--_child, 0) - var(--_type, 0))) 100% auto auto}menu.group{padding:.5rem 0;inline-size:100%;min-inline-size:auto;max-block-size:none;overflow:unset;background:none;box-shadow:none}menu.group>li{box-shadow:none;padding:0;min-block-size:auto}menu.group>li:hover{background:none}menu.group>li>menu,menu.group>li>menu:hover{opacity:1;visibility:visible;position:relative;top:0;right:0;bottom:0;left:0;max-block-size:none;transform:none;transition:none;border-radius:1rem 1rem .5rem .5rem;z-index:auto;flex:1}menu.group>li:last-child>menu{border-radius:.5rem .5rem 1rem 1rem}menu>li:nth-last-child(2){--_child: 2}menu>li:nth-last-child(3){--_child: 3}menu>li:nth-last-child(4){--_child: 4}menu>li:nth-last-child(5){--_child: 5}menu>li:nth-last-child(6){--_child: 6}menu>li:nth-last-child(7){--_child: 7}menu>li:nth-last-child(8){--_child: 8}menu>li:nth-last-child(9){--_child: 9}menu>li:nth-last-child(10){--_child: 10}menu>li:nth-last-child(11){--_child: 11}menu>li:nth-last-of-type(2){--_type: 1}menu>li:nth-last-of-type(3){--_type: 2}menu>li:nth-last-of-type(4){--_type: 3}menu>li:nth-last-of-type(5){--_type: 4}menu>li:nth-last-of-type(6){--_type: 5}menu>li:nth-last-of-type(7){--_type: 6}menu>li:nth-last-of-type(8){--_type: 7}menu>li:nth-last-of-type(9){--_type: 8}menu>li:nth-last-of-type(10){--_type: 9}menu>li:nth-last-of-type(11){--_type: 10}@media(pointer:coarse){:not(menu,[data-ui]):hover>menu{opacity:1;visibility:visible;transform:scale(1) translateY(100%)}:not(menu,[data-ui]):hover>menu.top{transform:scale(1) translateY(-100%)}}nav>:is(ol,ul),nav>:is(ol,ul)>li{all:unset}nav,.row,a.row{display:flex;align-items:center;align-self:normal;text-align:start;justify-content:flex-start;white-space:nowrap;gap:1rem;border-radius:0}a.row,nav.row{min-block-size:3rem;margin:0}:is(nav,.row,.max)>:only-child,:is(nav,.row,.max)>span>*,nav>:is(ol,ul)>li>:only-child,nav>:is(ol,ul)>li>span>*{margin:0}:is(nav,.row)>:not(ul,ol,header,footer){margin:0;white-space:normal;flex:none}:is(nav,.row).min{display:inline-flex}:is(nav,.row,li).no-space{gap:0}:is(nav,.row,li).tiny-space{gap:.5rem}:is(nav,.row,li).medium-space{gap:1.5rem}:is(nav,.row,li).large-space{gap:2rem}:is(nav,.row)>.max,:is(nav,.row)>:is(ol,ul)>.max{flex:1}:is(nav,.row).wrap{display:flex;flex-wrap:wrap}:is(header,footer)>:is(nav,.row){min-block-size:inherit}nav:is(.left,.right,.top,.bottom){--_padding: .5rem;--_top: calc(var(--_padding, 0) + var(--top, 0));--_bottom: calc(var(--_padding, 0) + var(--bottom, 0));position:sticky;top:0;right:0;bottom:0;left:0;border:0;color:var(--on-surface);transform:none;z-index:100;text-align:center;padding:var(--_padding);margin:0}nav:is(.left,.right){justify-content:flex-start;flex-direction:column;background-color:var(--surface);block-size:100dvh;min-inline-size:6rem;padding-block:var(--_top) var(--_bottom)}nav:is(.top,.bottom){position:sticky;top:0;right:0;bottom:0;left:0;padding:.5rem;justify-content:center;flex-direction:row;background-color:var(--surface-container);block-size:auto;min-block-size:4.5rem}nav.top{block-size:calc(var(--top, 0) + 4.5rem);padding-block-start:var(--_top)}nav.bottom{block-size:calc(var(--bottom, 0) + 4.5rem);padding-block-end:var(--_bottom)}nav>header{min-block-size:auto;padding:0;margin:0 0 1rem;align-items:flex-start;gap:1rem;background:none!important}nav:is(.top,.bottom)>header{flex-direction:row;align-items:center;margin:0 1rem 0 0}nav>header>*{margin:0;transition:none}nav.max>header>*{transition:all var(--speed1)}nav>header>.extend:hover{--_padding: 0;inline-size:var(--_size)}nav>header>.extend:hover>span:not([class]){display:none}nav>:is(ol,ul){all:inherit;min-inline-size:auto;margin:0;padding:0;flex:auto}nav.max:is(.left,.right,.top,.bottom){gap:0;inline-size:auto;align-items:flex-start;min-inline-size:12.75rem;padding:var(--_top) 1.25rem var(--_bottom) 1.25rem}nav.max>:is(ol,ul){padding:0}nav.max>header{margin:0 0 1.25rem}nav.max:is(.top,.bottom)>header{margin:0 1.25rem 0 0}nav.max>header>.extend{--_padding: 1.5rem;inline-size:auto;padding:0 var(--_padding)}nav.max>header>.extend>span:not([class]){display:block;margin-inline-start:var(--_padding)}nav.max>header>.extend>:is(img,svg)+span{margin-inline-start:calc(1rem + var(--_padding, 0))}nav.max:is(.top,.bottom){padding:0 .5rem;align-items:center;min-inline-size:auto;max-inline-size:none}nav:is(.left,.right,.top,.bottom)>a:not(.button,.chip),nav:is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a:not(.button,.chip){display:flex;flex-direction:column;gap:.25rem;line-height:normal;inline-size:3.5rem;font-size:.8rem}nav:not(.max):is(.left,.right,.top,.bottom)>a:not(.button,.chip)>i,nav:not(.max):is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a:not(.button,.chip)>i{padding:.25rem 1rem;border-radius:2rem;margin:0 auto}nav.max:is(.left,.right,.top,.bottom)>a:not(.button,.chip),nav.max:is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a:not(.button,.chip){flex-direction:row;gap:.5rem;inline-size:auto;block-size:3.5rem;padding:0 1rem;border-radius:2rem;font-size:inherit}nav:is(.left,.right,.top,.bottom)>a.active:not(.button,.chip),nav:is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a.active:not(.button,.chip){transition:padding var(--speed1) linear}nav.max:is(.top,.bottom)>a:not(.button,.chip),nav.max:is(.top,.bottom)>:is(ol,ul)>li>a:not(.button,.chip){gap:.25rem;block-size:2.5rem;font-size:.8rem}nav.max:is(.left,.right,.top,.bottom)>a.active:not(.button,.chip),nav.max:is(.left,.right,.top,.bottom)>:is(ol,ul)>li>a.active:not(.button,.chip),nav:is(.left,.right,.top,.bottom):not(.max)>a.active:not(.button,.chip)>i,nav:is(.left,.right,.top,.bottom):not(.max)>:is(ol,ul)>li>a.active:not(.button,.chip)>i{background-color:var(--secondary-container);color:var(--on-secondary-container)}nav.vertical>:is(ol,ul){align-items:normal}:is(nav,.row):is(.left-align,.top-align,.vertical){justify-content:flex-start}:is(nav,.row):is(.right-align,.bottom-align){justify-content:flex-end}:is(nav,.row):is(.center-align,.middle-align){justify-content:center}:is(nav,.row):is(.left-align,.top-align,.vertical).vertical{align-items:flex-start}:is(nav,.row):is(.right-align,.bottom-align).vertical{align-items:flex-end}:is(nav,.row):is(.center-align,.middle-align).vertical{align-items:center}nav:not(.left,.right)>.space{inline-size:.5rem}nav:not(.left,.right)>.medium-space{inline-size:1rem}nav:not(.left,.right)>.large-space{inline-size:1.5rem}nav.tabbed{background-color:var(--surface-container);border-radius:4rem!important;gap:0rem;block-size:4rem}nav.tabbed.small{block-size:3rem}nav.tabbed.large{block-size:5rem}nav.tabbed>a{border-radius:inherit;block-size:inherit;display:inline-flex;align-items:center;padding-inline:1rem;gap:.5rem;font-size:1rem;flex:1}nav.tabbed>a.active{background-color:var(--primary-container)}nav.toolbar{display:inline-flex;justify-content:space-around;border-radius:2rem;background-color:var(--surface-container);color:var(--on-surface);padding:0 1rem;gap:.5rem;min-block-size:4rem;min-inline-size:4rem}nav.toolbar>a{display:inline-flex;gap:.5rem;min-inline-size:2.5rem;min-block-size:2.5rem;border-radius:1.75rem}nav.toolbar>a:has(>:not(i)){padding:0 1rem}nav.toolbar>a.active{background-color:var(--secondary-container);color:var(--on-secondary-container)}nav.toolbar.fill{background-color:var(--primary-container)!important;color:var(--on-primary-container)!important}nav.toolbar.fill>a.active{background-color:var(--surface-container)!important;color:var(--on-surface)!important}nav.toolbar.vertical{flex-direction:column!important;min-inline-size:4rem;padding:1rem 0;align-self:center;align-items:center!important}nav.toolbar.vertical>a{inline-size:2.5rem;block-size:2.5rem}nav.toolbar.vertical>a>:is(div,span):not(.badge,.tooltip){display:none}nav.toolbar.max{border-radius:0;display:flex}nav.group{background:none!important}nav.group:is(.connected,.split){gap:.125rem}nav.group:not(.split)>:is(.button,button):not(.border){background-color:var(--surface-container);color:var(--on-surface-container)}nav.group:not(.split)>:is(.button,button).active{background-color:var(--primary);color:var(--on-primary)}nav.group.connected>:is(.button,button):not(.border){background-color:var(--surface-container);color:var(--on-surface-container)}nav.group.connected>:is(.button,button).active{background-color:var(--secondary-container);color:var(--on-secondary-container)}nav.group:is(.connected,.split)>:is(.button,button).active,nav.split>:is(.button,button):active{border-radius:2rem!important}:not(nav)>:is(ul,ol){all:revert}:is(.scroll,.no-scroll,.no-space,.tabs,.tabbed)>:focus-visible{outline:.125rem solid var(--primary);outline-offset:-.125rem}nav.split>:is(.button,button):not(.chip,.fill,.border){background-color:var(--primary);color:var(--on-primary)}@media only screen and (max-width:600px){nav.top,nav.bottom{justify-content:space-around}}.overlay,dialog::backdrop{display:block!important;opacity:0;visibility:hidden;position:fixed;top:0;right:0;bottom:0;left:0;color:var(--on-surface);background-color:var(--overlay);z-index:100;transition:all var(--speed3),0s background-color;border-radius:0}.overlay.active{opacity:1;visibility:visible}dialog:popover-open::backdrop{opacity:1;visibility:visible}.overlay+dialog::backdrop,.snackbar::backdrop{display:none}[popover]{border:0}.page{--_transform: translate(0, 0);opacity:0;position:absolute;display:none}.page.active{opacity:1;position:relative;display:block;animation:var(--speed4) to-page ease}.page.active.top{--_transform: translate(0, -4rem)}.page.active.bottom{--_transform: translate(0, 4rem)}.page.active.left{--_transform: translate(-4rem, 0)}.page.active.right{--_transform: translate(4rem, 0)}progress{--_size: .25rem;position:relative;inline-size:100%;block-size:var(--_size);color:var(--primary);background:var(--image);border-radius:1rem;flex:none;border:none;overflow:hidden;writing-mode:horizontal-tb;direction:ltr;-webkit-appearance:none;-moz-appearance:none;appearance:none}progress.small{--_size: .25rem}progress.medium{--_size: .35rem}progress.large{--_size: .45rem}progress.indeterminate{--_value: 100;animation:3.2s to-indeterminate-progress ease infinite}progress:not(.circle,[value]):after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;inline-size:100%;block-size:100%;clip-path:none;background:currentcolor;animation:3.2s to-linear-progress ease infinite}progress:not(.circle,[value])::-moz-progress-bar{animation:3.2s to-linear-progress ease infinite}progress:not(.circle,[value])::-webkit-progress-value{animation:3.2s to-linear-progress ease infinite}progress::-webkit-progress-bar{background:none}progress::-webkit-progress-value{background:currentColor}progress::-moz-progress-bar{background:currentColor}progress.wavy{block-size:calc(var(--_size, 0) * 2);background:none;background-image:var(--image);background-repeat:repeat-x;background-position:0 50%;background-size:auto calc(var(--_size, 0) / 2)}progress.wavy::-webkit-progress-value,progress.wavy:not(.circle,[value]):after{-webkit-mask-image:url(wavy.svg);mask-image:url(wavy.svg);-webkit-mask-position:0 50%;mask-position:0 50%;-webkit-mask-repeat:repeat-x;mask-repeat:repeat-x;-webkit-mask-size:auto 100%;mask-size:auto 100%}progress.wavy::-moz-progress-bar{-webkit-mask-image:url(wavy.svg);mask-image:url(wavy.svg);-webkit-mask-position:0 50%;mask-position:0 50%;-webkit-mask-repeat:repeat-x;mask-repeat:repeat-x;-webkit-mask-size:auto 100%;mask-size:auto 100%}progress.circle{--_value: attr(value type(<number>), 50);inline-size:2.5rem;block-size:2.5rem;background:conic-gradient(currentColor calc(var(--_value, 0) * 1%),var(--active) 0%);border-radius:50%;-webkit-mask-image:radial-gradient(circle at center,transparent 57%,currentColor 60%);mask-image:radial-gradient(circle at center,transparent 57%,currentColor 60%)}progress.circle::-webkit-progress-value{background:none}progress.circle::-moz-progress-bar{background:none}progress.circle.wavy{background:conic-gradient(currentColor calc(var(--_value, 0) * 1%),var(--active) 0);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-image:url(wavy-circle.svg);mask-image:url(wavy-circle.svg)}progress.circle.small{inline-size:1.5rem;block-size:1.5rem}progress.circle.large{inline-size:3.5rem;block-size:3.5rem}progress.circle:not([value]),progress.circle.indeterminate{--_value: 50;animation:to-rotate 1s infinite linear}:is(nav,.row,.field)>progress:not(.circle,.small,.medium,.large){flex:auto}progress.max{display:unset;position:absolute;inline-size:100%!important;block-size:100%!important;color:currentColor;background:none;top:0;right:0;bottom:0;left:0;border-radius:inherit;animation:none;writing-mode:horizontal-tb;opacity:.33}progress.max[class*=-text]{opacity:1}progress.max+*{margin-block-start:0}:is(.button,button,.chip)>progress.circle{color:inherit}.shape{display:flex;align-items:center;justify-content:center;color:var(--on-primary);background-color:var(--primary);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;border-radius:0;block-size:3.5rem;inline-size:3.5rem;margin:0!important;padding:0!important;border:0!important}.transparent>.shape>i{filter:invert(1)}.shape.tiny-space{-webkit-mask-size:90%;mask-size:90%}.shape.space,.shape.small-space{-webkit-mask-size:80%;mask-size:80%}.shape.medium-space{-webkit-mask-size:70%;mask-size:70%}.shape.large-space{-webkit-mask-size:60%;mask-size:60%}.shape.extra-space{-webkit-mask-size:50%;mask-size:50%}.shape.tiny{block-size:2.5rem;inline-size:2.5rem}.shape.medium{block-size:4.5rem;inline-size:4.5rem}.shape.large{block-size:5.5rem;inline-size:5.5rem}.shape.extra{block-size:6.5rem;inline-size:6.5rem}.shape.max,.shape>.responsive,.shape>.responsive>.responsive{position:absolute;top:0;right:0;bottom:0;left:0;block-size:100%;inline-size:100%;margin:0!important;padding:0!important;border:0!important}.shape>.responsive{background:inherit;color:inherit}.shape.rotate{animation:linear to-rotate infinite 12s}.shape.rotate>*{animation:linear to-rotate infinite 12s reverse}.shape.fast-rotate{animation:linear to-rotate infinite 6s}.shape.fast-rotate>*{animation:linear to-rotate infinite 6s reverse}.shape.slow-rotate{animation:linear to-rotate infinite 24s}.shape.slow-rotate>*{animation:linear to-rotate infinite 24s reverse}:is(button,.button,.chip):has(>.shape)>.responsive{border:none}.shape.arch{-webkit-mask-image:url(arch.svg);mask-image:url(arch.svg)}.shape.arrow{-webkit-mask-image:url(arrow.svg);mask-image:url(arrow.svg)}.shape.boom{-webkit-mask-image:url(boom.svg);mask-image:url(boom.svg)}.shape.bun{-webkit-mask-image:url(bun.svg);mask-image:url(bun.svg)}.shape.burst{-webkit-mask-image:url(burst.svg);mask-image:url(burst.svg)}.shape.circle{-webkit-mask-image:url(circle.svg);mask-image:url(circle.svg)}.shape.clamshell{-webkit-mask-image:url(clamshell.svg);mask-image:url(clamshell.svg)}.shape.diamond{-webkit-mask-image:url(diamond.svg);mask-image:url(diamond.svg)}.shape.fan{-webkit-mask-image:url(fan.svg);mask-image:url(fan.svg)}.shape.flower{-webkit-mask-image:url(flower.svg);mask-image:url(flower.svg)}.shape.gem{-webkit-mask-image:url(gem.svg);mask-image:url(gem.svg)}.shape.ghost-ish{-webkit-mask-image:url(ghost-ish.svg);mask-image:url(ghost-ish.svg)}.shape.heart{-webkit-mask-image:url(heart.svg);mask-image:url(heart.svg)}.shape.leaf-clover4{-webkit-mask-image:url(leaf-clover4.svg);mask-image:url(leaf-clover4.svg)}.shape.leaft-clover8{-webkit-mask-image:url(leaf-clover8.svg);mask-image:url(leaf-clover8.svg)}.shape.loading-indicator{-webkit-mask-image:url(loading-indicator.svg);mask-image:url(loading-indicator.svg)}.shape.oval{-webkit-mask-image:url(oval.svg);mask-image:url(oval.svg)}.shape.pentagon{-webkit-mask-image:url(pentagon.svg);mask-image:url(pentagon.svg)}.shape.pill{-webkit-mask-image:url(pill.svg);mask-image:url(pill.svg)}.shape.pixel-circle{-webkit-mask-image:url(pixel-circle.svg);mask-image:url(pixel-circle.svg)}.shape.pixel-triangle{-webkit-mask-image:url(pixel-triangle.svg);mask-image:url(pixel-triangle.svg)}.shape.puffy{-webkit-mask-image:url(puffy.svg);mask-image:url(puffy.svg)}.shape.puffy-diamond{-webkit-mask-image:url(puffy-diamond.svg);mask-image:url(puffy-diamond.svg)}.shape.semicircle{-webkit-mask-image:url(semicircle.svg);mask-image:url(semicircle.svg)}.shape.sided-cookie4{-webkit-mask-image:url(sided-cookie4.svg);mask-image:url(sided-cookie4.svg)}.shape.sided-cookie6{-webkit-mask-image:url(sided-cookie6.svg);mask-image:url(sided-cookie6.svg)}.shape.sided-cookie7{-webkit-mask-image:url(sided-cookie7.svg);mask-image:url(sided-cookie7.svg)}.shape.sided-cookie9{-webkit-mask-image:url(sided-cookie9.svg);mask-image:url(sided-cookie9.svg)}.shape.sided-cookie12{-webkit-mask-image:url(sided-cookie12.svg);mask-image:url(sided-cookie12.svg)}.shape.slanted{-webkit-mask-image:url(slanted.svg);mask-image:url(slanted.svg)}.shape.soft-boom{-webkit-mask-image:url(soft-boom.svg);mask-image:url(soft-boom.svg)}.shape.soft-burst{-webkit-mask-image:url(soft-burst.svg);mask-image:url(soft-burst.svg)}.shape.square{-webkit-mask-image:url(square.svg);mask-image:url(square.svg)}.shape.sunny{-webkit-mask-image:url(sunny.svg);mask-image:url(sunny.svg)}.shape.triangle{-webkit-mask-image:url(triangle.svg);mask-image:url(triangle.svg)}.shape.very-sunny{-webkit-mask-image:url(very-sunny.svg);mask-image:url(very-sunny.svg)}.checkbox,.radio,.switch{--_size: 1.5rem;inline-size:auto;block-size:auto;line-height:normal;white-space:nowrap;cursor:pointer;display:inline-flex;align-items:center}.switch{direction:ltr}:is(.checkbox,.radio,.switch).small{--_size: 1rem}:is(.checkbox,.radio,.switch).large{--_size: 2rem}:is(.checkbox,.radio,.switch).extra{--_size: 2.5rem}:is(.checkbox,.radio)>input{inline-size:var(--_size);block-size:var(--_size);opacity:0}.switch>input{inline-size:3.25rem;block-size:2rem;opacity:0}:is(.checkbox,.radio,.switch)>span{display:inline-flex;align-items:center;color:var(--on-surface);font-size:.875rem}:is(.checkbox,.radio)>span:not(:empty){padding-inline-start:.25rem}:is(.checkbox,.radio,.switch)>span:before,:is(.checkbox,.radio,.switch)>span>i,:is(.checkbox,.radio)>span:after{--_size: inherit;content:"";inline-size:var(--_size);block-size:var(--_size);box-sizing:border-box;margin:0 auto;outline:none;color:var(--primary);position:absolute;inset:auto auto auto calc(var(--_size, 0) * -1);border-radius:50%;-webkit-user-select:none;user-select:none;z-index:1}[dir=rtl] :is(.checkbox,.radio)>span:before,[dir=rtl] :is(.checkbox,.radio)>span>i,[dir=rtl] :is(.checkbox,.radio)>span:after{--_size: inherit;inset:auto calc(var(--_size, 0) * -1) auto auto}.switch>span:before,.switch.icon>span>i{position:absolute;inset:50% auto auto 0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--speed2);font-size:calc(var(--_size, 0) - .5rem);-webkit-user-select:none;user-select:none;min-inline-size:var(--_size);min-block-size:var(--_size);content:"";color:var(--surface-variant);background-color:var(--outline)}.switch>span:before,.switch.icon>span>i{transform:translate(-3rem,-50%) scale(.6)}.switch.icon>span>i{transform:translate(-3rem,-50%) scale(1)}.checkbox>span:before{content:"check_box_outline_blank"}.checkbox>input:checked+span:before{content:"check_box";font-variation-settings:"FILL" 1}.checkbox>input:indeterminate+span:before{content:"indeterminate_check_box"}.radio>span:before{content:"radio_button_unchecked"}.radio>input:checked+span:before{content:"radio_button_checked"}:is(.radio,.checkbox,.switch).icon>span:before{content:""!important;font-variation-settings:unset!important}:is(.checkbox,.radio)>span:after{transition:all var(--speed1);background-color:currentColor;box-shadow:0 0 0 0 currentColor;opacity:0}:is(.checkbox,.radio):is(:hover)>input:not(:disabled)+span:after,:is(.checkbox,.radio)>input:not(:disabled):is(:focus)+span:after{box-shadow:0 0 0 .5rem currentColor;opacity:.1}.switch>input:not(:disabled):is(:focus,:hover)+span:before,.switch.icon>input:not(:disabled):is(:focus,:hover)+span>i{box-shadow:0 0 0 .5rem var(--active)}:is(.checkbox,.radio)>input:checked+span:before,:is(.checkbox,.radio).icon>input:checked+span>i{color:var(--primary)}.icon>input:checked+span>i:first-child,.icon>span>i:last-child{opacity:0}.icon>input:checked+span>i:last-child,.icon>span>i:first-child{opacity:1}.switch>input:checked+span:after{border:none;background-color:var(--primary)}.switch>input:checked+span:before,.switch.icon>input:checked+span>i{content:"check";color:var(--primary);background-color:var(--on-primary);transform:translate(-1.75rem,-50%) scale(1)}.switch>input:active:not(:disabled)+span:before,.switch.icon>input:active:not(:disabled)+span>i{transform:translate(-3rem,-50%) scale(1.2)}[dir=rtl] .switch>input:active:not(:disabled)+span:before,[dir=rtl] .switch.icon>input:active:not(:disabled)+span>i{transform:translate(-3rem,-50%) scale(-1.2)}.switch>input:active:checked:not(:disabled)+span:before,.switch.icon>input:active:checked:not(:disabled)+span>i{transform:translate(-1.75rem,-50%) scale(1.2)}[dir=rtl] .switch>input:active:checked:not(:disabled)+span:before,[dir=rtl] .switch.icon>input:active:checked:not(:disabled)+span>i{transform:translate(-1.75rem,-50%) scale(-1.2)}:is(.checkbox,.radio,.switch)>input:disabled+span{opacity:.5;cursor:not-allowed}.switch>span:after{content:"";position:absolute;inset:50% auto auto 0;background-color:var(--active);border:.125rem solid var(--outline);box-sizing:border-box;inline-size:3.25rem;block-size:2rem;border-radius:2rem;transform:translate(-3.25rem,-50%)}.field>:is(nav,.row){flex-grow:1;padding:0 1rem}.field.round>:is(nav,.row){flex-grow:1;padding:0 1.5rem}[dir=rtl] .switch{transform:scale(-1)}[dir=rtl] .switch>span:before,[dir=rtl] .switch.icon>span>i{transform:translate(-3rem,-50%) scale(-.6)}[dir=rtl] .switch.icon>span>i{transform:translate(-3rem,-50%) scale(-1)}[dir=rtl] .switch>input:checked+span:before,[dir=rtl] .switch.icon>input:checked+span>i{transform:translate(-1.75rem,-50%) scale(-1)}.switch>:focus-visible+span:after{outline:.125rem solid var(--primary);outline-offset:.25rem}:is(.checkbox,.radio)>:focus-visible+span:before{outline:.125rem solid var(--primary);outline-offset:.375rem}.slider{--_start: 0%;--_end: 0%;--_value1: "";--_value2: "";--_track: 1rem;--_thumb: max(2.5rem, calc(var(--_track, 0) + .5rem));display:flex;align-items:center!important;inline-size:auto;block-size:var(--_thumb);flex:none;direction:ltr;margin:0 1.25rem;color:var(--primary)}[dir=rtl] .slider{transform:scaleX(-1)}.slider.vertical{flex-direction:row!important;margin:.5rem auto!important;padding:50% 0;transform:rotate(-90deg);inline-size:100%}.slider.tiny{--_track: 1rem}.slider.small{--_track: 1.5rem}.slider.medium{--_track: 2.5rem}.slider.large{--_track: 3.5rem}.slider.extra{--_track: 6rem}.slider>input{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border:none;outline:none;pointer-events:none;inline-size:100%;block-size:var(--_track);background:none;z-index:1;padding:0;margin:0;transform:rotate(0);touch-action:none}.slider>input:only-of-type{pointer-events:all}.slider>input~input{position:absolute}.slider>input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border:none;outline:none;pointer-events:all;block-size:var(--_thumb);inline-size:.25rem;border-radius:.25rem;background:currentColor;cursor:grab;margin:0;z-index:1}.slider>input::-webkit-slider-thumb:active{cursor:grabbing}.slider>input::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border:none;outline:none;pointer-events:all;block-size:2.75rem;inline-size:.25rem;border-radius:.25rem;background:var(--primary);cursor:grab;margin:0}.slider>input::-moz-range-thumb:active{cursor:grabbing}.slider>input:not(:disabled):is(:focus)::-webkit-slider-thumb{transform:scaleX(.6)}.slider>input:not(:disabled):is(:focus)::-moz-range-thumb{transform:scaleX(.6)}.slider>input:disabled{cursor:not-allowed;opacity:1}.slider>input:disabled::-webkit-slider-thumb{background:var(--outline);cursor:not-allowed}.slider>input:disabled::-moz-range-thumb{background:var(--outline);cursor:not-allowed}.slider>input:disabled~span:not([class]){background:var(--outline)}.slider>span:not([class]){position:absolute;block-size:var(--_track);border-radius:1rem 0 0 1rem;background:currentColor;color:currentColor;z-index:0;inset:calc(50% - (var(--_track, 0) / 2)) calc(var(--_end) + .5rem) auto var(--_start)}.slider>input[type=range]+input[type=range]~span:not([class]){border-radius:0;inset:calc(50% - (var(--_track, 0) / 2)) calc(var(--_end) + .5rem) auto calc(var(--_start) + .5rem)}.field>.slider{inline-size:100%}.slider:before{content:"";position:absolute;inline-size:100%;block-size:var(--_track);border-radius:1rem;background:var(--active);clip-path:polygon(calc(var(--_start, 0) - .5rem) 0,0 0,0 100%,calc(var(--_start, 0) - .5rem) 100%,calc(var(--_start, 0) - .5rem) 0,calc(100% - var(--_end, 0) + .5rem) 0,100% 0,100% 100%,calc(100% - var(--_end, 0) + .5rem) 100%,calc(100% - var(--_end, 0) + .5rem) 0)}.slider:has(>[disabled]):before{background:var(--active)}.slider:has([disabled]){opacity:.62}.slider>span>i{position:absolute;block-size:auto;inset:0 auto 0 .5rem;color:var(--inverse-primary);z-index:1}.slider:not(.medium,.large,.extra)>span>i{display:none}.slider.vertical>i{transform:rotate(90deg)}.slider>.tooltip{visibility:hidden!important;opacity:0!important;inset:0 auto auto calc(100% - var(--_end, 0));border-radius:2rem;transition:top var(--speed2) ease,opacity var(--speed2) ease;transform:translate(-50%,-25%)!important;padding:.75rem 1rem}.slider>.tooltip.bottom{inset:auto auto 0 calc(100% - var(--_end, 0));transition:bottom var(--speed2) ease,opacity var(--speed2) ease;transform:translate(-50%,25%)!important}[dir=rtl] .slider>.tooltip{transform:translate(-50%,-25%) scaleX(-1)!important}[dir=rtl] .slider>.tooltip.bottom{transform:translate(-50%,25%) scaleX(-1)!important}.slider>.tooltip+.tooltip{inset:.25rem calc(100% - var(--_start, 0)) auto auto;transform:translate(50%,-25%)!important}.slider>.tooltip+.tooltip.bottom{inset:auto calc(100% - var(--_start, 0)) -.25rem auto;transform:translate(50%,25%)!important}[dir=rtl] .slider>.tooltip+.tooltip{transform:translate(50%,-25%) scaleX(-1)!important}[dir=rtl] .slider>.tooltip+.tooltip.bottom{transform:translate(50%,25%) scaleX(-1)!important}.slider>.tooltip:before{content:var(--_value1)}.slider>.tooltip+.tooltip:before{content:var(--_value2)}.slider>:focus~.tooltip{inset-block:-1rem auto;opacity:1!important;visibility:visible!important}.slider>:focus~.tooltip.bottom{inset-block:auto -1rem}.slider.vertical>.tooltip{inset-block:auto;block-size:2.5rem;inline-size:2.5rem;margin-block:calc(-1 * var(--_thumb, 0)) 0!important;transform:rotate(90deg) translate(-75%,50%)!important}.slider.vertical>.tooltip.bottom{inset-block:auto;margin-block:0 calc(-1 * var(--_thumb, 0))!important;transform:rotate(90deg) translate(75%,50%)!important}.slider.vertical>.tooltip+.tooltip{transform:rotate(90deg) translate(-75%,-50%)!important}.slider.vertical>.tooltip+.tooltip.bottom{transform:rotate(90deg) translate(75%,-50%)!important}:is(nav,.row,.field)>.slider:not(.circle,.small,.medium,.large){flex:auto}.slider.max,.slider.max.vertical,.slider.max>input,.slider.max.vertical>input{all:unset;margin:0!important;position:absolute;color:var(--primary);top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;z-index:2;cursor:grab;inline-size:100%;block-size:100%}.slider.max:before{display:none}.slider.max.vertical>input{writing-mode:vertical-lr;transform:rotate(-180deg)}.slider.max>input::-webkit-slider-thumb{opacity:0;inline-size:1rem;block-size:100vh;transform:none!important}.slider.max>input::-moz-range-thumb{opacity:0;inline-size:1rem;block-size:100vh;transform:none!important}.slider.max>span:not([class]){block-size:auto!important;inset:0 var(--_end) 0 var(--_start);background:currentcolor;color:inherit;border-radius:0}.slider.max.vertical>span:not([class]){inset:var(--_end) 0 var(--_start) 0}.slider>input:focus-visible::-webkit-slider-thumb{outline:.1875rem solid var(--primary);outline-offset:.25rem}.slider>input:focus-visible::-moz-range-thumb{outline:.1875rem solid var(--primary);outline-offset:.25rem}.slider.max>input:focus-visible{outline:.1875rem solid var(--primary);outline-offset:-.125rem}@media(pointer:coarse){.slider>:hover~.tooltip{inset-block:-1rem auto!important;opacity:1!important;visibility:visible!important}.slider>:hover~.tooltip.bottom{inset-block:auto -1rem!important}}.snackbar{position:fixed;inset:auto auto 6rem 50%;inline-size:80%;block-size:auto;z-index:200;visibility:hidden;display:flex;box-shadow:var(--elevate2);color:var(--inverse-on-surface);background-color:var(--inverse-surface);padding:1rem;cursor:pointer;text-align:start;align-items:center;border-radius:.25rem;gap:.5rem;transition:all var(--speed2);transform:translate(-50%,1rem);opacity:0}.snackbar.top{inset:6rem auto auto 50%}.snackbar:is(.active){visibility:visible;transform:translate(-50%);opacity:1}.snackbar:popover-open{visibility:visible;transform:translate(-50%);opacity:1}.snackbar>.max{flex:auto}@media only screen and (min-width:993px){.snackbar{inline-size:40%}}table{inline-size:100%;border-spacing:0;font-size:.875rem;text-align:start}.scroll>table,table :is(thead,tbody,tfoot,tr,th,td){background-color:inherit;color:inherit}:is(th,td){inline-size:auto;text-align:inherit;padding:.5rem;border-radius:0}:is(th,td)>*{vertical-align:middle}table.border>tbody>tr:not(:last-child)>td,thead>tr>th{border-block-end:.0625rem solid var(--outline)}tfoot>tr>th{border-block-start:.0625rem solid var(--outline)}table.stripes>tbody>tr:nth-child(odd){background-color:var(--active)}table.no-space :is(th,td){padding:0}table.medium-space :is(th,td){padding:.75rem}table.large-space :is(th,td){padding:1rem}table>.fixed,th.fixed{position:sticky;z-index:1;inset-block-start:0}tfoot.fixed,tfoot th.fixed{inset-block-end:0}:is(td,th).min{inline-size:.1%;white-space:nowrap}.tabs{display:flex;white-space:nowrap;border-block-end:.0625rem solid var(--surface-variant);border-radius:0}.tabs:not(.left-align,.right-align,.center-align){justify-content:space-around}.tabs>a{display:flex;font-size:.875rem;font-weight:500;color:var(--on-surface-variant);padding:.5rem 1rem;text-align:center;min-block-size:3rem;inline-size:100%;gap:.25rem}.tabs.small>a{min-block-size:2rem}.tabs.large>a{min-block-size:4rem}.tabs>a.active,.tabs>a.active>i{color:var(--primary)}.tabs>a.active:before{content:"";position:absolute;inset:auto 0 0 0;block-size:.125rem;background-color:var(--primary)}.tabs.min>a.active:before{margin:0 auto;max-inline-size:min(100%,4rem)}.tabs:is(.left-align,.center-align,.right-align)>a{inline-size:auto}.tooltip{--_space: -.5rem;visibility:hidden;display:flex;align-items:center;justify-content:center;gap:.5rem;background-color:var(--inverse-surface);color:var(--inverse-on-surface);font-size:.75rem;text-align:center;border-radius:.25rem;padding:.5rem;position:absolute;z-index:200;inset:0 auto auto 50%;inline-size:auto;white-space:nowrap;font-weight:500;opacity:0;transition:all var(--speed2);line-height:normal;transform:translate(-50%,-100%) scale(.9)}.tooltip:not(.max):hover{visibility:hidden;opacity:0}.tooltip.left{inset:50% auto auto 0;transform:translate(-100%,-50%) scale(.9)}.tooltip.right{inset:50% 0 auto auto;transform:translate(100%,-50%) scale(.9)}.tooltip.bottom{inset:auto auto 0 50%;transform:translate(-50%,100%) scale(.9)}.tooltip.small{inline-size:8rem;white-space:normal}.tooltip.medium{inline-size:12rem;white-space:normal}.tooltip.large{inline-size:16rem;white-space:normal}:hover>.tooltip{visibility:visible;opacity:1;transform:translate(-50%,-100%) scale(1)}:hover>.tooltip.left{transform:translate(-100%,-50%) scale(1)}:hover>.tooltip.right{transform:translate(100%,-50%) scale(1)}:hover>.tooltip.bottom{transform:translate(-50%,100%) scale(1)}.tooltip.no-space{--_space: 0}.tooltip.medium-space{--_space: -1rem}.tooltip.large-space{--_space: -1.5rem}.tooltip:not(.left,.right,.bottom){margin-block-start:var(--_space)!important}.tooltip.left,.tooltip.right{margin-inline:var(--_space)!important}.tooltip.bottom{margin-block-end:var(--_space)!important}menu:active~.tooltip,:is(button,.button):focus>menu~.tooltip,.field>:focus~menu~.tooltip{visibility:hidden}.slider>.tooltip{--_space: -1.25rem}.slider.vertical>.tooltip{--_space: -.75rem}.slider.vertical>.tooltip:is(.left,.right){--_space: -.5rem}.tooltip.max{display:block;font-size:inherit;white-space:normal;text-align:start;inline-size:20rem;border-radius:.5rem;padding:1rem;box-shadow:var(--elevate2)}.transparent{background-color:transparent!important;box-shadow:none!important;color:inherit!important}.primary{background-color:var(--primary)!important;color:var(--on-primary)!important}.primary-text{color:var(--primary)!important}.primary-border{border-color:var(--primary)!important}.primary-container{background-color:var(--primary-container)!important;color:var(--on-primary-container)!important}.secondary{background-color:var(--secondary)!important;color:var(--on-secondary)!important}.secondary-text{color:var(--secondary)!important}.secondary-border{border-color:var(--secondary)!important}.secondary-container{background-color:var(--secondary-container)!important;color:var(--on-secondary-container)!important}.tertiary{background-color:var(--tertiary)!important;color:var(--on-tertiary)!important}.tertiary-text{color:var(--tertiary)!important}.tertiary-border{border-color:var(--tertiary)!important}.tertiary-container{background-color:var(--tertiary-container)!important;color:var(--on-tertiary-container)!important}.error{background-color:var(--error)!important;color:var(--on-error)!important}.error-text{color:var(--error)!important}.error-border{border-color:var(--error)!important}.error-container{background-color:var(--error-container)!important;color:var(--on-error-container)!important}.background{background-color:var(--background)!important;color:var(--on-background)!important}.surface,.surface-dim,.surface-bright,.surface-container-lowest,.surface-container-low,.surface-container,.surface-container-high,.surface-container-highest{background-color:var(--surface)!important;color:var(--on-surface)!important}.surface-variant{background-color:var(--surface-variant)!important;color:var(--on-surface-variant)!important}.inverse-surface{background-color:var(--inverse-surface);color:var(--inverse-on-surface)}.inverse-primary{background-color:var(--inverse-primary);color:var(--primary)}.inverse-primary-text{color:var(--inverse-primary)!important}.inverse-primary-border{border-color:var(--inverse-primary)!important}.surface-dim{background-color:var(--surface-dim)!important}.surface-bright{background-color:var(--surface-bright)!important}.surface-container-lowest{background-color:var(--surface-container-lowest)!important}.surface-container{background-color:var(--surface-container)!important}.surface-container-high{background-color:var(--surface-container-high)!important}.surface-container-highest{background-color:var(--surface-container-highest)!important}.surface-container-low{background-color:var(--surface-container-low)!important}.black{background-color:#000!important}.black-border{border-color:#000!important}.black-text{color:#000!important}.white{background-color:#fff!important}.white-border{border-color:#fff!important}.white-text{color:#fff!important}.transparent-border{border-color:transparent!important}.transparent-text{color:transparent!important}.fill:not(i){background-color:var(--surface-variant)!important;color:var(--on-surface-variant)!important}nav.primary-container>button,:is(nav,menu).primary>:is(button,a,li).active{background-color:var(--primary-container)!important;color:var(--on-primary-container)!important}nav.primary>button,:is(nav,menu).primary-container>:is(button,a,li).active{background-color:var(--primary)!important;color:var(--on-primary)!important}nav.secondary-container>button,:is(nav,menu).secondary>:is(button,a,li).active{background-color:var(--secondary-container)!important;color:var(--on-secondary-container)!important}nav.secondary>button,:is(nav,menu).secondary-container>:is(button,a,li).active{background-color:var(--secondary)!important;color:var(--on-secondary)!important}nav.tertiary-container>button,:is(nav,menu).tertiary>:is(button,a,li).active{background-color:var(--tertiary-container)!important;color:var(--on-tertiary-container)!important}nav.tertiary>button,:is(nav,menu).tertiary-container>:is(button,a,li).active{background-color:var(--tertiary)!important;color:var(--on-tertiary)!important}.red,.red6{background-color:#f44336!important}.red-border{border-color:#f44336!important}.red-text{color:#f44336!important}.red1{background-color:#ffebee!important}.red2{background-color:#ffcdd2!important}.red3{background-color:#ef9a9a!important}.red4{background-color:#e57373!important}.red5{background-color:#ef5350!important}.red7{background-color:#e53935!important}.red8{background-color:#d32f2f!important}.red9{background-color:#c62828!important}.red10{background-color:#b71c1c!important}.pink,.pink6{background-color:#e91e63!important}.pink-border{border-color:#e91e63!important}.pink-text{color:#e91e63!important}.pink1{background-color:#fce4ec!important}.pink2{background-color:#f8bbd0!important}.pink3{background-color:#f48fb1!important}.pink4{background-color:#f06292!important}.pink5{background-color:#ec407a!important}.pink7{background-color:#d81b60!important}.pink8{background-color:#c2185b!important}.pink9{background-color:#ad1457!important}.pink10{background-color:#880e4f!important}.purple,.purple6{background-color:#9c27b0!important}.purple-border{border-color:#9c27b0!important}.purple-text{color:#9c27b0!important}.purple1{background-color:#f3e5f5!important}.purple2{background-color:#e1bee7!important}.purple3{background-color:#ce93d8!important}.purple4{background-color:#ba68c8!important}.purple5{background-color:#ab47bc!important}.purple7{background-color:#8e24aa!important}.purple8{background-color:#7b1fa2!important}.purple9{background-color:#6a1b9a!important}.purple10{background-color:#4a148c!important}.deep-purple,.deep-purple6{background-color:#673ab7!important}.deep-purple-border{border-color:#673ab7!important}.deep-purple-text{color:#673ab7!important}.deep-purple1{background-color:#ede7f6!important}.deep-purple2{background-color:#d1c4e9!important}.deep-purple3{background-color:#b39ddb!important}.deep-purple4{background-color:#9575cd!important}.deep-purple5{background-color:#7e57c2!important}.deep-purple7{background-color:#5e35b1!important}.deep-purple8{background-color:#512da8!important}.deep-purple9{background-color:#4527a0!important}.deep-purple10{background-color:#311b92!important}.indigo,.indigo6{background-color:#3f51b5!important}.indigo-border{border-color:#3f51b5!important}.indigo-text{color:#3f51b5!important}.indigo1{background-color:#e8eaf6!important}.indigo2{background-color:#c5cae9!important}.indigo3{background-color:#9fa8da!important}.indigo4{background-color:#7986cb!important}.indigo5{background-color:#5c6bc0!important}.indigo7{background-color:#3949ab!important}.indigo8{background-color:#303f9f!important}.indigo9{background-color:#283593!important}.indigo10{background-color:#1a237e!important}.blue,.blue6{background-color:#2196f3!important}.blue-border{border-color:#2196f3!important}.blue-text{color:#2196f3!important}.blue1{background-color:#e3f2fd!important}.blue2{background-color:#bbdefb!important}.blue3{background-color:#90caf9!important}.blue4{background-color:#64b5f6!important}.blue5{background-color:#42a5f5!important}.blue7{background-color:#1e88e5!important}.blue8{background-color:#1976d2!important}.blue9{background-color:#1565c0!important}.blue10{background-color:#0d47a1!important}.light-blue,.light-blue6{background-color:#03a9f4!important}.light-blue-border{border-color:#03a9f4!important}.light-blue-text{color:#03a9f4!important}.light-blue1{background-color:#e1f5fe!important}.light-blue2{background-color:#b3e5fc!important}.light-blue3{background-color:#81d4fa!important}.light-blue4{background-color:#4fc3f7!important}.light-blue5{background-color:#29b6f6!important}.light-blue7{background-color:#039be5!important}.light-blue8{background-color:#0288d1!important}.light-blue9{background-color:#0277bd!important}.light-blue10{background-color:#01579b!important}.cyan,.cyan6{background-color:#00bcd4!important}.cyan-border{border-color:#00bcd4!important}.cyan-text{color:#00bcd4!important}.cyan1{background-color:#e0f7fa!important}.cyan2{background-color:#b2ebf2!important}.cyan3{background-color:#80deea!important}.cyan4{background-color:#4dd0e1!important}.cyan5{background-color:#26c6da!important}.cyan7{background-color:#00acc1!important}.cyan8{background-color:#0097a7!important}.cyan9{background-color:#00838f!important}.cyan10{background-color:#006064!important}.teal,.teal6{background-color:#009688!important}.teal-border{border-color:#009688!important}.teal-text{color:#009688!important}.teal1{background-color:#e0f2f1!important}.teal2{background-color:#b2dfdb!important}.teal3{background-color:#80cbc4!important}.teal4{background-color:#4db6ac!important}.teal5{background-color:#26a69a!important}.teal7{background-color:#00897b!important}.teal8{background-color:#00796b!important}.teal9{background-color:#00695c!important}.teal10{background-color:#004d40!important}.green,.green6{background-color:#4caf50!important}.green-border{border-color:#4caf50!important}.green-text{color:#4caf50!important}.green1{background-color:#e8f5e9!important}.green2{background-color:#c8e6c9!important}.green3{background-color:#a5d6a7!important}.green4{background-color:#81c784!important}.green5{background-color:#66bb6a!important}.green7{background-color:#43a047!important}.green8{background-color:#388e3c!important}.green9{background-color:#2e7d32!important}.green10{background-color:#1b5e20!important}.light-green,.light-green6{background-color:#8bc34a!important}.light-green-border{border-color:#8bc34a!important}.light-green-text{color:#8bc34a!important}.light-green1{background-color:#f1f8e9!important}.light-green2{background-color:#dcedc8!important}.light-green3{background-color:#c5e1a5!important}.light-green4{background-color:#aed581!important}.light-green5{background-color:#9ccc65!important}.light-green7{background-color:#7cb342!important}.light-green8{background-color:#689f38!important}.light-green9{background-color:#558b2f!important}.light-green10{background-color:#33691e!important}.lime,.lime6{background-color:#cddc39!important}.lime-border{border-color:#cddc39!important}.lime-text{color:#cddc39!important}.lime1{background-color:#f9fbe7!important}.lime2{background-color:#f0f4c3!important}.lime3{background-color:#e6ee9c!important}.lime4{background-color:#dce775!important}.lime5{background-color:#d4e157!important}.lime7{background-color:#c0ca33!important}.lime8{background-color:#afb42b!important}.lime9{background-color:#9e9d24!important}.lime10{background-color:#827717!important}.yellow,.yellow6{background-color:#ffeb3b!important}.yellow-border{border-color:#ffeb3b!important}.yellow-text{color:#ffeb3b!important}.yellow1{background-color:#fffde7!important}.yellow2{background-color:#fff9c4!important}.yellow3{background-color:#fff59d!important}.yellow4{background-color:#fff176!important}.yellow5{background-color:#ffee58!important}.yellow7{background-color:#fdd835!important}.yellow8{background-color:#fbc02d!important}.yellow9{background-color:#f9a825!important}.yellow10{background-color:#f57f17!important}.amber,.amber6{background-color:#ffc107!important}.amber-border{border-color:#ffc107!important}.amber-text{color:#ffc107!important}.amber1{background-color:#fff8e1!important}.amber2{background-color:#ffecb3!important}.amber3{background-color:#ffe082!important}.amber4{background-color:#ffd54f!important}.amber5{background-color:#ffca28!important}.amber7{background-color:#ffb300!important}.amber8{background-color:#ffa000!important}.amber9{background-color:#ff8f00!important}.amber10{background-color:#ff6f00!important}.orange,.orange6{background-color:#ff9800!important}.orange-border{border-color:#ff9800!important}.orange-text{color:#ff9800!important}.orange1{background-color:#fff3e0!important}.orange2{background-color:#ffe0b2!important}.orange3{background-color:#ffcc80!important}.orange4{background-color:#ffb74d!important}.orange5{background-color:#ffa726!important}.orange7{background-color:#fb8c00!important}.orange8{background-color:#f57c00!important}.orange9{background-color:#ef6c00!important}.orange10{background-color:#e65100!important}.deep-orange,.deep-orange6{background-color:#ff5722!important}.deep-orange-border{border-color:#ff5722!important}.deep-orange-text{color:#ff5722!important}.deep-orange1{background-color:#fbe9e7!important}.deep-orange2{background-color:#ffccbc!important}.deep-orange3{background-color:#ffab91!important}.deep-orange4{background-color:#ff8a65!important}.deep-orange5{background-color:#ff7043!important}.deep-orange7{background-color:#f4511e!important}.deep-orange8{background-color:#e64a19!important}.deep-orange9{background-color:#d84315!important}.deep-orange10{background-color:#bf360c!important}.brown,.brown6{background-color:#795548!important}.brown-border{border-color:#795548!important}.brown-text{color:#795548!important}.brown1{background-color:#efebe9!important}.brown2{background-color:#d7ccc8!important}.brown3{background-color:#bcaaa4!important}.brown4{background-color:#a1887f!important}.brown5{background-color:#8d6e63!important}.brown7{background-color:#6d4c41!important}.brown8{background-color:#5d4037!important}.brown9{background-color:#4e342e!important}.brown10{background-color:#3e2723!important}.blue-grey,.blue-grey6{background-color:#607d8b!important}.blue-grey-border{border-color:#607d8b!important}.blue-grey-text{color:#607d8b!important}.blue-grey1{background-color:#eceff1!important}.blue-grey2{background-color:#cfd8dc!important}.blue-grey3{background-color:#b0bec5!important}.blue-grey4{background-color:#90a4ae!important}.blue-grey5{background-color:#78909c!important}.blue-grey7{background-color:#546e7a!important}.blue-grey8{background-color:#455a64!important}.blue-grey9{background-color:#37474f!important}.blue-grey10{background-color:#263238!important}.grey,.grey6{background-color:#9e9e9e!important}.grey-border{border-color:#9e9e9e!important}.grey-text{color:#9e9e9e!important}.grey1{background-color:#fafafa!important}.grey2{background-color:#f5f5f5!important}.grey3{background-color:#eee!important}.grey4{background-color:#e0e0e0!important}.grey5{background-color:#bdbdbd!important}.grey7{background-color:#757575!important}.grey8{background-color:#616161!important}.grey9{background-color:#424242!important}.grey10{background-color:#212121!important}
5
7
 
@@ -11,15 +13,13 @@
11
13
  *
12
14
  * AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
13
15
  * Source: design-system/src/tokens/tokens.json
14
- * Generated: 2026-05-18T19:35:17.082Z
16
+ * Generated: 2026-08-04T15:24:23.823Z
15
17
  *
16
18
  * To regenerate:
17
19
  * cd design-system && npm run tokens:generate
18
20
  */
19
21
 
20
22
  /* Font imports - must be at the top of the file */
21
- @import url('https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600;700&family=Roboto:wght@400;500;700&family=Inter:wght@400;500;600&display=swap');
22
-
23
23
  :root {
24
24
  /* ==========================================================================
25
25
  COLOR TOKENS
@@ -48,15 +48,21 @@
48
48
  --kds-color-success-main: #2E7D32;
49
49
  --kds-color-success-light: #4CAF50;
50
50
  --kds-color-success-dark: #1B5E20;
51
+ --kds-color-success-contrast: #FFFFFF;
51
52
  --kds-color-warning-main: #EF6C00;
52
53
  --kds-color-warning-light: #FF9800;
53
54
  --kds-color-warning-dark: #E65100;
55
+ --kds-color-warning-contrast: #FFFFFF;
56
+ --kds-color-warning-warm: #8A6D1A;
54
57
  --kds-color-error-main: #D32F2F;
55
58
  --kds-color-error-light: #EF5350;
56
59
  --kds-color-error-dark: #C62828;
60
+ --kds-color-error-contrast: #FFFFFF;
57
61
  --kds-color-info-main: #0288D1;
58
62
  --kds-color-info-light: #03A9F4;
59
63
  --kds-color-info-dark: #01579B;
64
+ --kds-color-info-contrast: #FFFFFF;
65
+ --kds-color-info-blue: #5A5FE0;
60
66
 
61
67
  /* Text colors */
62
68
  --kds-color-text-primary: #333333;
@@ -69,6 +75,7 @@
69
75
  --kds-color-background-paper: #FFFFFF;
70
76
  --kds-color-background-elevated: #FAFAFA;
71
77
  --kds-color-background-muted: #F4F4F7;
78
+ --kds-color-background-brand-subtle: #F0F0FA;
72
79
 
73
80
  /* Action colors */
74
81
  --kds-color-action-active: rgba(0, 0, 0, 0.56);
@@ -134,6 +141,8 @@
134
141
  --kds-font-weight-bold: 700;
135
142
 
136
143
  /* Font sizes (base scale xs–4xl: see responsive section below) */
144
+ --kds-font-size-decimal-sup: 0.5em;
145
+
137
146
  /* Line heights */
138
147
  --kds-line-height-tight: 1.2;
139
148
  --kds-line-height-snug: 1.375;
@@ -355,6 +364,7 @@
355
364
  RESPONSIVE TYPOGRAPHY (MOBILE BASE)
356
365
  ========================================================================== */
357
366
 
367
+ --kds-font-size-2xs: 0.5625rem;
358
368
 
359
369
  /* Base font-size scale */
360
370
  --kds-font-size-xs: 0.6875rem;
@@ -384,6 +394,112 @@
384
394
 
385
395
  }
386
396
 
397
+ /* ============================================================================
398
+ DARK MODE COLOR TOKENS
399
+ Override only color variables; everything else inherits from :root.
400
+ Activated via [data-theme="dark"] on <html>, <body>, or a wrapper.
401
+ ============================================================================ */
402
+
403
+ [data-theme="dark"] {
404
+
405
+ /* Primary palette - Khipu brand */
406
+ --kds-color-primary-main: #E3B5FF;
407
+ --kds-color-primary-light: #F1D6FF;
408
+ --kds-color-primary-dark: #4C0676;
409
+ --kds-color-primary-contrast: rgba(76, 6, 118, 0.87);
410
+ --kds-color-primary-hover: rgba(227, 181, 255, 0.08);
411
+ --kds-color-primary-selected: rgba(227, 181, 255, 0.16);
412
+ --kds-color-primary-focus: rgba(227, 181, 255, 0.24);
413
+ --kds-color-primary-focus-visible: rgba(227, 181, 255, 0.40);
414
+ --kds-color-primary-outlined-border: rgba(227, 181, 255, 0.50);
415
+
416
+ /* Secondary palette */
417
+ --kds-color-secondary-main: #B5EAFF;
418
+ --kds-color-secondary-light: #D6F3FF;
419
+ --kds-color-secondary-dark: #065676;
420
+ --kds-color-secondary-contrast: rgba(6, 86, 118, 0.87);
421
+
422
+ /* Semantic colors */
423
+ --kds-color-success-main: #2E7D32;
424
+ --kds-color-success-light: #4CAF50;
425
+ --kds-color-success-dark: #1B5E20;
426
+ --kds-color-success-contrast: #FFFFFF;
427
+ --kds-color-warning-main: #EF6C00;
428
+ --kds-color-warning-light: #FF9800;
429
+ --kds-color-warning-dark: #E65100;
430
+ --kds-color-warning-contrast: #FFFFFF;
431
+ --kds-color-warning-warm: #8A6D1A;
432
+ --kds-color-error-main: #D32F2F;
433
+ --kds-color-error-light: #EF5350;
434
+ --kds-color-error-dark: #C62828;
435
+ --kds-color-error-contrast: #FFFFFF;
436
+ --kds-color-info-main: #0288D1;
437
+ --kds-color-info-light: #03A9F4;
438
+ --kds-color-info-dark: #01579B;
439
+ --kds-color-info-contrast: #FFFFFF;
440
+ --kds-color-info-blue: #5A5FE0;
441
+
442
+ /* Text colors */
443
+ --kds-color-text-primary: rgba(255, 255, 255, 1);
444
+ --kds-color-text-secondary: rgba(255, 255, 255, 0.70);
445
+ --kds-color-text-disabled: rgba(255, 255, 255, 0.38);
446
+ --kds-color-text-hint: rgba(255, 255, 255, 0.38);
447
+
448
+ /* Background colors */
449
+ --kds-color-background-default: #181818;
450
+ --kds-color-background-paper: #121212;
451
+ --kds-color-background-elevated: #2C2C2C;
452
+ --kds-color-background-muted: #1E1E1E;
453
+ --kds-color-background-brand-subtle: #1E1030;
454
+
455
+ /* Action colors */
456
+ --kds-color-action-active: rgba(255, 255, 255, 0.56);
457
+ --kds-color-action-hover: rgba(255, 255, 255, 0.08);
458
+ --kds-color-action-selected: rgba(255, 255, 255, 0.16);
459
+ --kds-color-action-disabled: rgba(255, 255, 255, 0.38);
460
+ --kds-color-action-disabled-bg: rgba(255, 255, 255, 0.12);
461
+ --kds-color-action-focus: rgba(255, 255, 255, 0.12);
462
+
463
+ /* Divider */
464
+ --kds-color-divider: rgba(255, 255, 255, 0.12);
465
+
466
+ /* Gray palette - Neutral colors */
467
+ --kds-color-gray-50: #F9FAFB;
468
+ --kds-color-gray-100: #F3F4F6;
469
+ --kds-color-gray-200: #E5E7EB;
470
+ --kds-color-gray-300: #D1D5DB;
471
+ --kds-color-gray-400: #9CA3AF;
472
+ --kds-color-gray-500: #6B7280;
473
+ --kds-color-gray-600: #4B5563;
474
+ --kds-color-gray-700: #374151;
475
+ --kds-color-gray-800: #1F2937;
476
+ --kds-color-gray-900: #111827;
477
+
478
+ /* Input borders */
479
+ --kds-color-input-enabled-border: rgba(255, 255, 255, 0.23);
480
+ --kds-color-input-hover-border: rgba(255, 255, 255, 1);
481
+
482
+ /* Snackbar backgrounds */
483
+ --kds-snackbar-success-bg: rgba(76, 175, 80, 0.16);
484
+ --kds-snackbar-warning-bg: rgba(255, 152, 0, 0.16);
485
+ --kds-snackbar-error-bg: rgba(239, 83, 80, 0.16);
486
+ --kds-snackbar-info-bg: rgba(3, 169, 244, 0.16);
487
+
488
+ /* Alert backgrounds */
489
+ --kds-alert-info-bg: rgba(2, 136, 209, 0.12);
490
+ --kds-alert-warning-bg: rgba(239, 108, 0, 0.12);
491
+ --kds-alert-success-bg: rgba(46, 125, 50, 0.12);
492
+ --kds-alert-error-bg: rgba(211, 47, 47, 0.12);
493
+ --kds-alert-success-text: #6AE079;
494
+ --kds-alert-warning-text: #FFB74D;
495
+ --kds-alert-error-text: #EF9A9A;
496
+ --kds-alert-info-text: #4FC3F7;
497
+ --kds-alert-success-border: #4CAF50;
498
+ --kds-alert-warning-border: #FF9800;
499
+ --kds-alert-error-border: #EF5350;
500
+ --kds-alert-info-border: #03A9F4;
501
+ }
502
+
387
503
  /* ============================================================================
388
504
  RESPONSIVE TOKENS (Mobile-First)
389
505
  ============================================================================ */
@@ -402,6 +518,7 @@
402
518
  /* Tablet (600px+) - Typography */
403
519
  @media (min-width: 600px) {
404
520
  :root {
521
+ --kds-font-size-2xs: 0.625rem;
405
522
 
406
523
  /* Base font-size scale */
407
524
  --kds-font-size-xs: 0.75rem;
@@ -439,6 +556,7 @@
439
556
  /* Desktop (840px+) - Typography */
440
557
  @media (min-width: 840px) {
441
558
  :root {
559
+ --kds-font-size-2xs: 0.625rem;
442
560
 
443
561
  /* Base font-size scale */
444
562
  --kds-font-size-xs: 0.75rem;
@@ -510,7 +628,8 @@
510
628
  /* Import core design tokens (auto-generated) */
511
629
  :root,
512
630
  body.light,
513
- body.dark {
631
+ body.dark,
632
+ [data-theme="dark"] {
514
633
  /* ========================================
515
634
  Map core tokens to BeerCSS-specific names
516
635
  (BeerCSS may use different naming conventions)
@@ -688,7 +807,8 @@ body.dark {
688
807
  --kds-color-danger-soft: var(--kds-alert-error-bg); /* #FEF2F2 */
689
808
 
690
809
  /* Bottom Sheet */
691
- --kds-bottom-sheet-max-width: 480px;
810
+ /* Mismo ancho que la card principal del flujo (stage narrow). */
811
+ --kds-bottom-sheet-max-width: var(--kds-stage-narrow-max-width);
692
812
  --kds-bottom-sheet-shadow: 0 -8px var(--kds-spacing-3-5) rgba(0, 0, 0, 0.18);
693
813
 
694
814
  /* Status Block */
@@ -707,26 +827,70 @@ body.dark {
707
827
  --kds-qr-avatar-radius: 10px; /* Avatar border radius */
708
828
  --kds-qr-badge-bg: var(--kds-color-primary-main); /* Badge background */
709
829
  --kds-qr-badge-text: #FFFFFF; /* Badge text color */
830
+
831
+ /* Highlighted Field */
832
+ --kds-field-highlight-bg: var(--kds-color-info-soft); /* Header band surface */
833
+ --kds-field-highlight-border: rgba(2, 136, 209, 0.5); /* Dashed accent border (info @ 50%) */
834
+ --kds-field-highlight-label: var(--kds-color-info-dark); /* Eyebrow label */
835
+ /* Doubles as the band's own padding, so its text lines up with the fields */
836
+ --kds-field-highlight-padding: var(--kds-spacing-2);
837
+ --kds-field-highlight-radius: var(--kds-radius-card);
838
+ }
839
+
840
+ /* ========================================
841
+ Dark mode overrides — extended payment-flow tokens
842
+ These were authored as light-only literals in the group above (subtle
843
+ surfaces, soft backgrounds, borders, hovers, shell). Give them dark-aware
844
+ values so selected states / rows / hovers adapt. Additive: the light
845
+ :root / body.light values above are unchanged. Tokens already defined as
846
+ var() refs (warning-soft, danger-soft) adapt on their own and are omitted.
847
+ body.dark is included on purpose: the light group above also matches
848
+ body.dark (specificity 0,1,1), so a bare [data-theme] override (0,1,0)
849
+ would lose on a body that carries the transitional dark class.
850
+ ======================================== */
851
+ body.dark,
852
+ [data-theme="dark"] {
853
+ --kds-color-primary-faint: #1E1030; /* dark brand-tinted subtle surface (selected rows/cards) */
854
+ --kds-color-info-soft: var(--kds-alert-info-bg); /* dark translucent blue */
855
+ --kds-color-success-soft: var(--kds-alert-success-bg); /* dark translucent green */
856
+ --kds-color-border-subtle: rgba(255, 255, 255, 0.08); /* subtle divider on dark */
857
+ --kds-color-border-default: rgba(255, 255, 255, 0.16); /* standard border on dark */
858
+ --kds-color-hover-bg: rgba(255, 255, 255, 0.04); /* subtle row hover on dark */
859
+ --kds-color-shell: var(--kds-color-background-default); /* neutral page background */
860
+
861
+ /* QR featured row — dark mirror of the light purple→blue gradient (the
862
+ light literals painted a light surface under adaptive white text). */
863
+ --kds-qr-bg-gradient: linear-gradient(135deg, #1E1030 0%, #101C2C 100%);
864
+ --kds-qr-border: rgba(227, 181, 255, 0.28); /* dark primary @ same alpha as light */
865
+ --kds-qr-focus-ring: rgba(227, 181, 255, 0.35);
866
+ --kds-qr-avatar-bg: var(--kds-color-background-elevated);
867
+ --kds-qr-avatar-border: rgba(227, 181, 255, 0.3);
868
+ --kds-qr-badge-text: var(--kds-color-primary-contrast); /* dark text on the lavender badge */
869
+
870
+ /* Highlighted field — info-soft still resolves to a near-white band on
871
+ dark, so mirror it as translucent info over the dark background. */
872
+ --kds-field-highlight-bg: rgba(2, 136, 209, 0.12);
873
+ --kds-field-highlight-border: rgba(125, 211, 252, 0.45);
874
+ --kds-field-highlight-label: #7DD3FC; /* light info, readable on dark */
710
875
  }
711
876
 
712
877
  /* ========================================
713
- Force Light Mode Only
878
+ Color Scheme (explicit opt-in to dark)
714
879
  ======================================== */
715
880
 
716
- /* Force light mode - disable dark mode */
881
+ /* Default to light regardless of OS preference. Because we use `light` (not
882
+ `light dark`), the system dark-mode preference never auto-applies — dark is
883
+ reached only by an explicit [data-theme="dark"] / body.dark opt-in. */
717
884
  :root,
718
885
  html,
719
886
  body {
720
- color-scheme: light only;
887
+ color-scheme: light;
721
888
  }
722
889
 
723
- /* Override system dark mode preference */
724
- @media (prefers-color-scheme: dark) {
725
- :root,
726
- html,
727
- body {
728
- color-scheme: light only;
729
- }
890
+ /* Explicit dark theme: let native UI (form controls, scrollbars) render dark. */
891
+ [data-theme="dark"],
892
+ body.dark {
893
+ color-scheme: dark;
730
894
  }
731
895
 
732
896
  /* ========================================
@@ -838,7 +1002,13 @@ a.kds-btn {
838
1002
 
839
1003
  /* Spacing - Using design tokens */
840
1004
  padding: var(--kds-spacing-button-padding); /* 0 16px */
841
- height: var(--kds-spacing-button-min-height); /* 44px */
1005
+ /* Respiro vertical solo relevante con label multilinea; en una linea manda min-height. */
1006
+ padding-block: var(--kds-spacing-1);
1007
+ /* height:auto + min-height (no height fija): si el label envuelve en pantallas
1008
+ angostas el botón crece en vez de recortar el texto; min-height ademas impide
1009
+ que flex-shrink lo colapse como flex-item en contenedores flex-column. */
1010
+ height: auto;
1011
+ min-height: var(--kds-spacing-button-min-height); /* 44px */
842
1012
 
843
1013
  /* Border - Using design token */
844
1014
  border-radius: var(--kds-radius-button); /* 10px */
@@ -846,11 +1016,25 @@ a.kds-btn {
846
1016
 
847
1017
  /* Interaction */
848
1018
  cursor: pointer;
849
- transition: background .15s, box-shadow .15s, transform .05s;
1019
+ transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard),
1020
+ color var(--kds-transition-shorter) var(--kds-easing-standard),
1021
+ box-shadow var(--kds-transition-shorter) var(--kds-easing-standard),
1022
+ transform var(--kds-transition-shortest) var(--kds-easing-standard);
850
1023
  box-sizing: border-box;
851
1024
  vertical-align: middle;
852
1025
  }
853
1026
 
1027
+ /* Sin anillo de focus en botones: decision de diseno (KTUF-210) — el estado de
1028
+ focus/active se comunica solo con el cambio de fondo de cada variante. */
1029
+ button.kds-btn:focus,
1030
+ button.kds-btn:focus-visible,
1031
+ a.kds-btn:focus,
1032
+ a.kds-btn:focus-visible,
1033
+ button.kds-fab:focus,
1034
+ button.kds-fab:focus-visible {
1035
+ outline: none;
1036
+ }
1037
+
854
1038
  /* Active state - add subtle press effect */
855
1039
  button.kds-btn:active:not(:disabled),
856
1040
  a.kds-btn:active:not(:disabled) {
@@ -872,7 +1056,7 @@ a.kds-btn:disabled {
872
1056
  button.kds-btn-primary,
873
1057
  a.kds-btn-primary {
874
1058
  background: var(--kds-color-primary-main); /* #8347AD */
875
- color: white;
1059
+ color: var(--kds-color-primary-contrast); /* #FFF light / dark-purple on dark (lavender bg) */
876
1060
  border: none;
877
1061
  box-shadow: 0 1px 2px rgba(131, 71, 173, .25);
878
1062
  }
@@ -889,8 +1073,18 @@ button.kds-btn-primary:focus-visible:not(:disabled),
889
1073
  a.kds-btn-primary:active:not(:disabled),
890
1074
  a.kds-btn-primary:focus-visible:not(:disabled) {
891
1075
  background: var(--kds-color-primary-dark);
892
- outline: 2px solid var(--kds-color-primary-main);
893
- outline-offset: 2px;
1076
+ }
1077
+
1078
+ /* Dark mode: the button is a light lavender with dark text, so hover/active must
1079
+ LIGHTEN (not darken) — else primary-dark bg + dark contrast text = invisible.
1080
+ Additive override; the light-mode rules above stay unchanged. */
1081
+ [data-theme="dark"] button.kds-btn-primary:hover:not(:disabled),
1082
+ [data-theme="dark"] a.kds-btn-primary:hover:not(:disabled),
1083
+ [data-theme="dark"] button.kds-btn-primary:active:not(:disabled),
1084
+ [data-theme="dark"] button.kds-btn-primary:focus-visible:not(:disabled),
1085
+ [data-theme="dark"] a.kds-btn-primary:active:not(:disabled),
1086
+ [data-theme="dark"] a.kds-btn-primary:focus-visible:not(:disabled) {
1087
+ background: var(--kds-color-primary-light);
894
1088
  }
895
1089
 
896
1090
  /* Override disabled para primary */
@@ -965,20 +1159,25 @@ a.kds-btn-outlined-white:hover:not(:disabled) {
965
1159
  opacity: 0.9;
966
1160
  }
967
1161
 
968
- /* Text button */
1162
+ /* Text button — mismo tamaño que el resto de variantes (hereda min-height/padding
1163
+ del base): solo cambia la superficie, no la caja. */
969
1164
  button.kds-btn-text,
970
1165
  a.kds-btn-text {
971
1166
  background: transparent;
972
1167
  color: var(--kds-color-primary-main);
973
1168
  border: none;
974
- padding: 6px var(--kds-spacing-2); /* Menor padding para text variant */
975
- min-height: 32px; /* Menor altura para text variant */
976
1169
  box-shadow: none;
977
1170
  }
978
1171
 
979
1172
  button.kds-btn-text:hover:not(:disabled),
980
1173
  a.kds-btn-text:hover:not(:disabled) {
981
- background: var(--kds-color-primary-hover); /* rgba(131, 71, 173, 0.04) */
1174
+ color: var(--kds-color-primary-dark);
1175
+ }
1176
+
1177
+ /* Dark: hover must lighten — primary-dark text is near-invisible on dark bg. */
1178
+ [data-theme="dark"] button.kds-btn-text:hover:not(:disabled),
1179
+ [data-theme="dark"] a.kds-btn-text:hover:not(:disabled) {
1180
+ color: var(--kds-color-primary-light);
982
1181
  }
983
1182
 
984
1183
  button.kds-btn-text:disabled,
@@ -988,9 +1187,38 @@ a.kds-btn-text:disabled {
988
1187
  box-shadow: none;
989
1188
  }
990
1189
 
1190
+ /* Error text (destructive, ghost) — red text, no fill/border. Para acciones
1191
+ destructivas secundarias que no deben competir con el CTA primario. */
1192
+ button.kds-btn-error-text,
1193
+ a.kds-btn-error-text {
1194
+ background: transparent;
1195
+ color: var(--kds-color-error-main);
1196
+ border: none;
1197
+ box-shadow: none;
1198
+ }
1199
+
1200
+ button.kds-btn-error-text:hover:not(:disabled),
1201
+ a.kds-btn-error-text:hover:not(:disabled) {
1202
+ color: var(--kds-color-error-dark);
1203
+ }
1204
+
1205
+ button.kds-btn-error-text:disabled,
1206
+ a.kds-btn-error-text:disabled {
1207
+ background: transparent;
1208
+ color: var(--kds-color-action-disabled);
1209
+ box-shadow: none;
1210
+ }
1211
+
1212
+ /* Label: al envolver en pantallas angostas las lineas quedan parejas y el icono
1213
+ (inline, dentro del label) fluye con el texto en vez de anclarse al borde. */
1214
+ button.kds-btn .kds-btn-label,
1215
+ a.kds-btn .kds-btn-label {
1216
+ text-wrap: balance;
1217
+ }
1218
+
991
1219
  /* Icon wrapper - control size via span container */
992
- button.kds-btn > .kds-icon,
993
- a.kds-btn > .kds-icon {
1220
+ button.kds-btn .kds-icon,
1221
+ a.kds-btn .kds-icon {
994
1222
  min-width: var(--kds-spacing-button-icon-size);
995
1223
  min-height: var(--kds-spacing-button-icon-size);
996
1224
  width: var(--kds-spacing-button-icon-size);
@@ -1001,10 +1229,22 @@ a.kds-btn > .kds-icon {
1001
1229
  display: inline-flex;
1002
1230
  align-items: center;
1003
1231
  justify-content: center;
1232
+ vertical-align: middle;
1233
+ }
1234
+
1235
+ /* El gap del boton no aplica al icono inline: el respiro icono-texto sale del margen. */
1236
+ button.kds-btn .kds-icon-start,
1237
+ a.kds-btn .kds-icon-start {
1238
+ margin-inline-end: var(--kds-spacing-1);
1239
+ }
1240
+
1241
+ button.kds-btn .kds-icon-end,
1242
+ a.kds-btn .kds-icon-end {
1243
+ margin-inline-start: var(--kds-spacing-1);
1004
1244
  }
1005
1245
 
1006
- button.kds-btn > .kds-icon > i,
1007
- a.kds-btn > .kds-icon > i {
1246
+ button.kds-btn .kds-icon > i,
1247
+ a.kds-btn .kds-icon > i {
1008
1248
  font-size: var(--kds-spacing-button-icon-size);
1009
1249
  min-width: var(--kds-spacing-button-icon-size);
1010
1250
  min-height: var(--kds-spacing-button-icon-size);
@@ -1073,63 +1313,90 @@ a.kds-btn.kds-btn-md {
1073
1313
  }
1074
1314
  }
1075
1315
 
1076
- /* Selection card */
1316
+ /* Selection card.
1317
+ IMPORTANTE: este componente se renderiza como `<button>`. BeerCSS aplica al
1318
+ `button` base: `display: inline-flex; align-items: center; justify-content: center;
1319
+ block-size: 2.5rem; padding: 0 1rem; background: var(--primary); color: on-primary`.
1320
+ Todas esas reglas hay que sobreescribirlas para que el card-selector funcione como
1321
+ un contenedor flex column de altura variable y alineado a la izquierda.
1322
+
1323
+ Convención del DS: spacing entre hijos via `gap` del flex padre + padding.
1324
+ Los elementos internos (.kds-card-selector-icon/-title/-description) NO usan margin. */
1077
1325
  .kds-card-selector {
1326
+ /* Reset BeerCSS button */
1327
+ display: flex;
1328
+ flex-direction: column;
1329
+ align-items: stretch;
1330
+ justify-content: flex-start;
1331
+ block-size: auto;
1332
+ inline-size: 100%;
1333
+ text-align: left;
1334
+ line-height: 1.5;
1335
+ color: var(--kds-color-text-primary);
1336
+ /* Estilos propios del card-selector */
1078
1337
  padding: var(--kds-spacing-3);
1338
+ gap: var(--kds-spacing-1-5);
1079
1339
  border-radius: var(--kds-radius-md);
1080
- border: 2px solid var(--kds-border-light);
1340
+ border: var(--kds-border-width-md) solid var(--kds-border-light);
1081
1341
  background: var(--kds-color-background-paper);
1082
1342
  transition: all 0.3s ease;
1083
- text-align: left;
1084
1343
  cursor: pointer;
1085
- display: flex;
1086
- flex-direction: column;
1087
1344
  }
1088
1345
 
1089
- .kds-card-selector:hover {
1090
- border-color: #D1D5DB; /* gray-300 */
1346
+ .kds-card-selector:hover:not(.selected) {
1347
+ border-color: var(--kds-color-primary-light);
1348
+ background: var(--kds-color-primary-hover);
1349
+ }
1350
+
1351
+ /* Override del ripple/overlay default de BeerCSS:
1352
+ `:is(.wave,.chip,.button,button,nav.tabbed>a,...):not([class*=ripple])::after`
1353
+ tiene specificity (0,2,4) según DevTools (Chrome cuenta cada selector dentro
1354
+ de :is() individualmente para algunos motores). Usamos !important — consistente
1355
+ con cómo se overridean otros estilos de BeerCSS en este archivo (67 usos previos).
1356
+ Antes pintaba negro porque `currentColor` resolvía a text-primary del card. */
1357
+ .kds-card-selector::after {
1358
+ background-image: radial-gradient(circle, var(--kds-color-primary-main) 1%, transparent 1%) !important;
1091
1359
  }
1092
1360
 
1093
1361
  .kds-card-selector.selected {
1094
- border-color: #3B82F6; /* blue-600 */
1095
- background: #EFF6FF; /* blue-50 */
1362
+ border-color: var(--kds-color-primary-main);
1363
+ background: var(--kds-color-primary-faint);
1096
1364
  box-shadow: var(--kds-shadow-md);
1097
1365
  }
1098
1366
 
1099
- /* Icon container */
1367
+ /* Icon container — spacing manejado por gap del padre, no margin */
1100
1368
  .kds-card-selector-icon {
1101
- width: 48px;
1102
- height: 48px;
1103
- background: #DBEAFE; /* blue-100 */
1104
- border-radius: 8px;
1369
+ width: var(--kds-spacing-6);
1370
+ height: var(--kds-spacing-6);
1371
+ background: var(--kds-color-primary-focus);
1372
+ border-radius: var(--kds-radius-sm);
1105
1373
  display: flex;
1106
1374
  align-items: center;
1107
1375
  justify-content: center;
1108
- margin-bottom: 16px;
1109
1376
  }
1110
1377
 
1111
1378
  .kds-card-selector-icon i,
1112
1379
  .kds-card-selector-icon svg {
1113
- width: 24px;
1114
- height: 24px;
1115
- min-width: 24px;
1116
- min-height: 24px;
1117
- color: #3B82F6; /* blue-600 */
1380
+ width: var(--kds-spacing-3);
1381
+ height: var(--kds-spacing-3);
1382
+ min-width: var(--kds-spacing-3);
1383
+ min-height: var(--kds-spacing-3);
1384
+ font-size: var(--kds-spacing-3);
1385
+ color: var(--kds-color-primary-main);
1118
1386
  }
1119
1387
 
1120
- /* Title */
1388
+ /* Title — spacing manejado por gap del padre, no margin */
1121
1389
  .kds-card-selector-title {
1122
- font-weight: 600;
1390
+ font-weight: var(--kds-font-weight-semibold);
1123
1391
  color: var(--kds-color-text-primary);
1124
- margin-bottom: 8px;
1125
- font-size: 16px;
1392
+ font-size: var(--kds-font-size-lg);
1126
1393
  }
1127
1394
 
1128
1395
  /* Description */
1129
1396
  .kds-card-selector-description {
1130
- font-size: 14px;
1131
- color: #4B5563; /* gray-600 */
1132
- line-height: 1.5;
1397
+ font-size: var(--kds-font-size-sm);
1398
+ color: var(--kds-color-text-secondary);
1399
+ line-height: var(--kds-line-height-normal);
1133
1400
  }
1134
1401
 
1135
1402
  /* Selected state - visual feedback via border only */
@@ -1141,14 +1408,22 @@ a.kds-btn.kds-btn-md {
1141
1408
  display: flex;
1142
1409
  flex-direction: column;
1143
1410
  gap: var(--kds-spacing-2);
1144
- padding: var(--kds-spacing-4);
1411
+ padding: var(--kds-spacing-2);
1145
1412
  border-radius: var(--kds-radius-lg);
1146
1413
  border: 2px solid var(--kds-border-medium);
1147
- max-width: 400px; /* Increased from 365px for better text spacing */
1414
+ /* Ancho mínimo aplicado a TODOS los planes — así un plan sin badge en una
1415
+ grilla con un plan recomendado mantiene la misma anchura, y el badge nunca
1416
+ se superpone al título por estrechez del card. */
1417
+ min-width: 260px;
1418
+ max-width: 400px;
1148
1419
  background: var(--kds-surface-base);
1149
1420
  transition: all 0.3s ease;
1150
1421
  cursor: pointer;
1151
- height: 100%; /* Ensure cards fill grid height */
1422
+ /* Alto fijo: el card se estira al alto de su row del grid (align-items stretch
1423
+ es el default) — todas las cards de la misma fila quedan a la misma altura
1424
+ sin importar el contenido. `align-self: stretch` lo hace explícito. */
1425
+ height: 100%;
1426
+ align-self: stretch;
1152
1427
  }
1153
1428
 
1154
1429
  .kds-card-plan:hover {
@@ -1168,18 +1443,19 @@ a.kds-btn.kds-btn-md {
1168
1443
  box-shadow: var(--kds-shadow-elevation-4);
1169
1444
  }
1170
1445
 
1171
- /* Recommended Badge */
1446
+ /* Recommended Badge — inline dentro del card (no flotante).
1447
+ Es el primer hijo del .kds-card-plan, así que aparece arriba de todo
1448
+ el contenido, alineado a la izquierda. */
1172
1449
  .kds-card-plan-badge {
1173
- position: absolute;
1174
- top: -12px;
1175
- right: var(--kds-spacing-6);
1176
- padding: var(--kds-spacing-1) var(--kds-spacing-4);
1450
+ align-self: flex-start;
1451
+ padding: var(--kds-spacing-0-5) var(--kds-spacing-1-5);
1177
1452
  background: var(--primary);
1178
- color: white;
1179
- font-size: var(--kds-font-size-sm);
1453
+ color: var(--kds-color-primary-contrast); /* contrast adapts: #FFF light / dark on dark */
1454
+ font-size: var(--kds-font-size-xs);
1180
1455
  font-weight: var(--kds-font-weight-semibold);
1456
+ line-height: 1;
1181
1457
  border-radius: var(--kds-radius-full);
1182
- box-shadow: var(--kds-shadow-elevation-1);
1458
+ white-space: nowrap;
1183
1459
  }
1184
1460
 
1185
1461
  /* Plan Header */
@@ -1207,13 +1483,11 @@ a.kds-btn.kds-btn-md {
1207
1483
  display: flex;
1208
1484
  align-items: baseline;
1209
1485
  gap: var(--kds-spacing-2);
1210
- padding: var(--kds-spacing-4) 0;
1211
1486
  border-bottom: 1px solid var(--kds-border-light);
1212
- min-height: 88px; /* Standardize price area height */
1213
1487
  }
1214
1488
 
1215
1489
  .kds-price {
1216
- font-size: 42px;
1490
+ font-size: var(--kds-font-size-4xl);
1217
1491
  font-weight: var(--kds-font-weight-bold);
1218
1492
  color: var(--primary);
1219
1493
  line-height: 1.1;
@@ -1440,6 +1714,10 @@ a.kds-btn.kds-btn-md {
1440
1714
  flex-wrap: wrap;
1441
1715
  }
1442
1716
 
1717
+ .kds-grow {
1718
+ flex-grow: 1;
1719
+ }
1720
+
1443
1721
  .kds-justify-start {
1444
1722
  justify-content: flex-start;
1445
1723
  }
@@ -1468,7 +1746,63 @@ a.kds-btn.kds-btn-md {
1468
1746
  align-items: flex-end;
1469
1747
  }
1470
1748
 
1749
+ .kds-self-center {
1750
+ align-self: center;
1751
+ }
1752
+
1753
+ /* Botón "pelado": neutraliza el chrome de button de BeerCSS (pill 2.5rem,
1754
+ radius, fondo y hover) para botones de terceros con su propio look,
1755
+ p.ej. los share buttons de react-share (ícono circular). */
1756
+ .kds-btn-bare,
1757
+ .kds-btn-bare:hover,
1758
+ .kds-btn-bare:focus,
1759
+ .kds-btn-bare:active {
1760
+ background: none !important;
1761
+ block-size: auto !important;
1762
+ inline-size: auto !important;
1763
+ min-inline-size: 0 !important;
1764
+ padding: 0 !important;
1765
+ margin: 0 !important;
1766
+ border: 0 !important;
1767
+ border-radius: var(--kds-radius-full) !important;
1768
+ box-sizing: border-box !important;
1769
+ box-shadow: none !important;
1770
+ transform: none !important;
1771
+ }
1772
+
1773
+ .kds-btn-bare::before,
1774
+ .kds-btn-bare::after {
1775
+ display: none !important;
1776
+ }
1777
+
1778
+ /* BeerCSS también encoge los íconos hijos de button a 1.5rem (min/max);
1779
+ un botón pelado respeta el tamaño propio del ícono. */
1780
+ .kds-btn-bare > :is(img, svg) {
1781
+ max-block-size: none !important;
1782
+ max-inline-size: none !important;
1783
+ min-block-size: 0 !important;
1784
+ min-inline-size: 0 !important;
1785
+ }
1786
+
1787
+ /* Versión de la app anclada al fondo del card body (flex column): margin-top
1788
+ auto absorbe el espacio libre; el padding garantiza respiro mínimo cuando el
1789
+ contenido llena la card. */
1790
+ .kds-card-version {
1791
+ margin-top: auto;
1792
+ padding-top: var(--kds-spacing-2);
1793
+ text-align: center;
1794
+ }
1795
+
1796
+ /* Separador vertical (entre chips/logos hermanos en una fila). */
1797
+ .kds-vr {
1798
+ width: 1px;
1799
+ height: var(--kds-spacing-3);
1800
+ background: var(--kds-color-divider);
1801
+ flex: 0 0 auto;
1802
+ }
1803
+
1471
1804
  /* Gap utilities */
1805
+ .kds-gap-0-25 { gap: var(--kds-spacing-0-25); }
1472
1806
  .kds-gap-1 { gap: var(--kds-spacing-1); }
1473
1807
  .kds-gap-2 { gap: var(--kds-spacing-2); }
1474
1808
  .kds-gap-3 { gap: var(--kds-spacing-3); }
@@ -1504,6 +1838,7 @@ a.kds-btn.kds-btn-md {
1504
1838
  /* Spacing utilities - Margin */
1505
1839
  .kds-m-0 { margin: 0; }
1506
1840
  .kds-m-2 { margin: var(--kds-spacing-2); }
1841
+ .kds-m-2-5 { margin: var(--kds-spacing-2-5); }
1507
1842
  .kds-m-4 { margin: var(--kds-spacing-4); }
1508
1843
  .kds-m-6 { margin: var(--kds-spacing-6); }
1509
1844
  .kds-m-8 { margin: var(--kds-spacing-8); }
@@ -1517,6 +1852,7 @@ a.kds-btn.kds-btn-md {
1517
1852
  .kds-mt-8 { margin-top: var(--kds-spacing-8); }
1518
1853
 
1519
1854
  .kds-mb-0 { margin-bottom: 0; }
1855
+ .kds-mb-0-5 { margin-bottom: var(--kds-spacing-0-5); }
1520
1856
  .kds-mb-1 { margin-bottom: var(--kds-spacing-1); }
1521
1857
  .kds-mb-2 { margin-bottom: var(--kds-spacing-2); }
1522
1858
  .kds-mb-3 { margin-bottom: var(--kds-spacing-3); }
@@ -1753,33 +2089,35 @@ a.kds-btn.kds-btn-md {
1753
2089
  opacity: 1 !important;
1754
2090
  }
1755
2091
 
1756
- /* Snackbar semantic variants
1757
- All use white text (--kds-color-primary-contrast) on solid semantic backgrounds */
2092
+ /* Snackbar semantic variants — white text on solid semantic backgrounds.
2093
+ Use each semantic's own *-contrast token (always #FFFFFF, both modes) rather
2094
+ than --kds-color-primary-contrast, which flips to dark purple in dark mode
2095
+ and made the text illegible on the colored surface. */
1758
2096
  .snackbar.error {
1759
2097
  background-color: var(--kds-color-error-main) !important;
1760
- color: var(--kds-color-primary-contrast) !important;
2098
+ color: var(--kds-color-error-contrast) !important;
1761
2099
  }
1762
2100
 
1763
2101
  .snackbar.error i {
1764
- color: var(--kds-color-primary-contrast) !important;
2102
+ color: var(--kds-color-error-contrast) !important;
1765
2103
  }
1766
2104
 
1767
2105
  .snackbar.info {
1768
2106
  background-color: var(--kds-color-info-main) !important;
1769
- color: var(--kds-color-primary-contrast) !important;
2107
+ color: var(--kds-color-info-contrast) !important;
1770
2108
  }
1771
2109
 
1772
2110
  .snackbar.info i {
1773
- color: var(--kds-color-primary-contrast) !important;
2111
+ color: var(--kds-color-info-contrast) !important;
1774
2112
  }
1775
2113
 
1776
2114
  .snackbar.success {
1777
2115
  background-color: var(--kds-color-success-main) !important;
1778
- color: var(--kds-color-primary-contrast) !important;
2116
+ color: var(--kds-color-success-contrast) !important;
1779
2117
  }
1780
2118
 
1781
2119
  .snackbar.success i {
1782
- color: var(--kds-color-primary-contrast) !important;
2120
+ color: var(--kds-color-success-contrast) !important;
1783
2121
  }
1784
2122
 
1785
2123
  /* Snackbar progress bar — animated timer for auto-dismiss */
@@ -2030,92 +2368,340 @@ a.kds-btn-google:disabled {
2030
2368
  }
2031
2369
 
2032
2370
  /* ========================================
2033
- Link Styles
2371
+ KDS LINEAR PROGRESS
2372
+ Native <progress> (KdsLinearProgress). Additive over BeerCSS `progress`,
2373
+ scoped to .kds-progress so other consumers are unaffected.
2034
2374
  ======================================== */
2035
2375
 
2036
- /* Explicit link class */
2037
- .kds-link {
2038
- color: var(--kds-color-primary-main);
2039
- text-decoration: none;
2040
- cursor: pointer;
2041
- transition: color var(--kds-transition-shorter) var(--kds-easing-standard);
2042
- }
2043
-
2044
- .kds-link:hover {
2045
- color: var(--kds-color-primary-dark);
2046
- text-decoration: underline;
2376
+ /* `progress` is inline-block by default → leaves a baseline (descender) gap
2377
+ below the bar. Block removes that gap so it sits flush with siblings. */
2378
+ .kds-progress {
2379
+ display: block;
2047
2380
  }
2048
2381
 
2049
- /* Contextual links inside cards and stage forms */
2050
- .kds-card-body a:not(.kds-btn):not([class*="kds-btn"]),
2051
- .kds-stage-content a:not(.kds-btn):not([class*="kds-btn"]) {
2052
- color: var(--kds-color-primary-main);
2053
- text-decoration: none;
2054
- transition: color var(--kds-transition-shorter) var(--kds-easing-standard);
2382
+ /* Animate the filled value when it changes (e.g. advancing a step). BeerCSS
2383
+ sets the value background but no transition, so the width jumps abruptly. */
2384
+ .kds-progress::-webkit-progress-value {
2385
+ transition: width var(--kds-transition-standard) var(--kds-easing-standard);
2055
2386
  }
2056
2387
 
2057
- .kds-card-body a:not(.kds-btn):not([class*="kds-btn"]):hover,
2058
- .kds-stage-content a:not(.kds-btn):not([class*="kds-btn"]):hover {
2059
- color: var(--kds-color-primary-dark);
2060
- text-decoration: underline;
2388
+ .kds-progress::-moz-progress-bar {
2389
+ transition: width var(--kds-transition-standard) var(--kds-easing-standard);
2061
2390
  }
2062
2391
 
2063
2392
  /* ========================================
2064
- Flex Layout System (Body + Container + Sidebar)
2393
+ KDS SECURE LOADER
2394
+ Loader de espera: anillo circular + candado centrado + frases opcionales.
2395
+ El anillo reutiliza el spinner circular de BeerCSS, escalado.
2065
2396
  ======================================== */
2066
2397
 
2067
- /* Body flex-column layout */
2068
- body.kds-layout {
2398
+ .kds-secure-loader {
2069
2399
  display: flex;
2070
2400
  flex-direction: column;
2071
- min-height: 100vh;
2072
- margin: 0;
2401
+ align-items: center;
2402
+ justify-content: center;
2403
+ gap: var(--kds-spacing-4);
2404
+ text-align: center;
2405
+ /* Llena y centra dentro de contenedores flex (pantalla de carga); en flujo
2406
+ normal (contenedor no-flex) se reduce a su contenido. */
2407
+ flex: 1 1 auto;
2073
2408
  }
2074
2409
 
2075
- /* Layout container (flex-row) - below header */
2076
- .kds-layout-container {
2410
+ .kds-secure-loader-text {
2077
2411
  display: flex;
2078
- flex-direction: row;
2079
- flex: 1;
2080
- overflow: hidden;
2412
+ flex-direction: column;
2413
+ gap: var(--kds-spacing-0-25);
2081
2414
  }
2082
- /* ========================================
2083
- Footer Customization
2084
- ======================================== */
2085
2415
 
2086
- footer.primary {
2087
- background: var(--primary);
2088
- padding: var(--kds-spacing-4) var(--kds-spacing-3);
2089
- color: var(--on-primary);
2416
+ .kds-secure-loader-title {
2417
+ margin: 0;
2418
+ font-family: var(--kds-font-family-primary);
2419
+ font-size: var(--kds-font-size-h6);
2420
+ font-weight: var(--kds-font-weight-semibold);
2421
+ line-height: var(--kds-line-height-snug);
2422
+ color: var(--kds-color-text-primary);
2090
2423
  }
2091
2424
 
2092
- footer.primary h6 {
2093
- color: var(--on-primary);
2094
- font-weight: var(--kds-font-weight-semibold);
2095
- margin-bottom: var(--kds-spacing-2);
2425
+ .kds-secure-loader-message {
2426
+ margin: 0;
2427
+ /* !important: anula el auto-espaciado de hermanos de BeerCSS (0,5,1);
2428
+ la separación con el título la da el gap del contenedor (spacing-0-25). */
2429
+ margin-top: 0 !important;
2430
+ font-family: var(--kds-font-family-secondary);
2431
+ font-size: var(--kds-font-size-body1);
2432
+ line-height: var(--kds-line-height-normal);
2433
+ color: var(--kds-color-primary-main);
2096
2434
  }
2097
2435
 
2098
- footer.primary a {
2099
- color: var(--on-primary);
2100
- text-decoration: none;
2101
- display: block;
2102
- padding: var(--kds-spacing-0-5) 0;
2103
- transition: opacity var(--kds-transition-shorter) var(--kds-easing-standard);
2104
- text-align: center;
2436
+ /* Caja del spinner con tamaño fijo: la animación no altera el layout.
2437
+ 6.25rem (100px) = tamaño del loader original (CircularProgress size=100). */
2438
+ .kds-secure-loader-spinner {
2439
+ position: relative;
2440
+ display: inline-grid;
2441
+ place-items: center;
2442
+ inline-size: var(--kds-secure-loader-size, 6.25rem);
2443
+ block-size: var(--kds-secure-loader-size, 6.25rem);
2105
2444
  }
2106
2445
 
2107
- footer.primary a:hover {
2108
- opacity: 0.8;
2446
+ /* Anillo: SVG nativo con arco vía stroke-dasharray. Replica el CircularProgress
2447
+ original (viewBox 44u, thickness 2, arco ~63%, disableShrink). El giro se anima
2448
+ con stroke-dashoffset (el círculo queda estático y nítido); rotar el SVG con
2449
+ transform rasteriza el anillo y se ve irregular durante el giro. */
2450
+ .kds-secure-loader-ring {
2451
+ inline-size: var(--kds-secure-loader-size, 6.25rem);
2452
+ block-size: var(--kds-secure-loader-size, 6.25rem);
2109
2453
  }
2110
2454
 
2111
- /* ========================================
2112
- Form Inputs (Material Design 3)
2113
- ======================================== */
2455
+ .kds-secure-loader-ring circle {
2456
+ fill: none;
2457
+ stroke: var(--kds-color-primary-main);
2458
+ stroke-width: 2;
2459
+ stroke-linecap: round;
2460
+ /* circunferencia = 2π·20.2 ≈ 126.92; arco visible 80 (~63%) + hueco 46.92 */
2461
+ stroke-dasharray: 80 46.92;
2462
+ animation: kds-secure-loader-dash 1.2s linear infinite;
2463
+ }
2114
2464
 
2115
- /* Form labels */
2116
- .field label,
2117
- .kds-form-label {
2118
- font-size: 14px;
2465
+ @keyframes kds-secure-loader-dash {
2466
+ to {
2467
+ stroke-dashoffset: -126.92;
2468
+ }
2469
+ }
2470
+
2471
+ /* Candado centrado sobre el anillo (~0.3 del diámetro). Centrado explícito
2472
+ (top/left 50% + translate) para que no dependa del grid ni se recorte. */
2473
+ .kds-secure-loader-lock {
2474
+ position: absolute;
2475
+ top: 50%;
2476
+ left: 50%;
2477
+ transform: translate(-50%, -50%);
2478
+ color: var(--kds-color-text-secondary);
2479
+ font-size: calc(var(--kds-secure-loader-size, 6.25rem) * 0.3);
2480
+ line-height: 1;
2481
+ pointer-events: none;
2482
+ }
2483
+
2484
+ /* ========================================
2485
+ KDS COPY BUTTON
2486
+ Chip compacto que muestra un valor + icono copy y lo copia al click.
2487
+ Acción inline (distinto de KdsCopyRow). Look del copy button de khenshin.
2488
+ ======================================== */
2489
+
2490
+ .kds-copy-button {
2491
+ display: inline-flex;
2492
+ align-items: center;
2493
+ gap: var(--kds-spacing-1);
2494
+ padding: var(--kds-spacing-0-25) var(--kds-spacing-1-5);
2495
+ /* No usar el alto de botón táctil de BeerCSS (~44px): es un chip compacto,
2496
+ su alto lo define el contenido + padding. */
2497
+ block-size: auto;
2498
+ min-block-size: 0;
2499
+ border: none;
2500
+ border-radius: var(--kds-radius-button);
2501
+ background: var(--kds-alert-info-bg);
2502
+ color: var(--kds-color-info-dark);
2503
+ font-family: var(--kds-font-family-secondary);
2504
+ font-size: var(--kds-font-size-sm);
2505
+ font-weight: var(--kds-font-weight-medium);
2506
+ line-height: var(--kds-line-height-normal);
2507
+ cursor: pointer;
2508
+ transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard),
2509
+ color var(--kds-transition-shorter) var(--kds-easing-standard);
2510
+ }
2511
+
2512
+ /* active = hover: sin el aro de focus/active (outline morado de BeerCSS). */
2513
+ .kds-copy-button:focus,
2514
+ .kds-copy-button:focus-visible,
2515
+ .kds-copy-button:active {
2516
+ outline: none;
2517
+ }
2518
+
2519
+ /* value y copiedText se apilan en la MISMA celda de grid: la celda toma el
2520
+ ancho del texto más largo, por lo que el botón conserva su ancho al alternar
2521
+ entre "valor" y "copiado" (sin reflow). */
2522
+ .kds-copy-button-label {
2523
+ display: inline-grid;
2524
+ }
2525
+
2526
+ .kds-copy-button-value,
2527
+ .kds-copy-button-copied {
2528
+ grid-area: 1 / 1;
2529
+ white-space: nowrap;
2530
+ }
2531
+
2532
+ /* Estado por defecto: visible el valor, oculto (pero ocupando espacio) el copiado */
2533
+ .kds-copy-button-copied {
2534
+ visibility: hidden;
2535
+ }
2536
+
2537
+ /* Al copiar se invierte la visibilidad; el ancho no cambia */
2538
+ .kds-copy-button.copied .kds-copy-button-value {
2539
+ visibility: hidden;
2540
+ }
2541
+
2542
+ .kds-copy-button.copied .kds-copy-button-copied {
2543
+ visibility: visible;
2544
+ }
2545
+
2546
+ .kds-copy-button .material-symbols-outlined {
2547
+ font-size: 1rem;
2548
+ color: var(--kds-color-info-main);
2549
+ flex-shrink: 0;
2550
+ }
2551
+
2552
+ /* Dark mode: info-dark text is near-invisible on the dark translucent chip.
2553
+ Use the alert info text token (light blue in dark), same pattern as KdsAlert;
2554
+ the copied state already uses alert-success-text and adapts on its own. */
2555
+ [data-theme="dark"] .kds-copy-button {
2556
+ color: var(--kds-alert-info-text);
2557
+ }
2558
+
2559
+ [data-theme="dark"] .kds-copy-button .material-symbols-outlined {
2560
+ color: var(--kds-alert-info-text);
2561
+ }
2562
+
2563
+ .kds-copy-button.copied {
2564
+ background: var(--kds-alert-success-bg);
2565
+ color: var(--kds-alert-success-text);
2566
+ animation: kds-copy-button-pulse var(--kds-transition-short) var(--kds-easing-standard);
2567
+ }
2568
+
2569
+ .kds-copy-button.copied .material-symbols-outlined {
2570
+ color: var(--kds-color-success-main);
2571
+ /* el check entra con un pop al copiar */
2572
+ animation: kds-copy-button-pop var(--kds-transition-short) var(--kds-easing-standard);
2573
+ }
2574
+
2575
+ @keyframes kds-copy-button-pulse {
2576
+ 0% {
2577
+ transform: scale(1);
2578
+ }
2579
+ 50% {
2580
+ transform: scale(1.04);
2581
+ }
2582
+ 100% {
2583
+ transform: scale(1);
2584
+ }
2585
+ }
2586
+
2587
+ @keyframes kds-copy-button-pop {
2588
+ 0% {
2589
+ transform: scale(0.3);
2590
+ opacity: 0;
2591
+ }
2592
+ 60% {
2593
+ transform: scale(1.25);
2594
+ opacity: 1;
2595
+ }
2596
+ 100% {
2597
+ transform: scale(1);
2598
+ }
2599
+ }
2600
+
2601
+ /* ========================================
2602
+ Link Styles
2603
+ ======================================== */
2604
+
2605
+ /* Explicit link class */
2606
+ .kds-link {
2607
+ color: var(--kds-color-primary-main);
2608
+ text-decoration: none;
2609
+ cursor: pointer;
2610
+ transition: color var(--kds-transition-shorter) var(--kds-easing-standard);
2611
+ }
2612
+
2613
+ .kds-link:hover {
2614
+ color: var(--kds-color-primary-dark);
2615
+ text-decoration: underline;
2616
+ }
2617
+
2618
+ /* Dark: hover lightens (primary-dark is near-invisible on dark surfaces). */
2619
+ [data-theme="dark"] .kds-link:hover {
2620
+ color: var(--kds-color-primary-light);
2621
+ }
2622
+
2623
+ /* Contextual links inside cards and stage forms */
2624
+ .kds-card-body a:not(.kds-btn):not([class*="kds-btn"]),
2625
+ .kds-stage-content a:not(.kds-btn):not([class*="kds-btn"]),
2626
+ label.checkbox a:not(.kds-btn):not([class*="kds-btn"]),
2627
+ label.radio a:not(.kds-btn):not([class*="kds-btn"]) {
2628
+ color: var(--kds-color-primary-main);
2629
+ text-decoration: none;
2630
+ transition: color var(--kds-transition-shorter) var(--kds-easing-standard);
2631
+ }
2632
+
2633
+ .kds-card-body a:not(.kds-btn):not([class*="kds-btn"]):hover,
2634
+ .kds-stage-content a:not(.kds-btn):not([class*="kds-btn"]):hover,
2635
+ label.checkbox a:not(.kds-btn):not([class*="kds-btn"]):hover,
2636
+ label.radio a:not(.kds-btn):not([class*="kds-btn"]):hover {
2637
+ color: var(--kds-color-primary-dark);
2638
+ text-decoration: underline;
2639
+ }
2640
+
2641
+ /* Dark: hover must lighten (primary-dark is near-invisible on a dark surface). */
2642
+ [data-theme="dark"] .kds-card-body a:not(.kds-btn):not([class*="kds-btn"]):hover,
2643
+ [data-theme="dark"] .kds-stage-content a:not(.kds-btn):not([class*="kds-btn"]):hover,
2644
+ [data-theme="dark"] label.checkbox a:not(.kds-btn):not([class*="kds-btn"]):hover,
2645
+ [data-theme="dark"] label.radio a:not(.kds-btn):not([class*="kds-btn"]):hover {
2646
+ color: var(--kds-color-primary-light);
2647
+ }
2648
+
2649
+ /* ========================================
2650
+ Flex Layout System (Body + Container + Sidebar)
2651
+ ======================================== */
2652
+
2653
+ /* Body flex-column layout */
2654
+ body.kds-layout {
2655
+ display: flex;
2656
+ flex-direction: column;
2657
+ min-height: 100vh;
2658
+ margin: 0;
2659
+ }
2660
+
2661
+ /* Layout container (flex-row) - below header */
2662
+ .kds-layout-container {
2663
+ display: flex;
2664
+ flex-direction: row;
2665
+ flex: 1;
2666
+ overflow: hidden;
2667
+ }
2668
+ /* ========================================
2669
+ Footer Customization
2670
+ ======================================== */
2671
+
2672
+ footer.primary {
2673
+ background: var(--primary);
2674
+ padding: var(--kds-spacing-4) var(--kds-spacing-3);
2675
+ color: var(--on-primary);
2676
+ }
2677
+
2678
+ footer.primary h6 {
2679
+ color: var(--on-primary);
2680
+ font-weight: var(--kds-font-weight-semibold);
2681
+ margin-bottom: var(--kds-spacing-2);
2682
+ }
2683
+
2684
+ footer.primary a {
2685
+ color: var(--on-primary);
2686
+ text-decoration: none;
2687
+ display: block;
2688
+ padding: var(--kds-spacing-0-5) 0;
2689
+ transition: opacity var(--kds-transition-shorter) var(--kds-easing-standard);
2690
+ text-align: center;
2691
+ }
2692
+
2693
+ footer.primary a:hover {
2694
+ opacity: 0.8;
2695
+ }
2696
+
2697
+ /* ========================================
2698
+ Form Inputs (Material Design 3)
2699
+ ======================================== */
2700
+
2701
+ /* Form labels */
2702
+ .field label,
2703
+ .kds-form-label {
2704
+ font-size: 14px;
2119
2705
  font-weight: 500;
2120
2706
  color: var(--kds-color-text-primary);
2121
2707
  margin-bottom: 8px;
@@ -2130,6 +2716,16 @@ footer.primary a:hover {
2130
2716
  margin-right: var(--kds-spacing-2);
2131
2717
  }
2132
2718
 
2719
+ /* Ícono(s) en color primary. Para íconos MUI/SVG dentro del scope que, por el reset
2720
+ `.kds-theme-root svg { fill: currentColor }`, terminan heredando el color de texto
2721
+ (#333) en vez de su color propio — el `color="primary"` de MUI no le gana al contexto.
2722
+ Aplica al contenedor y a sus i/svg hijos. */
2723
+ .kds-icon-primary,
2724
+ .kds-icon-primary i,
2725
+ .kds-icon-primary svg {
2726
+ color: var(--kds-color-primary-main);
2727
+ }
2728
+
2133
2729
  /* Section title icon */
2134
2730
  .kds-stage-section-title i {
2135
2731
  vertical-align: middle;
@@ -2144,7 +2740,8 @@ footer.primary a:hover {
2144
2740
  /* === VARIABLES GLOBALES === */
2145
2741
  :root,
2146
2742
  body.light,
2147
- body.dark {
2743
+ body.dark,
2744
+ [data-theme="dark"] {
2148
2745
  --primary: var(--kds-color-primary-main); /* Purple Khipu - Focus */
2149
2746
  --outline: var(--kds-color-input-enabled-border); /* Gris normal - Unfocused */
2150
2747
  --error: var(--kds-color-error-main); /* Rojo - Invalid */
@@ -2172,6 +2769,14 @@ body.dark {
2172
2769
  padding-block-start: 1.5rem;
2173
2770
  }
2174
2771
 
2772
+ /* Label en reposo (estado "abajo", como placeholder): font-size menor al 1rem de BeerCSS
2773
+ para que un label largo no estorbe con un ícono (prefix/suffix) del input. Token sm
2774
+ (13–14px, siempre < 1rem del input incluso en desktop). Al flotar, BeerCSS lo reduce a
2775
+ .75rem con mayor especificidad, así que esto solo afecta el reposo. */
2776
+ .field.label > label {
2777
+ font-size: var(--kds-font-size-sm);
2778
+ }
2779
+
2175
2780
  /* ==========================================
2176
2781
  NOTCH VISIBILITY (opacity)
2177
2782
  ========================================== */
@@ -2293,6 +2898,23 @@ body.dark {
2293
2898
  color: var(--error); /* Rojo error */
2294
2899
  }
2295
2900
 
2901
+ /* ==========================================
2902
+ PASSWORD REVEAL TOGGLE (KdsTextField `revealable`)
2903
+ El <a role="button"> reusa el posicionamiento de icono de BeerCSS
2904
+ (.field > a, pointer-events: all). Aquí solo: color del icono
2905
+ (on-surface-variant) y un focus ring accesible para el toggle
2906
+ navegable por teclado (BeerCSS hace `outline: inherit` en <a>).
2907
+ ========================================== */
2908
+ .field > a.kds-field-reveal {
2909
+ color: var(--on-surface-variant);
2910
+ }
2911
+
2912
+ .field > a.kds-field-reveal:focus-visible {
2913
+ outline: 2px solid var(--primary);
2914
+ outline-offset: 2px;
2915
+ border-radius: 50%;
2916
+ }
2917
+
2296
2918
  /* ==========================================
2297
2919
  LABEL COLOR
2298
2920
  Mantener sincronizado con border
@@ -2303,9 +2925,9 @@ body.dark {
2303
2925
  color: var(--kds-color-text-secondary);
2304
2926
  }
2305
2927
 
2306
- /* Hover SIN focus: más oscuro (70% opacity) */
2928
+ /* Hover SIN focus: máxima emphasis (adapta a blanco en dark) */
2307
2929
  .field.label:hover:not(:focus-within) > label {
2308
- color: rgba(0, 0, 0, 0.7);
2930
+ color: var(--kds-color-text-primary);
2309
2931
  }
2310
2932
 
2311
2933
  /* Focus: primary purple (BeerCSS ya lo hace, pero aseguramos) */
@@ -2400,6 +3022,71 @@ body.dark {
2400
3022
  display: inline-flex;
2401
3023
  }
2402
3024
 
3025
+ /* ========================================
3026
+ Radix Tooltip (.kds-tooltip)
3027
+ Espejo de `.tooltip` pero para popovers de Radix:
3028
+ bg oscuro, texto blanco, sombra + animación fade/slide direccional.
3029
+ ======================================== */
3030
+
3031
+ .kds-tooltip {
3032
+ background-color: var(--kds-color-text-primary);
3033
+ color: var(--kds-color-background-paper);
3034
+ font-family: var(--kds-font-family-primary);
3035
+ font-size: var(--kds-font-size-xs);
3036
+ font-weight: var(--kds-font-weight-medium);
3037
+ line-height: var(--kds-line-height-normal);
3038
+ border-radius: var(--kds-radius-sm);
3039
+ padding: var(--kds-spacing-0-75) var(--kds-spacing-1-5);
3040
+ box-shadow: var(--kds-shadow-4);
3041
+ max-width: 280px;
3042
+ z-index: var(--kds-z-index-tooltip, 1500);
3043
+ user-select: none;
3044
+ /* Animación direccional según Radix data-side — coordinada con copy-row
3045
+ (cubic-bezier 0.2, 0.8, 0.2, 1) para un feel consistente del DS. */
3046
+ animation-duration: 240ms;
3047
+ animation-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1);
3048
+ will-change: transform, opacity;
3049
+ }
3050
+
3051
+ .kds-tooltip[data-state='closed'] {
3052
+ animation-duration: 140ms;
3053
+ animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
3054
+ }
3055
+
3056
+ /* Direccional según data-side (Radix añade el attr en runtime).
3057
+ Cada lado entra desde su dirección con ~8px de offset (más visible que 4px). */
3058
+ .kds-tooltip[data-side='top'][data-state='delayed-open'],
3059
+ .kds-tooltip[data-side='top'][data-state='instant-open'] { animation-name: kds-tooltip-in-top; }
3060
+ .kds-tooltip[data-side='bottom'][data-state='delayed-open'],
3061
+ .kds-tooltip[data-side='bottom'][data-state='instant-open'] { animation-name: kds-tooltip-in-bottom; }
3062
+ .kds-tooltip[data-side='left'][data-state='delayed-open'],
3063
+ .kds-tooltip[data-side='left'][data-state='instant-open'] { animation-name: kds-tooltip-in-left; }
3064
+ .kds-tooltip[data-side='right'][data-state='delayed-open'],
3065
+ .kds-tooltip[data-side='right'][data-state='instant-open'] { animation-name: kds-tooltip-in-right; }
3066
+
3067
+ /* Fallback cuando no hay data-side resuelto aún */
3068
+ .kds-tooltip[data-state='delayed-open']:not([data-side]),
3069
+ .kds-tooltip[data-state='instant-open']:not([data-side]) {
3070
+ animation-name: kds-tooltip-in-top;
3071
+ }
3072
+
3073
+ .kds-tooltip[data-state='closed'] { animation-name: kds-tooltip-out; }
3074
+
3075
+ @keyframes kds-tooltip-in-top { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
3076
+ @keyframes kds-tooltip-in-bottom { from { opacity: 0; transform: translateY(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
3077
+ @keyframes kds-tooltip-in-left { from { opacity: 0; transform: translateX(8px) scale(0.96); } to { opacity: 1; transform: none; } }
3078
+ @keyframes kds-tooltip-in-right { from { opacity: 0; transform: translateX(-8px) scale(0.96); } to { opacity: 1; transform: none; } }
3079
+
3080
+ @keyframes kds-tooltip-out {
3081
+ from { opacity: 1; transform: none; }
3082
+ to { opacity: 0; transform: scale(0.96); }
3083
+ }
3084
+
3085
+ /* Arrow (SVG path generado por Radix) */
3086
+ .kds-tooltip-arrow {
3087
+ fill: var(--kds-color-text-primary);
3088
+ }
3089
+
2403
3090
  /* ========================================
2404
3091
  Material Symbols Icon Sizing
2405
3092
  ======================================== */
@@ -2410,8 +3097,13 @@ body.dark {
2410
3097
  'wght' 400,
2411
3098
  'GRAD' 0,
2412
3099
  'opsz' 24;
2413
- min-width: 30px;
2414
- min-height: 30px;
3100
+ /* La caja debe seguir al font-size (1em): una caja fija (30px, o el --_size de Beer via
3101
+ overflow:hidden en `i`) recorta los glifos mayores y descentra los menores junto a texto. */
3102
+ width: 1em;
3103
+ height: 1em;
3104
+ min-width: 1em;
3105
+ min-height: 1em;
3106
+ line-height: 1;
2415
3107
  display: inline-flex;
2416
3108
  align-items: center;
2417
3109
  justify-content: center;
@@ -2434,6 +3126,16 @@ body.dark {
2434
3126
  width: 100%;
2435
3127
  }
2436
3128
 
3129
+ /* Truncado en una línea con ellipsis. Incluye min-width:0 para que funcione
3130
+ dentro de contenedores flex/grid (el ítem puede encogerse por debajo de su
3131
+ contenido). Útil para nombres/asuntos largos en headers y filas. */
3132
+ .kds-truncate {
3133
+ min-width: 0;
3134
+ overflow: hidden;
3135
+ text-overflow: ellipsis;
3136
+ white-space: nowrap;
3137
+ }
3138
+
2437
3139
  .kds-max-w-sm {
2438
3140
  max-width: 400px;
2439
3141
  }
@@ -2477,6 +3179,11 @@ body.dark {
2477
3179
  display: flex;
2478
3180
  flex-direction: column;
2479
3181
  gap: var(--kds-spacing-3);
3182
+ /* Reset del fieldset nativo: sin borde/padding/margin por defecto del navegador. */
3183
+ margin: 0;
3184
+ padding: 0;
3185
+ border: 0;
3186
+ min-inline-size: 0;
2480
3187
  }
2481
3188
 
2482
3189
  /* Checkbox Label - BeerCSS override */
@@ -2488,7 +3195,7 @@ label.radio {
2488
3195
  border-radius: 8px;
2489
3196
  cursor: pointer;
2490
3197
  transition: background-color 0.2s;
2491
- font-size: 16px;
3198
+ font-size: var(--kds-font-size-sm);
2492
3199
  line-height: 1.5;
2493
3200
  color: var(--kds-color-text-primary);
2494
3201
  }
@@ -2526,6 +3233,42 @@ label.radio:has(input:disabled) {
2526
3233
  opacity: 0.6;
2527
3234
  }
2528
3235
 
3236
+ /* ========================================
3237
+ RADIO GROUP — variante card (.kds-radio-group--card)
3238
+ Cada opción como fila con borde (estilo selección de banco/cuenta),
3239
+ manteniendo el control radio. Hover + opción seleccionada resaltada.
3240
+ ======================================== */
3241
+ .kds-radio-group--card {
3242
+ gap: var(--kds-spacing-2);
3243
+ }
3244
+
3245
+ .kds-radio-group--card label.radio {
3246
+ gap: var(--kds-spacing-1-5);
3247
+ /* Vertical con un poco más de aire; horizontal reducido para pegar el radio a la izquierda. */
3248
+ padding: var(--kds-spacing-2) var(--kds-spacing-1-5);
3249
+ /* Bordes con los valores del bank selector. */
3250
+ border: 1px solid var(--kds-color-border-subtle);
3251
+ border-radius: var(--kds-radius-card);
3252
+ background: var(--kds-color-surface);
3253
+ transition: border-color 0.2s, background 0.2s;
3254
+ }
3255
+
3256
+ /* Leve separación extra entre el radio y el texto de la opción. */
3257
+ .kds-radio-group--card label.radio span {
3258
+ margin-left: var(--kds-spacing-0-5);
3259
+ }
3260
+
3261
+ .kds-radio-group--card label.radio:hover {
3262
+ border-color: var(--kds-color-border-default);
3263
+ }
3264
+
3265
+ /* Seleccionada: poco color primario — solo un fondo faint sutil + borde gris
3266
+ (el punto del radio ya comunica la selección). */
3267
+ .kds-radio-group--card label.radio:has(input:checked) {
3268
+ border-color: var(--kds-color-border-default);
3269
+ background: var(--kds-color-primary-faint);
3270
+ }
3271
+
2529
3272
  /* ========================================
2530
3273
  ONBOARDING COMPONENTS
2531
3274
  Multi-stage onboarding flow with form validation
@@ -2722,7 +3465,7 @@ dialog.modal .field.border:focus-within {
2722
3465
  background: var(--kds-accordion-bg-open);
2723
3466
  font-size: var(--kds-font-size-sm);
2724
3467
  line-height: 1.6;
2725
- color: #374151;
3468
+ color: var(--kds-color-text-primary);
2726
3469
  }
2727
3470
 
2728
3471
  .kds-contract-accordion-content h4 {
@@ -3023,19 +3766,17 @@ footer > .kds-container-center {
3023
3766
  display: flex;
3024
3767
  align-items: center;
3025
3768
  gap: var(--kds-spacing-1);
3026
- padding: var(--kds-spacing-2);
3769
+ /* Padding compacto: vertical spacing-1 (8px), horizontal spacing-2 (16px). */
3770
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
3027
3771
  border-radius: var(--kds-radius-md);
3028
3772
  border: 1px solid;
3029
3773
  font-family: var(--kds-font-family-primary);
3030
3774
  min-width: 0;
3031
- flex: 1 1 100%;
3032
- }
3033
-
3034
- @media (min-width: 768px) {
3035
- .kds-alert {
3036
- padding: var(--kds-spacing-2);
3037
- flex: 1 1 auto;
3038
- }
3775
+ /* Banner: ocupa siempre el ancho del contenedor. width explícito porque como
3776
+ flex item de una columna con align-items:center el cross-axis no se estira.
3777
+ Sin flex-grow para no estirarse verticalmente en contenedores flex-column. */
3778
+ width: 100%;
3779
+ flex: 0 1 auto;
3039
3780
  }
3040
3781
 
3041
3782
  .kds-alert:last-child {
@@ -3061,7 +3802,9 @@ footer > .kds-container-center {
3061
3802
  font-size: var(--kds-font-size-sm);
3062
3803
  font-weight: var(--kds-font-weight-semibold);
3063
3804
  line-height: var(--kds-line-height-normal);
3064
- margin-bottom: var(--kds-spacing-0-5);
3805
+ /* Solo margin-bottom: el padding del alert da el espaciado. Reset del resto para
3806
+ evitar el margin-block que BeerCSS aplica a <p> dentro del scope. */
3807
+ margin: 0 0 var(--kds-spacing-0-5);
3065
3808
  word-break: normal;
3066
3809
  overflow-wrap: break-word;
3067
3810
  }
@@ -3071,6 +3814,9 @@ footer > .kds-container-center {
3071
3814
  font-size: var(--kds-font-size-sm);
3072
3815
  font-weight: var(--kds-font-weight-regular);
3073
3816
  line-height: var(--kds-line-height-relaxed);
3817
+ /* Sin margen propio: el padding del alert es el único espaciado (evita el
3818
+ margin-block de <p> de BeerCSS dentro del scope). */
3819
+ margin: 0;
3074
3820
  word-break: normal;
3075
3821
  overflow-wrap: break-word;
3076
3822
  }
@@ -3116,11 +3862,58 @@ footer > .kds-container-center {
3116
3862
  color: var(--kds-color-error-dark);
3117
3863
  }
3118
3864
 
3119
- /* Lists inside alerts */
3120
- .kds-alert ul {
3121
- padding-left: var(--kds-spacing-2);
3122
- margin-top: var(--kds-spacing-1);
3123
- margin-bottom: 0;
3865
+ /* Dark mode: the semantic *-dark shades used for text/icons above are too dark
3866
+ on the dark translucent alert surfaces (poor visibility). Use the alert
3867
+ *-text tokens (light shades in dark) so title, description and icon stay
3868
+ legible. Title/description inherit this color. Additive — light unchanged. */
3869
+ [data-theme="dark"] .kds-alert.kds-info,
3870
+ [data-theme="dark"] .kds-alert.kds-info .kds-alert-icon {
3871
+ color: var(--kds-alert-info-text);
3872
+ }
3873
+ [data-theme="dark"] .kds-alert.kds-success,
3874
+ [data-theme="dark"] .kds-alert.kds-success .kds-alert-icon {
3875
+ color: var(--kds-alert-success-text);
3876
+ }
3877
+ [data-theme="dark"] .kds-alert.kds-warning,
3878
+ [data-theme="dark"] .kds-alert.kds-warning .kds-alert-icon {
3879
+ color: var(--kds-alert-warning-text);
3880
+ }
3881
+ [data-theme="dark"] .kds-alert.kds-error,
3882
+ [data-theme="dark"] .kds-alert.kds-error .kds-alert-icon {
3883
+ color: var(--kds-alert-error-text);
3884
+ }
3885
+
3886
+ /* Close button — icon-only, discreto, no usa kds-btn para no romper el flex layout del alert */
3887
+ .kds-alert-close {
3888
+ flex-shrink: 0;
3889
+ display: inline-flex;
3890
+ align-items: center;
3891
+ justify-content: center;
3892
+ width: 28px;
3893
+ height: 28px;
3894
+ padding: 0;
3895
+ background: transparent;
3896
+ border: 0;
3897
+ border-radius: 50%;
3898
+ color: inherit;
3899
+ cursor: pointer;
3900
+ transition: background-color 0.15s ease;
3901
+ }
3902
+
3903
+ .kds-alert-close:hover {
3904
+ background: rgba(0, 0, 0, 0.06);
3905
+ }
3906
+
3907
+ .kds-alert-close i {
3908
+ font-size: 18px;
3909
+ line-height: 1;
3910
+ }
3911
+
3912
+ /* Lists inside alerts */
3913
+ .kds-alert ul {
3914
+ padding-left: var(--kds-spacing-2);
3915
+ margin-top: var(--kds-spacing-1);
3916
+ margin-bottom: 0;
3124
3917
  }
3125
3918
 
3126
3919
  /* Links inside alerts */
@@ -3718,6 +4511,11 @@ footer > .kds-container-center {
3718
4511
  color: var(--kds-color-primary-dark);
3719
4512
  }
3720
4513
 
4514
+ /* Dark: hover lightens (primary-dark is near-invisible on dark surfaces). */
4515
+ [data-theme="dark"] .page-card-link:hover {
4516
+ color: var(--kds-color-primary-light);
4517
+ }
4518
+
3721
4519
  .page-card-link i {
3722
4520
  font-size: var(--kds-font-size-xl);
3723
4521
  transition: transform var(--kds-transition-shorter) var(--kds-easing-standard);
@@ -4112,6 +4910,14 @@ dialog#surveyModal button.circle {
4112
4910
  text-align: center;
4113
4911
  }
4114
4912
 
4913
+ .kds-text-left {
4914
+ text-align: left;
4915
+ }
4916
+
4917
+ .kds-text-right {
4918
+ text-align: right;
4919
+ }
4920
+
4115
4921
  .kds-text-underline {
4116
4922
  text-decoration: underline;
4117
4923
  }
@@ -4124,10 +4930,62 @@ dialog#surveyModal button.circle {
4124
4930
  color: var(--on-surface-variant);
4125
4931
  }
4126
4932
 
4933
+ .kds-text-primary {
4934
+ color: var(--kds-color-primary-main);
4935
+ }
4936
+
4127
4937
  .kds-text-sm {
4128
4938
  font-size: var(--kds-font-size-sm);
4129
4939
  }
4130
4940
 
4941
+ /* ── Font-size scale utilities (additive — opt-in companions to .kds-text-sm) ── */
4942
+ .kds-text-base {
4943
+ font-size: var(--kds-font-size-base);
4944
+ }
4945
+
4946
+ .kds-text-lg {
4947
+ font-size: var(--kds-font-size-lg);
4948
+ }
4949
+
4950
+ .kds-text-xl {
4951
+ font-size: var(--kds-font-size-xl);
4952
+ }
4953
+
4954
+ .kds-text-2xl {
4955
+ font-size: var(--kds-font-size-2xl);
4956
+ }
4957
+
4958
+ /* ── Font-weight utilities ── */
4959
+ .kds-fw-regular {
4960
+ font-weight: var(--kds-font-weight-regular);
4961
+ }
4962
+
4963
+ .kds-fw-medium {
4964
+ font-weight: var(--kds-font-weight-medium);
4965
+ }
4966
+
4967
+ .kds-fw-semibold {
4968
+ font-weight: var(--kds-font-weight-semibold);
4969
+ }
4970
+
4971
+ .kds-fw-bold {
4972
+ font-weight: var(--kds-font-weight-bold);
4973
+ }
4974
+
4975
+ /* ── Text-transform utilities ── */
4976
+ .kds-text-transform-none {
4977
+ text-transform: none;
4978
+ }
4979
+
4980
+ /* ── Soft background utilities (semantic muted backgrounds for callouts) ── */
4981
+ .kds-bg-warning-soft {
4982
+ background-color: var(--kds-color-warning-soft);
4983
+ }
4984
+
4985
+ .kds-bg-info-soft {
4986
+ background-color: var(--kds-color-info-soft);
4987
+ }
4988
+
4131
4989
  /* ── Typography variants ── */
4132
4990
  .kds-text-display1 {
4133
4991
  font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
@@ -4205,7 +5063,50 @@ dialog#surveyModal button.circle {
4205
5063
  text-transform: uppercase;
4206
5064
  }
4207
5065
 
5066
+ /* KV label — label del par clave↔valor (letra del dt de .kds-kv: "PAGO A" / "ASUNTO").
5067
+ line-height tight: en pares apilados el relaxed infla la separación de tinta. */
5068
+ .kds-text-kv-label {
5069
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5070
+ font-size: var(--kds-font-size-xs);
5071
+ font-weight: var(--kds-font-weight-regular);
5072
+ line-height: var(--kds-line-height-tight);
5073
+ letter-spacing: normal;
5074
+ text-transform: uppercase;
5075
+ color: var(--kds-color-text-secondary);
5076
+ }
5077
+
5078
+ /* Value — dato/valor destacado (ej. nombre del comercio en el header del cobro).
5079
+ line-height tight: se usa en pares apilados y el relaxed infla la separación. */
5080
+ .kds-text-value {
5081
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5082
+ font-size: var(--kds-font-size-sm);
5083
+ font-weight: var(--kds-font-weight-semibold);
5084
+ line-height: var(--kds-line-height-tight);
5085
+ color: var(--kds-color-gray-800);
5086
+ }
5087
+
5088
+ /* Code — texto tipo código/referencia (mono, uppercase, gris), como el "CÓDIGO" del header. */
5089
+ .kds-text-code {
5090
+ font-family: var(--kds-font-family-mono);
5091
+ font-size: var(--kds-font-size-xs);
5092
+ font-weight: var(--kds-font-weight-regular);
5093
+ letter-spacing: var(--kds-letter-spacing-wider);
5094
+ font-variant-numeric: tabular-nums;
5095
+ color: var(--kds-color-gray-400);
5096
+ text-transform: uppercase;
5097
+ }
5098
+
5099
+ /* Caption — texto muy chico y liviano para pie de página (ej. número de versión). */
5100
+ .kds-text-caption {
5101
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5102
+ font-size: var(--kds-font-size-2xs);
5103
+ font-weight: var(--kds-font-weight-regular);
5104
+ line-height: var(--kds-line-height-normal);
5105
+ color: var(--kds-color-gray-400);
5106
+ }
5107
+
4208
5108
  .kds-text-link {
5109
+ cursor: pointer;
4209
5110
  font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4210
5111
  font-size: inherit;
4211
5112
  font-weight: var(--kds-font-weight-medium, 500);
@@ -4218,6 +5119,12 @@ dialog#surveyModal button.circle {
4218
5119
  color: var(--kds-color-primary-dark, #5B3179);
4219
5120
  }
4220
5121
 
5122
+ /* Inline emphasis: bold weight only, inherits size/color/family from context so it
5123
+ works as a highlighted fragment inside any other variant (body, heading, etc.). */
5124
+ .kds-text-strong {
5125
+ font-weight: var(--kds-font-weight-bold, 700);
5126
+ }
5127
+
4221
5128
  /* Display utilities */
4222
5129
  .kds-hidden {
4223
5130
  display: none;
@@ -4243,13 +5150,13 @@ dialog#surveyModal button.circle {
4243
5150
 
4244
5151
  /* Color utilities (solo para casos específicos de demo) */
4245
5152
  .kds-text-warning {
4246
- color: #92400E;
5153
+ color: var(--kds-alert-warning-text); /* #663C00 light / #FFB74D dark */
4247
5154
  }
4248
5155
 
4249
5156
  .kds-list-warning {
4250
5157
  margin: 0;
4251
5158
  padding-left: var(--kds-spacing-5);
4252
- color: #78350F;
5159
+ color: var(--kds-alert-warning-text); /* #663C00 light / #FFB74D dark */
4253
5160
  }
4254
5161
 
4255
5162
  /* ========================================
@@ -4307,7 +5214,25 @@ dialog#surveyModal button.circle {
4307
5214
  flex-shrink: 0;
4308
5215
  }
4309
5216
 
5217
+ /* Versión de la app anclada al fondo del card body (flex column): margin-top
5218
+ auto absorbe el espacio libre; el padding garantiza respiro mínimo cuando el
5219
+ contenido llena la card. */
5220
+ .kds-card-version {
5221
+ margin-top: auto;
5222
+ padding-top: var(--kds-spacing-2);
5223
+ text-align: center;
5224
+ }
5225
+
5226
+ /* Separador vertical (entre chips/logos hermanos en una fila). */
5227
+ .kds-vr {
5228
+ width: 1px;
5229
+ height: var(--kds-spacing-3);
5230
+ background: var(--kds-color-divider);
5231
+ flex: 0 0 auto;
5232
+ }
5233
+
4310
5234
  /* Gap utilities */
5235
+ .kds-gap-0-25 { gap: var(--kds-spacing-0-25); }
4311
5236
  .kds-gap-1 { gap: var(--kds-spacing-1); }
4312
5237
  .kds-gap-2 { gap: var(--kds-spacing-2); }
4313
5238
  .kds-gap-3 { gap: var(--kds-spacing-3); }
@@ -4338,7 +5263,9 @@ dialog#surveyModal button.circle {
4338
5263
  ======================================== */
4339
5264
 
4340
5265
  .kds-badge {
4341
- display: inline-block;
5266
+ display: inline-flex;
5267
+ align-items: center;
5268
+ gap: 4px;
4342
5269
  padding: 2px 8px;
4343
5270
  border-radius: var(--kds-radius-sm);
4344
5271
  font-size: var(--kds-font-size-xs);
@@ -4346,6 +5273,40 @@ dialog#surveyModal button.circle {
4346
5273
  line-height: 1.5;
4347
5274
  }
4348
5275
 
5276
+ /* Icon prefix inside chip — small inline icon */
5277
+ .kds-badge > i.material-symbols-outlined {
5278
+ font-size: 14px;
5279
+ line-height: 1;
5280
+ }
5281
+
5282
+ /* Deletable chip close button — discreto, sin kds-btn (eso lo agrandaba ridículo) */
5283
+ .kds-badge-close {
5284
+ display: inline-flex;
5285
+ align-items: center;
5286
+ justify-content: center;
5287
+ width: 16px;
5288
+ height: 16px;
5289
+ margin-right: -2px;
5290
+ padding: 0;
5291
+ background: transparent;
5292
+ border: 0;
5293
+ border-radius: 50%;
5294
+ color: inherit;
5295
+ cursor: pointer;
5296
+ opacity: 0.7;
5297
+ transition: opacity 0.15s, background-color 0.15s;
5298
+ }
5299
+
5300
+ .kds-badge-close:hover {
5301
+ opacity: 1;
5302
+ background: rgba(0, 0, 0, 0.1);
5303
+ }
5304
+
5305
+ .kds-badge-close i {
5306
+ font-size: 14px;
5307
+ line-height: 1;
5308
+ }
5309
+
4349
5310
  .kds-badge.success {
4350
5311
  background-color: var(--kds-color-success-container);
4351
5312
  color: var(--kds-color-success-dark);
@@ -4371,6 +5332,30 @@ dialog#surveyModal button.circle {
4371
5332
  color: var(--kds-color-primary-dark);
4372
5333
  }
4373
5334
 
5335
+ /* Dark: semantic *-dark text is near-invisible on dark surfaces (and the
5336
+ *-container background tokens are not generated). Use the alert bg/text
5337
+ pairs, which are dark-aware; primary uses selected/light. */
5338
+ [data-theme="dark"] .kds-badge.success {
5339
+ background-color: var(--kds-alert-success-bg);
5340
+ color: var(--kds-alert-success-text);
5341
+ }
5342
+ [data-theme="dark"] .kds-badge.error {
5343
+ background-color: var(--kds-alert-error-bg);
5344
+ color: var(--kds-alert-error-text);
5345
+ }
5346
+ [data-theme="dark"] .kds-badge.warning {
5347
+ background-color: var(--kds-alert-warning-bg);
5348
+ color: var(--kds-alert-warning-text);
5349
+ }
5350
+ [data-theme="dark"] .kds-badge.info {
5351
+ background-color: var(--kds-alert-info-bg);
5352
+ color: var(--kds-alert-info-text);
5353
+ }
5354
+ [data-theme="dark"] .kds-badge.primary {
5355
+ background-color: var(--kds-color-primary-selected);
5356
+ color: var(--kds-color-primary-light);
5357
+ }
5358
+
4374
5359
  /* ========================================
4375
5360
  DIVIDER WITH TEXT
4376
5361
  Separator with optional text
@@ -4557,21 +5542,46 @@ dialog#surveyModal button.circle {
4557
5542
  flex-shrink: 0;
4558
5543
  }
4559
5544
 
4560
- /* Merchant tile with logo variant */
5545
+ /* Merchant tile with logo variant — el logo (avatar del comercio) llena TODO el tile.
5546
+ `display: block` evita el desborde del auto-grid; `overflow: hidden` recorta la imagen
5547
+ a las esquinas redondeadas del tile. La imagen va CUADRADA (sin border-radius propio):
5548
+ solo el contenedor recorta, evitando el hairline sub-pixel del doble redondeo. El fondo
5549
+ se deja transparente bajo el logo como respaldo (no debe verse púrpura en los bordes). */
4561
5550
  .kds-merchant-tile.logo {
4562
- padding: var(--kds-spacing-0-5);
5551
+ padding: 0;
5552
+ display: block;
5553
+ overflow: hidden;
5554
+ background: transparent;
4563
5555
  }
4564
5556
 
4565
5557
  .kds-merchant-tile.logo img {
4566
5558
  width: 100%;
4567
5559
  height: 100%;
4568
5560
  object-fit: cover;
4569
- border-radius: var(--kds-radius-md);
5561
+ border-radius: 0;
5562
+ display: block;
5563
+ }
5564
+
5565
+ /* Variante para logos que traen su propio marco/forma (logos de comercio/servicio,
5566
+ no fotos): `contain` + padding para que el logo entre completo sin recortar sus
5567
+ esquinas. Opt-in: pasar className="kds-merchant-tile--contain". */
5568
+ .kds-merchant-tile.logo.kds-merchant-tile--contain {
5569
+ padding: var(--kds-spacing-1);
5570
+ }
5571
+ .kds-merchant-tile.logo.kds-merchant-tile--contain img {
5572
+ object-fit: contain;
4570
5573
  }
4571
5574
 
4572
5575
  .kds-merchant-meta {
4573
5576
  display: flex;
4574
5577
  flex-direction: column;
5578
+ gap: var(--kds-spacing-0-5);
5579
+ }
5580
+
5581
+ /* El meta controla su propio espaciado: anula el margin sibling de BeerCSS
5582
+ (`… + :is(p,h*,…) { margin-block-start: 1rem }`) que separaba de más las líneas. */
5583
+ .kds-merchant-meta > * {
5584
+ margin-block: 0 !important;
4575
5585
  }
4576
5586
 
4577
5587
  .kds-merchant-label {
@@ -4624,6 +5634,11 @@ dialog#surveyModal button.circle {
4624
5634
  color: var(--kds-color-text-primary);
4625
5635
  }
4626
5636
 
5637
+ /* Opt-in color modifier — switches the value to the LigoPay/khipu-blue tone */
5638
+ .kds-amount-value--info {
5639
+ color: var(--kds-color-info-blue); /* #5A5FE0 */
5640
+ }
5641
+
4627
5642
  .kds-amount-value small {
4628
5643
  font-size: 18px;
4629
5644
  font-weight: 500;
@@ -4830,6 +5845,26 @@ dialog#surveyModal button.circle {
4830
5845
  background: var(--kds-color-hover-bg);
4831
5846
  }
4832
5847
 
5848
+ /* BeerCSS forces `border-radius: .5rem !important` on button:active
5849
+ (:is(.button,button):not(.chip):active — specificity 0,3,0). Keep each
5850
+ row-button's own radius in the active state: doubled class matches that
5851
+ specificity and this file loads after beer.css, so these win. */
5852
+ .kds-bank-row.kds-bank-row:active {
5853
+ border-radius: var(--kds-radius-card) !important;
5854
+ }
5855
+ .kds-qr-row.kds-qr-row:active {
5856
+ border-radius: var(--kds-radius-card) !important;
5857
+ }
5858
+ .kds-copy-row.kds-copy-row:active {
5859
+ border-radius: var(--kds-radius-row) !important;
5860
+ }
5861
+ .kds-copyable-table-row.kds-copyable-table-row:active {
5862
+ border-radius: var(--kds-spacing-0-75) !important;
5863
+ }
5864
+ .kds-bank-item.kds-bank-item:active {
5865
+ border-radius: var(--kds-radius-lg) !important;
5866
+ }
5867
+
4833
5868
  .kds-bank-row-logo {
4834
5869
  width: 40px;
4835
5870
  height: 40px;
@@ -4887,7 +5922,7 @@ dialog#surveyModal button.circle {
4887
5922
  display: flex;
4888
5923
  gap: var(--kds-spacing-1-25);
4889
5924
  padding: var(--kds-spacing-2);
4890
- background: #FFFFFF;
5925
+ background: var(--kds-color-background-default); /* #FFF light / #181818 dark */
4891
5926
  border-top: 1px solid var(--kds-color-divider);
4892
5927
  padding-bottom: calc(var(--kds-spacing-2) + env(safe-area-inset-bottom));
4893
5928
  z-index: 100;
@@ -4909,6 +5944,144 @@ dialog#surveyModal button.circle {
4909
5944
  box-shadow: 0 -4px 16px rgba(16,24,40,.08);
4910
5945
  }
4911
5946
 
5947
+ /* ========================================
5948
+ 08b - FAB (.kds-fab)
5949
+ Circular, icon-only floating action button with an animated hide state.
5950
+ Presentational: drive `.kds-fab--hidden` from useHideOnScroll for scroll-away.
5951
+ ======================================== */
5952
+
5953
+ .kds-fab {
5954
+ display: inline-flex;
5955
+ align-items: center;
5956
+ justify-content: center;
5957
+ width: var(--kds-spacing-5);
5958
+ height: var(--kds-spacing-5);
5959
+ padding: 0;
5960
+ border: none;
5961
+ border-radius: var(--kds-radius-full);
5962
+ background: var(--kds-color-background-paper);
5963
+ color: var(--kds-color-text-primary);
5964
+ box-shadow: var(--kds-shadow-elevated);
5965
+ cursor: pointer;
5966
+ z-index: 100;
5967
+ /* Neutralize native button rendering so the pressed state doesn't flash a square. */
5968
+ -webkit-appearance: none;
5969
+ appearance: none;
5970
+ -webkit-tap-highlight-color: transparent;
5971
+ transition: opacity var(--kds-transition-short) ease, transform var(--kds-transition-short) ease,
5972
+ background-color var(--kds-transition-shorter) ease;
5973
+ }
5974
+
5975
+ /* Keep the circle in EVERY interaction state. BeerCSS forces
5976
+ `border-radius: .5rem !important` on button:active (specificity 0,3,0), so
5977
+ plain specificity is not enough — match it with a doubled class AND
5978
+ !important; this file loads after beer.css, so these win. */
5979
+ button.kds-fab.kds-fab,
5980
+ button.kds-fab.kds-fab:hover,
5981
+ button.kds-fab.kds-fab:active,
5982
+ button.kds-fab.kds-fab.active,
5983
+ button.kds-fab.kds-fab:focus,
5984
+ button.kds-fab.kds-fab:focus-visible {
5985
+ border-radius: var(--kds-radius-full) !important;
5986
+ background: var(--kds-color-background-paper);
5987
+ }
5988
+
5989
+ button.kds-fab:hover:not(:disabled) {
5990
+ background: var(--kds-color-background-muted);
5991
+ }
5992
+
5993
+ /* Subtle press feedback that preserves the round shape. */
5994
+ button.kds-fab:active:not(:disabled) {
5995
+ transform: translateY(var(--kds-spacing-0-25));
5996
+ }
5997
+
5998
+
5999
+
6000
+ .kds-fab > i.material-symbols-outlined {
6001
+ font-size: var(--kds-spacing-button-icon-size);
6002
+ line-height: 1;
6003
+ }
6004
+
6005
+ /* Pinned corners — fixed to the viewport (stays visible on scroll-up, iframe-friendly).
6006
+ Horizontally the top-right FAB hugs the right edge of the centered content column set via
6007
+ `--kds-fab-column-width` (default 100% → viewport edge). The consumer sets that var to its
6008
+ widget width so on desktop the FAB overlaps the header's top-right corner instead of drifting
6009
+ to the far viewport edge. `max(...)` keeps at least a token inset on narrow (mobile) viewports. */
6010
+ .kds-fab--top-right,
6011
+ .kds-fab--top-left,
6012
+ .kds-fab--bottom-right,
6013
+ .kds-fab--bottom-left {
6014
+ position: fixed;
6015
+ }
6016
+
6017
+ .kds-fab--top-right {
6018
+ top: var(--kds-spacing-2);
6019
+ right: max(var(--kds-spacing-2), calc((100% - var(--kds-fab-column-width, 100%)) / 2 + var(--kds-spacing-2)));
6020
+ }
6021
+
6022
+ .kds-fab--top-left {
6023
+ top: var(--kds-spacing-2);
6024
+ left: max(var(--kds-spacing-2), calc((100% - var(--kds-fab-column-width, 100%)) / 2 + var(--kds-spacing-2)));
6025
+ }
6026
+
6027
+ .kds-fab--bottom-right {
6028
+ bottom: var(--kds-spacing-2);
6029
+ right: max(var(--kds-spacing-2), calc((100% - var(--kds-fab-column-width, 100%)) / 2 + var(--kds-spacing-2)));
6030
+ }
6031
+
6032
+ .kds-fab--bottom-left {
6033
+ bottom: var(--kds-spacing-2);
6034
+ left: max(var(--kds-spacing-2), calc((100% - var(--kds-fab-column-width, 100%)) / 2 + var(--kds-spacing-2)));
6035
+ }
6036
+
6037
+ /* Desktop: nudge the top-right FAB up so it sits partially over the header's top edge. */
6038
+ @media (min-width: 768px) {
6039
+ .kds-fab--top-right {
6040
+ top: var(--kds-spacing-1);
6041
+ }
6042
+ }
6043
+
6044
+ /* Corner-overlap: mount the FAB centered OVER the top-right corner of the content column
6045
+ (`--kds-fab-column-width`), overlapping outward — vs `--top-right` which insets inside the
6046
+ column. Mobile keeps a small inset from the viewport via the `--kds-fab-inset` token. */
6047
+ .kds-fab--corner {
6048
+ --kds-fab-inset: 5px;
6049
+ position: fixed;
6050
+ top: var(--kds-fab-inset);
6051
+ right: var(--kds-fab-inset);
6052
+ }
6053
+
6054
+ @media (min-width: 768px) {
6055
+ .kds-fab--corner {
6056
+ right: max(
6057
+ var(--kds-fab-inset),
6058
+ calc((100% - var(--kds-fab-column-width, 100%)) / 2 - var(--kds-spacing-5) / 2)
6059
+ );
6060
+ }
6061
+ }
6062
+
6063
+ /* Hidden (scroll-away) state — fade + slide toward the nearest edge */
6064
+ .kds-fab--hidden {
6065
+ opacity: 0;
6066
+ transform: translateY(calc(-1 * var(--kds-spacing-1))) scale(0.9);
6067
+ pointer-events: none;
6068
+ }
6069
+
6070
+ .kds-fab--bottom-right.kds-fab--hidden,
6071
+ .kds-fab--bottom-left.kds-fab--hidden {
6072
+ transform: translateY(var(--kds-spacing-1)) scale(0.9);
6073
+ }
6074
+
6075
+ @media (prefers-reduced-motion: reduce) {
6076
+ .kds-fab {
6077
+ transition: opacity var(--kds-transition-short) ease;
6078
+ }
6079
+
6080
+ .kds-fab--hidden {
6081
+ transform: none;
6082
+ }
6083
+ }
6084
+
4912
6085
  /* ========================================
4913
6086
  09 - SUCCESS MARK (.kds-success-mark)
4914
6087
  Large success icon for completion screens
@@ -4988,22 +6161,22 @@ dialog#surveyModal button.circle {
4988
6161
  padding: var(--kds-spacing-1) 0;
4989
6162
  }
4990
6163
 
4991
- /* Desktop: footer inside card hidden; Mobile: footer outside card hidden */
6164
+ /* Footer SIEMPRE fuera del card body (desktop y mobile): el footer interno
6165
+ (variant="inside") queda oculto en todos los breakpoints; se muestra el
6166
+ externo, hermano directo del card bajo `.kds-screen`. */
4992
6167
  .kds-card-elevated > .kds-secure-footer {
4993
6168
  display: none;
4994
6169
  }
4995
6170
 
4996
- @media (max-width: 767px) {
4997
- .kds-card-elevated > .kds-secure-footer {
4998
- display: flex;
4999
- }
5000
- .kds-screen > .kds-secure-footer {
5001
- display: none;
5002
- }
6171
+ .kds-screen > form {
6172
+ margin-block-start: 0 !important;
6173
+ }
5003
6174
 
5004
- .kds-screen > form {
5005
- margin-block-start: 0 !important;
5006
- }
6175
+ /* Footer externo adyacente a la card: cancela el gap del .kds-screen para que
6176
+ quede pegado debajo de la card y no flotando lejos. Las dos cards
6177
+ (header/body) sí conservan su separación. */
6178
+ .kds-screen > .kds-secure-footer {
6179
+ margin-top: calc(-1 * var(--kds-spacing-3));
5007
6180
  }
5008
6181
 
5009
6182
  .kds-secure-footer-lock {
@@ -5025,6 +6198,32 @@ dialog#surveyModal button.circle {
5025
6198
  display: block;
5026
6199
  object-fit: contain;
5027
6200
  overflow: visible;
6201
+ /* Corrección óptica: la masa visible del wordmark (el cuerpo de "Khipu") queda sobre el
6202
+ centro geométrico de su viewBox (45x15) porque el descendente de la "p" ocupa la parte
6203
+ baja. Al centrar por caja (align-items:center) el logo se ve ~1px alto respecto al texto,
6204
+ así que se baja 0.75px para alinear el centro óptico. Alto fijo (11px) → nudge consistente. */
6205
+ position: relative;
6206
+ top: 0.75px;
6207
+ }
6208
+
6209
+ /* Divisor entre el logo de Khipu y el del PSP ("Khipu | klap") */
6210
+ .kds-secure-footer-sep {
6211
+ width: 1px;
6212
+ height: 0.85em;
6213
+ background: currentColor;
6214
+ opacity: 0.35;
6215
+ flex: 0 0 auto;
6216
+ }
6217
+
6218
+ /* Logo del PSP (proveedor de pagos): lo provee el consumidor, lo alineamos al mismo
6219
+ alto que el mark de Khipu. Sirve para <img> o un elemento con .kds-psp-mark. */
6220
+ .kds-secure-footer img,
6221
+ .kds-secure-footer .kds-psp-mark {
6222
+ height: 11px;
6223
+ width: auto;
6224
+ flex: 0 0 auto;
6225
+ display: block;
6226
+ object-fit: contain;
5028
6227
  }
5029
6228
 
5030
6229
  .kds-secure-footer-code {
@@ -5040,6 +6239,11 @@ dialog#surveyModal button.circle {
5040
6239
  background: none;
5041
6240
  border: 0;
5042
6241
  padding: 0;
6242
+ /* Reset del bare `button { height: 2.5rem }` de BeerCSS (scoped en .kds-theme-root):
6243
+ sin esto el toggle quedaba en una caja de 40px con el texto centrado → espacio
6244
+ irregular arriba (pegado al resumen) y abajo (~26px hasta el panel). Con height
6245
+ auto el botón ajusta a su contenido y el ritmo lo gobiernan los márgenes. */
6246
+ height: auto;
5043
6247
  color: var(--kds-color-primary-main);
5044
6248
  font-weight: var(--kds-font-weight-medium);
5045
6249
  font-size: var(--kds-font-size-sm);
@@ -5049,16 +6253,36 @@ dialog#surveyModal button.circle {
5049
6253
  gap: 0;
5050
6254
  }
5051
6255
 
5052
- .kds-expand-toggle:hover {
6256
+ .kds-expand-toggle:hover,
6257
+ .kds-expand-toggle:focus,
6258
+ .kds-expand-toggle:active {
5053
6259
  background: transparent;
6260
+ outline: none;
6261
+ box-shadow: none;
5054
6262
  }
5055
6263
 
5056
- .kds-expand-toggle:hover span {
6264
+ .kds-expand-toggle:hover span,
6265
+ .kds-expand-toggle:focus span,
6266
+ .kds-expand-toggle:active span {
5057
6267
  text-decoration: underline;
5058
6268
  }
5059
6269
 
5060
6270
  .kds-expand-toggle i {
5061
6271
  font-size: var(--kds-font-size-base);
6272
+ /* BeerCSS estiliza el `i` bare como caja flex de 30px (height/width/min: 30px), que
6273
+ inflaba el toggle y dejaba aire vertical de más alrededor del label. La achicamos a
6274
+ 1.25em MANTENIENDO el centrado flex de BeerCSS (display:flex/align/justify) — así el
6275
+ caret queda compacto Y ópticamente centrado con el texto (no usar height:auto ni
6276
+ line-height:1: descentran el glifo). */
6277
+ width: 1.25em;
6278
+ height: 1.25em;
6279
+ min-width: 0;
6280
+ min-height: 0;
6281
+ /* Correccion optica: la tinta de expand_more vive en la zona alta del em, asi que
6282
+ centrado geometrico contra el label (con ascendentes) se percibe montado; este
6283
+ nudge lo baja al centro de las minusculas. No usar transform: lo pisa el rotate. */
6284
+ position: relative;
6285
+ top: 0.09em;
5062
6286
  transition: transform var(--kds-transition-shorter, 0.2s);
5063
6287
  }
5064
6288
 
@@ -5078,7 +6302,10 @@ dialog#surveyModal button.circle {
5078
6302
  }
5079
6303
 
5080
6304
  .kds-expand-panel.open {
5081
- max-height: 800px;
6305
+ /* Fallback cap for no-JS consumers. With JS (React useExpandToggle / vanilla
6306
+ initExpandToggle) the panel's inline max-height is set to its exact scrollHeight,
6307
+ which overrides this and prevents clipping regardless of content length. */
6308
+ max-height: 2000px;
5082
6309
  margin-top: 0;
5083
6310
  }
5084
6311
 
@@ -5196,13 +6423,27 @@ dialog#surveyModal button.circle {
5196
6423
 
5197
6424
  .kds-status-block {
5198
6425
  text-align: center;
5199
- padding: var(--kds-spacing-6) 0;
6426
+ /* Padding vertical estándar: spacing-2 (16px), el mismo rhythm inter-elementos
6427
+ que usan kds-btn-stack y kds-hr-dashed. NO usar spacing-6 (48px): genera
6428
+ demasiado espacio cuando el bloque se compone con header/divider alrededor. */
6429
+ padding: var(--kds-spacing-2) 0;
6430
+ }
6431
+
6432
+ /* En el borde compartido con el card el rhythm lo aporta el padding del propio card:
6433
+ como primer/último hijo directo el padding del bloque no debe sumarse al del padre. */
6434
+ .kds-card-elevated > .kds-status-block:first-child {
6435
+ padding-top: 0;
6436
+ }
6437
+
6438
+ .kds-card-elevated > .kds-status-block:last-child {
6439
+ padding-bottom: 0;
5200
6440
  }
5201
6441
 
5202
6442
  .kds-status-block-icon {
5203
6443
  width: var(--kds-status-icon-size);
5204
6444
  height: var(--kds-status-icon-size);
5205
- margin: 0 auto var(--kds-spacing-3);
6445
+ /* spacing-1 (8px) icono→título: elementos relacionados dentro del bloque. */
6446
+ margin: 0 auto var(--kds-spacing-1);
5206
6447
  border-radius: var(--kds-radius-full);
5207
6448
  display: grid;
5208
6449
  place-items: center;
@@ -5215,15 +6456,22 @@ dialog#surveyModal button.circle {
5215
6456
 
5216
6457
  .kds-status-block-title {
5217
6458
  font-size: var(--kds-font-size-xl);
5218
- font-weight: var(--kds-font-weight-bold);
6459
+ font-weight: var(--kds-font-weight-semibold);
5219
6460
  color: var(--kds-color-text-primary);
5220
6461
  margin: 0 0 var(--kds-spacing-1);
6462
+ /* El reset global :where(h2) usa estas vars con !important; así se overridea. */
6463
+ --kds-typography-h2-margin-block-end: var(--kds-spacing-1);
5221
6464
  }
5222
6465
 
5223
6466
  .kds-status-block-description {
5224
6467
  font-size: var(--kds-font-size-sm);
5225
- color: var(--kds-color-text-secondary);
6468
+ /* Mismo color que el título: título y subtítulo parejos en resultados. */
6469
+ color: var(--kds-color-text-primary);
5226
6470
  margin: 0;
6471
+ /* !important: anula el auto-espaciado de hermanos de BeerCSS
6472
+ (margin-block-start: 1rem, especificidad 0,5,1 imposible de igualar).
6473
+ La separación título→descripción la da el margin-bottom del título. */
6474
+ margin-top: 0 !important;
5227
6475
  }
5228
6476
 
5229
6477
  /* Variant: success */
@@ -5233,11 +6481,11 @@ dialog#surveyModal button.circle {
5233
6481
  color: var(--kds-color-success-main);
5234
6482
  }
5235
6483
 
5236
- /* Variant: pending (animated spinner) */
6484
+ /* Variant: pending (animated blue spinner, sin icono interno) */
5237
6485
  .kds-status-block[data-status="pending"] .kds-status-block-icon {
5238
6486
  background: transparent;
5239
6487
  border: 3px solid var(--kds-color-divider);
5240
- border-top-color: var(--kds-color-primary-main);
6488
+ border-top-color: var(--kds-color-info-main);
5241
6489
  animation: kds-spin 1s linear infinite;
5242
6490
  }
5243
6491
 
@@ -5255,7 +6503,9 @@ dialog#surveyModal button.circle {
5255
6503
  color: var(--kds-color-error-main);
5256
6504
  }
5257
6505
 
5258
- /* Variant: info */
6506
+ /* Variant: info — usar SIEMPRE con icon "info_i" (i minúscula sin glyph circular)
6507
+ para que solo se vea nuestro círculo decorativo. Iconos como "info" tienen
6508
+ su propio círculo built-in → causarían doble círculo. */
5259
6509
  .kds-status-block[data-status="info"] .kds-status-block-icon {
5260
6510
  background: var(--kds-color-info-soft);
5261
6511
  border: var(--kds-border-width-md) solid var(--kds-color-info-main);
@@ -5267,7 +6517,7 @@ dialog#surveyModal button.circle {
5267
6517
  text-align: left;
5268
6518
  display: flex;
5269
6519
  align-items: center;
5270
- gap: var(--kds-spacing-3);
6520
+ gap: var(--kds-spacing-2);
5271
6521
  padding: var(--kds-spacing-1) 0;
5272
6522
  }
5273
6523
 
@@ -5309,6 +6559,9 @@ dialog#surveyModal button.circle {
5309
6559
  .kds-bottom-sheet {
5310
6560
  width: 100%;
5311
6561
  max-width: var(--kds-bottom-sheet-max-width);
6562
+ max-height: 90dvh;
6563
+ display: flex;
6564
+ flex-direction: column;
5312
6565
  background: var(--kds-color-background-paper);
5313
6566
  border-radius: var(--kds-radius-2xl) var(--kds-radius-2xl) 0 0;
5314
6567
  padding: var(--kds-spacing-3-5) var(--kds-spacing-3) var(--kds-spacing-3);
@@ -5329,6 +6582,42 @@ dialog#surveyModal button.circle {
5329
6582
  background: var(--kds-color-divider);
5330
6583
  }
5331
6584
 
6585
+ /* Close button — top-right discreto, NO usa kds-btn (rompía el flex layout) */
6586
+ .kds-bottom-sheet-close {
6587
+ position: absolute;
6588
+ top: var(--kds-spacing-1);
6589
+ right: var(--kds-spacing-1);
6590
+ width: 32px;
6591
+ height: 32px;
6592
+ display: inline-flex;
6593
+ align-items: center;
6594
+ justify-content: center;
6595
+ padding: 0;
6596
+ background: transparent;
6597
+ border: 0;
6598
+ border-radius: 50%;
6599
+ color: var(--kds-color-text-secondary);
6600
+ cursor: pointer;
6601
+ transition: background-color 0.15s ease;
6602
+ }
6603
+
6604
+ .kds-bottom-sheet-close:hover {
6605
+ background: rgba(0, 0, 0, 0.06);
6606
+ }
6607
+
6608
+ .kds-bottom-sheet-close i {
6609
+ font-size: 20px;
6610
+ line-height: 1;
6611
+ }
6612
+
6613
+ /* Body container — separa el content del title/actions */
6614
+ .kds-bottom-sheet-body {
6615
+ text-align: left;
6616
+ margin-top: var(--kds-spacing-1);
6617
+ overflow-y: auto;
6618
+ min-height: 0;
6619
+ }
6620
+
5332
6621
  .kds-bottom-sheet-icon {
5333
6622
  font-size: var(--kds-font-size-4xl);
5334
6623
  }
@@ -5375,6 +6664,19 @@ dialog#surveyModal button.circle {
5375
6664
  to { opacity: 1; }
5376
6665
  }
5377
6666
 
6667
+ /* Botón con llenado progresivo (feedback visual de auto-cierre).
6668
+ Duración parametrizable con --kds-fill-duration (default 12s). */
6669
+ .kds-btn-fill-progress {
6670
+ background-image: linear-gradient(to right, var(--kds-color-primary-dark), var(--kds-color-primary-dark));
6671
+ background-repeat: no-repeat;
6672
+ background-size: 0% 100%;
6673
+ animation: kds-btn-fill var(--kds-fill-duration, 12s) linear forwards;
6674
+ }
6675
+
6676
+ @keyframes kds-btn-fill {
6677
+ to { background-size: 100% 100%; }
6678
+ }
6679
+
5378
6680
  @keyframes kds-rise {
5379
6681
  from { transform: translateY(var(--kds-spacing-2-5)); opacity: 0.4; }
5380
6682
  to { transform: none; opacity: 1; }
@@ -5476,6 +6778,65 @@ dialog#surveyModal button.circle {
5476
6778
  }
5477
6779
 
5478
6780
 
6781
+ /* ========================================
6782
+ 17 - HIGHLIGHTED FIELD (.kds-field-highlight)
6783
+ Calls out an optional or conditional block of
6784
+ fields inside a form. The colour lives in a
6785
+ header band, never behind the fields: BeerCSS
6786
+ floats the label ONTO the field outline (it cuts
6787
+ the input with clip-path and redraws that
6788
+ stretch of border in label::after), so anything
6789
+ painted behind a field shows through the notch,
6790
+ right under the label. Keeping the fields on the
6791
+ page surface means they render exactly as they
6792
+ do anywhere else in the form, with no override.
6793
+ ======================================== */
6794
+
6795
+ .kds-field-highlight {
6796
+ padding-inline: var(--kds-field-highlight-padding);
6797
+ padding-block-end: var(--kds-field-highlight-padding);
6798
+ border: var(--kds-border-width-sm) dashed var(--kds-field-highlight-border);
6799
+ border-radius: var(--kds-field-highlight-radius);
6800
+ }
6801
+
6802
+ /* Optional — omit it and the fields sit alone in the box. Breaks out to the box
6803
+ edges so it reads as a header band, then takes the box's own inset back as
6804
+ padding: the eyebrow ends up flush with the fields below, and the band's
6805
+ horizontal padding matches the fields' own. */
6806
+ .kds-field-highlight-header {
6807
+ display: flex;
6808
+ align-items: center;
6809
+ gap: var(--kds-spacing-1);
6810
+ margin-inline: calc(-1 * var(--kds-field-highlight-padding));
6811
+ margin-block-end: var(--kds-field-highlight-padding);
6812
+ padding-block: var(--kds-spacing-1-25);
6813
+ padding-inline: var(--kds-field-highlight-padding);
6814
+ background: var(--kds-field-highlight-bg);
6815
+ border-start-start-radius: calc(
6816
+ var(--kds-field-highlight-radius) - var(--kds-border-width-sm)
6817
+ );
6818
+ border-start-end-radius: calc(
6819
+ var(--kds-field-highlight-radius) - var(--kds-border-width-sm)
6820
+ );
6821
+ }
6822
+
6823
+ .kds-field-highlight-eyebrow {
6824
+ font-family: var(--kds-font-family-primary);
6825
+ font-size: var(--kds-font-size-xs);
6826
+ font-weight: var(--kds-font-weight-semibold);
6827
+ letter-spacing: var(--kds-letter-spacing-widest);
6828
+ line-height: 1.4;
6829
+ text-transform: uppercase;
6830
+ color: var(--kds-field-highlight-label);
6831
+ }
6832
+
6833
+ /* The header already supplies the gap — the first field must not add its own */
6834
+ .kds-field-highlight > .kds-field-highlight-header + .kds-field-group,
6835
+ .kds-field-highlight > .kds-field-group:first-child {
6836
+ margin-block-start: 0;
6837
+ }
6838
+
6839
+
5479
6840
  /* ========================================
5480
6841
  PAYMENT FLOW — DOMAIN COMPONENTS
5481
6842
  Invoice header, KV grid, dividers,
@@ -5562,6 +6923,30 @@ dialog#surveyModal button.circle {
5562
6923
  /* No max-height — clip-path on parent handles visual collapse without layout changes */
5563
6924
  .kds-invoice-sticky .kds-invoice-collapsible {
5564
6925
  opacity: calc(1 - var(--collapse-progress) * 1.5);
6926
+
6927
+ /* Scroll interno discreto (mobile): cuando el detalle abierto excede el viewport, el
6928
+ collapsible scrollea internamente (monto/merchant quedan fijos arriba) para poder leer
6929
+ todo el detalle. Al tocar el fondo, `overscroll-behavior: auto` ENCADENA el gesto al
6930
+ scroll del body → dispara useStickyInvoiceCollapse → colapsa el header y aparece el form
6931
+ (flujo natural). Se auto-desactiva con el detalle cerrado (contenido más corto que el
6932
+ max-height → sin scroll ni efecto visual). */
6933
+ max-height: calc(100vh - var(--kds-spacing-12) - var(--kds-spacing-4));
6934
+ max-height: calc(100dvh - var(--kds-spacing-12) - var(--kds-spacing-4));
6935
+ overflow-y: auto;
6936
+ overflow-x: hidden;
6937
+ overscroll-behavior-y: auto;
6938
+ scrollbar-width: thin;
6939
+ scrollbar-color: var(--kds-color-gray-300) transparent;
6940
+ }
6941
+ .kds-invoice-sticky .kds-invoice-collapsible::-webkit-scrollbar {
6942
+ width: 4px;
6943
+ }
6944
+ .kds-invoice-sticky .kds-invoice-collapsible::-webkit-scrollbar-thumb {
6945
+ background: var(--kds-color-gray-300);
6946
+ border-radius: var(--kds-radius-full);
6947
+ }
6948
+ .kds-invoice-sticky .kds-invoice-collapsible::-webkit-scrollbar-track {
6949
+ background: transparent;
5565
6950
  }
5566
6951
 
5567
6952
  /* Amount: 30px → 24px (progressive) */
@@ -5633,6 +7018,14 @@ dialog#surveyModal button.circle {
5633
7018
  margin-top: var(--kds-spacing-1);
5634
7019
  }
5635
7020
 
7021
+ /* Ritmo uniforme alrededor del toggle: spacing-2 arriba (resumen↔"Ver detalle")
7022
+ iguala el padding-top spacing-2 que la .kds-detail-list da debajo
7023
+ ("Ver detalle"↔primer label del panel). Antes el alto fijo del bare button
7024
+ (40px) hacía que el espacio de arriba y de abajo fueran distintos. */
7025
+ .kds-invoice-collapsible > .kds-expand-toggle {
7026
+ margin-top: var(--kds-spacing-2);
7027
+ }
7028
+
5636
7029
  /* -- Invoice Summary -- */
5637
7030
  .kds-invoice-summary {
5638
7031
  display: flex;
@@ -5656,6 +7049,22 @@ div.kds-invoice-header,
5656
7049
  padding: 0;
5657
7050
  border-radius: 0;
5658
7051
  align-content: initial;
7052
+ /* Override BeerCSS `header { min-height: ... }` — el header debe ajustarse a su
7053
+ contenido (sigue el alto del merchant tile: 64px→50px al colapsar). Sin esto
7054
+ quedaba un min-height fijo de 64px → hueco muerto debajo al colapsar en mobile. */
7055
+ min-height: 0;
7056
+ }
7057
+
7058
+ /* Mobile: center-align el header (merchant tile vs bloque monto+código) tanto
7059
+ expandido como colapsado. Al quitar el logo del header, el bloque de texto quedaba
7060
+ más bajo que el merchant tile y con `flex-start` dejaba hueco abajo; centrado los
7061
+ alinea. CSS-only (no depende de la clase .is-collapsed, que el JS de collapse no setea). */
7062
+ @media (max-width: 767px) {
7063
+ header.kds-invoice-header,
7064
+ div.kds-invoice-header,
7065
+ .kds-invoice-header {
7066
+ align-items: center;
7067
+ }
5659
7068
  }
5660
7069
 
5661
7070
  /* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
@@ -5677,6 +7086,16 @@ div.kds-invoice-header,
5677
7086
  color: var(--kds-color-success-main);
5678
7087
  }
5679
7088
 
7089
+ /* Sufijo inline del monto, ej. "$25.000 por cargo" */
7090
+ .kds-invoice-amount small {
7091
+ /* Spec kw-2: 14px / 700 / ls 0.4 — la altura de linea la da el propio monto (inline). */
7092
+ font-size: var(--kds-font-size-sm);
7093
+ font-weight: var(--kds-font-weight-bold);
7094
+ letter-spacing: var(--kds-letter-spacing-wide);
7095
+ color: var(--kds-color-text-secondary);
7096
+ margin-left: var(--kds-spacing-0-5);
7097
+ }
7098
+
5680
7099
  .kds-invoice-code {
5681
7100
  font-family: var(--kds-font-family-mono);
5682
7101
  font-size: var(--kds-font-size-xs);
@@ -5684,15 +7103,19 @@ div.kds-invoice-header,
5684
7103
  letter-spacing: var(--kds-letter-spacing-wider);
5685
7104
  font-variant-numeric: tabular-nums;
5686
7105
  color: var(--kds-color-gray-400);
5687
- text-transform: none;
7106
+ text-transform: uppercase;
5688
7107
  margin: 0;
5689
7108
  margin-block: unset;
5690
- margin: var(--kds-spacing-1) 0;
7109
+ display: flex;
7110
+ gap: var(--kds-spacing-1-5);
5691
7111
  }
5692
7112
 
5693
7113
  .kds-invoice-code-value {
7114
+ color: var(--kds-color-gray-400);
7115
+ }
7116
+
7117
+ .kds-invoice-code-value--lowercase {
5694
7118
  text-transform: lowercase;
5695
- color: var(--kds-text-primary);
5696
7119
  }
5697
7120
 
5698
7121
  .kds-invoice-merchant {
@@ -5704,6 +7127,7 @@ div.kds-invoice-header,
5704
7127
  place-items: center;
5705
7128
  color: #fff;
5706
7129
  flex-shrink: 0;
7130
+ overflow: hidden;
5707
7131
  }
5708
7132
 
5709
7133
  .kds-invoice-merchant i {
@@ -5716,6 +7140,12 @@ div.kds-invoice-header,
5716
7140
  color: var(--kds-color-text-primary);
5717
7141
  }
5718
7142
 
7143
+ /* Neutro oscuro para logos claros (detección de luminancia — KTUF-204). */
7144
+ .kds-invoice-merchant-neutral.dark {
7145
+ background: var(--kds-color-gray-800);
7146
+ border-color: var(--kds-color-gray-700);
7147
+ }
7148
+
5719
7149
  .kds-invoice-merchant.initials {
5720
7150
  font-weight: 700;
5721
7151
  font-size: 11px;
@@ -5723,27 +7153,42 @@ div.kds-invoice-header,
5723
7153
  }
5724
7154
 
5725
7155
  .kds-invoice-merchant img {
7156
+ /* `contain` sobre el fondo neutro: el logo se muestra completo y las
7157
+ transparencias no quedan sobre el color de marca (KTUF-204). */
5726
7158
  width: 100%;
5727
7159
  height: 100%;
5728
- object-fit: cover;
5729
- border-radius: var(--kds-radius-md);
7160
+ object-fit: contain;
7161
+ padding: var(--kds-spacing-0-5);
5730
7162
  }
5731
7163
 
5732
7164
  /* -- Card Title -- */
5733
7165
  .kds-card-title {
5734
- font-weight: 700;
7166
+ font-weight: var(--kds-font-weight-semibold);
5735
7167
  font-size: var(--kds-font-size-base);
5736
7168
  line-height: 1.5;
5737
7169
  letter-spacing: -0.31px;
5738
7170
  color: var(--kds-color-text-primary);
5739
- margin-bottom: var(--kds-spacing-2) !important;
7171
+ /* sin !important: no hay regla de margin-bottom para h1 en BeerCSS que competir, y así un
7172
+ consumidor puede anularlo (p.ej. FormTitle dentro de un Stack que ya da el espacio). */
7173
+ margin-bottom: var(--kds-spacing-2);
7174
+ }
7175
+
7176
+ /* Opt-in size modifiers (additive — do NOT change default 16/600) */
7177
+ .kds-card-title--lg {
7178
+ font-size: var(--kds-font-size-xl); /* 20px */
7179
+ font-weight: var(--kds-font-weight-semibold);
7180
+ }
7181
+
7182
+ .kds-card-title--xl {
7183
+ font-size: var(--kds-font-size-2xl); /* 24px */
7184
+ font-weight: var(--kds-font-weight-semibold);
5740
7185
  }
5741
7186
 
5742
7187
  /* -- Key-Value Grid -- */
5743
7188
  .kds-kv {
5744
7189
  display: grid;
5745
7190
  grid-template-columns: auto 1fr;
5746
- column-gap: var(--kds-spacing-1-5);
7191
+ column-gap: var(--kds-spacing-1);
5747
7192
  align-items: baseline;
5748
7193
  }
5749
7194
 
@@ -5752,7 +7197,7 @@ div.kds-invoice-header,
5752
7197
  line-height: var(--kds-line-height-relaxed);
5753
7198
  letter-spacing: normal;
5754
7199
  color: var(--kds-color-text-secondary);
5755
- text-transform: none;
7200
+ text-transform: uppercase;
5756
7201
  margin: 0;
5757
7202
  }
5758
7203
 
@@ -5769,6 +7214,31 @@ div.kds-invoice-header,
5769
7214
  text-overflow: ellipsis;
5770
7215
  }
5771
7216
 
7217
+ /* Dark: these primary-content texts use absolute gray-800/900 (near-black in
7218
+ both modes) — switch to the adaptive text token so they read on dark cards.
7219
+ Covers the invoice amount ($X.XXX), kv values (PAGO A / ASUNTO) and the
7220
+ other gray-800 body texts. */
7221
+ [data-theme="dark"] .kds-invoice-amount,
7222
+ [data-theme="dark"] .kds-kv dd,
7223
+ [data-theme="dark"] .kds-text-value,
7224
+ [data-theme="dark"] .kds-share-copy {
7225
+ color: var(--kds-color-text-primary);
7226
+ }
7227
+
7228
+ /* -- Summary panel --
7229
+ Recuadro de datos del pago en pantallas de resultado: contenido en columna
7230
+ (gap spacing-2, típicamente pares kv) dentro de un borde sutil. */
7231
+ .kds-summary-panel {
7232
+ display: flex;
7233
+ flex-direction: column;
7234
+ gap: var(--kds-spacing-2);
7235
+ width: 100%;
7236
+ padding: var(--kds-spacing-2);
7237
+ border: var(--kds-border-width-sm) solid var(--kds-color-border-default);
7238
+ border-radius: var(--kds-radius-card);
7239
+ text-align: left;
7240
+ }
7241
+
5772
7242
  /* -- Dividers -- */
5773
7243
  .kds-hr {
5774
7244
  height: 1px;
@@ -5788,16 +7258,28 @@ div.kds-invoice-header,
5788
7258
  .kds-detail-list {
5789
7259
  display: flex;
5790
7260
  flex-direction: column;
5791
- gap: var(--kds-spacing-1-5);
7261
+ /* spacing-2 entre grupos del detalle (separación estándar entre piezas de info
7262
+ distintas, ej. "Emisor cobro" vs "Descripción"). El padding-top da la misma
7263
+ separación spacing-2 arriba del primer grupo (Asunto↔Emisor cobro). */
7264
+ gap: var(--kds-spacing-2);
5792
7265
  margin: 0;
5793
- padding: 0 0 var(--kds-spacing-2);
7266
+ padding: var(--kds-spacing-2) 0 0;
5794
7267
  }
5795
7268
 
5796
- .kds-detail-group {
5797
- margin-bottom: var(--kds-spacing-1-5);
7269
+ @media (max-width: 767px) {
7270
+ .kds-detail-list {
7271
+ padding-bottom: var(--kds-spacing-2);
7272
+ }
5798
7273
  }
5799
7274
 
5800
- .kds-detail-group:last-child {
7275
+ .kds-detail-group {
7276
+ /* El espacio ENTRE grupos lo da el `gap` de .kds-detail-list (spacing-2).
7277
+ Dentro del grupo, label↔value llevan un gap chico (spacing-0-5) para un
7278
+ ritmo parejo: antes el dt iba pegado al dd (0px) y se veía desigual frente
7279
+ a los 16px entre los demás elementos del panel. */
7280
+ display: flex;
7281
+ flex-direction: column;
7282
+ gap: var(--kds-spacing-0-5);
5801
7283
  margin-bottom: 0;
5802
7284
  }
5803
7285
 
@@ -5805,7 +7287,8 @@ div.kds-invoice-header,
5805
7287
  font-size: var(--kds-font-size-xs);
5806
7288
  letter-spacing: var(--kds-letter-spacing-wide);
5807
7289
  color: var(--kds-color-text-hint);
5808
- text-transform: none;
7290
+ text-transform: uppercase;
7291
+ margin: 0;
5809
7292
  }
5810
7293
 
5811
7294
  .kds-detail-group dd {
@@ -5815,6 +7298,19 @@ div.kds-invoice-header,
5815
7298
  color: var(--kds-color-text-primary);
5816
7299
  }
5817
7300
 
7301
+ /* Imagen adjunta del cobro dentro del panel de detalle (ej. comprobante/producto).
7302
+ Reemplaza los inline styles del antiguo modal MerchantInfo: ancho contenido, borde
7303
+ y radio del DS. Va como un grupo más de la .kds-detail-list (hereda su gap). */
7304
+ .kds-detail-image {
7305
+ display: block;
7306
+ max-width: 100%;
7307
+ width: 160px;
7308
+ height: auto;
7309
+ object-fit: contain;
7310
+ border-radius: var(--kds-radius-md);
7311
+ border: 1px solid var(--kds-color-border);
7312
+ }
7313
+
5818
7314
  /* -- Amount Summary Row -- */
5819
7315
  .kds-amount-row {
5820
7316
  display: flex;
@@ -5874,16 +7370,16 @@ div.kds-invoice-header,
5874
7370
  font-size: var(--kds-font-size-sm);
5875
7371
  }
5876
7372
 
5877
- .kds-recap-list .k {
7373
+ .kds-recap-list .kds-key {
5878
7374
  color: var(--kds-color-text-secondary);
5879
7375
  }
5880
7376
 
5881
- .kds-recap-list .v {
7377
+ .kds-recap-list .kds-value {
5882
7378
  color: var(--kds-color-text-primary);
5883
7379
  font-weight: 500;
5884
7380
  }
5885
7381
 
5886
- .kds-recap-list .v.placeholder {
7382
+ .kds-recap-list .kds-value.placeholder {
5887
7383
  color: var(--kds-color-text-hint);
5888
7384
  }
5889
7385
 
@@ -5910,6 +7406,68 @@ a.kds-btn-success:disabled {
5910
7406
  box-shadow: none;
5911
7407
  }
5912
7408
 
7409
+ /* -- Button Warning (amber CTA) -- */
7410
+ button.kds-btn-warning,
7411
+ a.kds-btn-warning {
7412
+ background: var(--kds-color-warning-main);
7413
+ color: var(--kds-color-warning-contrast);
7414
+ border: none;
7415
+ }
7416
+
7417
+ button.kds-btn-warning:hover:not(:disabled),
7418
+ a.kds-btn-warning:hover:not(:disabled) {
7419
+ background: var(--kds-color-warning-dark);
7420
+ }
7421
+
7422
+ button.kds-btn-warning:active:not(:disabled),
7423
+ button.kds-btn-warning:focus-visible:not(:disabled),
7424
+ a.kds-btn-warning:active:not(:disabled),
7425
+ a.kds-btn-warning:focus-visible:not(:disabled) {
7426
+ background: var(--kds-color-warning-dark);
7427
+ }
7428
+
7429
+ button.kds-btn-warning:disabled,
7430
+ a.kds-btn-warning:disabled {
7431
+ background-color: var(--kds-color-action-disabled-bg);
7432
+ color: var(--kds-color-action-disabled);
7433
+ box-shadow: none;
7434
+ }
7435
+
7436
+ button.kds-btn-warning::after {
7437
+ display: none;
7438
+ }
7439
+
7440
+ /* -- Button Error (red / destructive CTA) -- */
7441
+ button.kds-btn-error,
7442
+ a.kds-btn-error {
7443
+ background: var(--kds-color-error-main);
7444
+ color: var(--kds-color-error-contrast);
7445
+ border: none;
7446
+ }
7447
+
7448
+ button.kds-btn-error:hover:not(:disabled),
7449
+ a.kds-btn-error:hover:not(:disabled) {
7450
+ background: var(--kds-color-error-dark);
7451
+ }
7452
+
7453
+ button.kds-btn-error:active:not(:disabled),
7454
+ button.kds-btn-error:focus-visible:not(:disabled),
7455
+ a.kds-btn-error:active:not(:disabled),
7456
+ a.kds-btn-error:focus-visible:not(:disabled) {
7457
+ background: var(--kds-color-error-dark);
7458
+ }
7459
+
7460
+ button.kds-btn-error:disabled,
7461
+ a.kds-btn-error:disabled {
7462
+ background-color: var(--kds-color-action-disabled-bg);
7463
+ color: var(--kds-color-action-disabled);
7464
+ box-shadow: none;
7465
+ }
7466
+
7467
+ button.kds-btn-error::after {
7468
+ display: none;
7469
+ }
7470
+
5913
7471
  /* -- Field Helper Text -- */
5914
7472
  .kds-field-helper {
5915
7473
  font-size: var(--kds-font-size-xs);
@@ -5952,6 +7510,8 @@ button.kds-btn-success::after {
5952
7510
  /* -- Alert inline (borderless, used inside cards) -- */
5953
7511
  .kds-alert-inline {
5954
7512
  border: none;
7513
+ padding: var(--kds-spacing-1) var(--kds-spacing-1-5);
7514
+ margin-bottom: var(--kds-spacing-1-5);
5955
7515
  }
5956
7516
 
5957
7517
  /* -- Card dimmed (behind overlays) -- */
@@ -6020,6 +7580,25 @@ button.kds-btn-success::after {
6020
7580
  fill: none;
6021
7581
  }
6022
7582
 
7583
+ /* BeerCSS fuerza fill:currentcolor en todo svg, pisando el atributo de
7584
+ presentación; un SVG que declara fill="none" (ilustraciones de trazo)
7585
+ debe conservarlo. */
7586
+ svg[fill='none'] {
7587
+ fill: none;
7588
+ }
7589
+
7590
+ /* -- Bottom sheet centered content --
7591
+ Contenido escueto centrado verticalmente con altura mínima estable, para que
7592
+ el sheet no encoja cuando la vista tiene pocos elementos (p.ej. drawer de
7593
+ autorización: título + ilustración + timer). */
7594
+ .kds-bottom-sheet-centered-content {
7595
+ display: flex;
7596
+ flex-direction: column;
7597
+ align-items: center;
7598
+ justify-content: center;
7599
+ min-height: var(--kds-bottom-sheet-content-min-height, 21rem);
7600
+ }
7601
+
6023
7602
  /* -- Bottom sheet description (subtle / smaller) -- */
6024
7603
  .kds-bottom-sheet-description-subtle {
6025
7604
  color: var(--kds-color-text-secondary);
@@ -6053,17 +7632,42 @@ button.kds-btn-success::after {
6053
7632
  }
6054
7633
 
6055
7634
  .kds-bill-description-picture {
6056
- width: 120px;
6057
- height: 120px;
7635
+ max-width: 100px;
6058
7636
  object-fit: contain;
6059
7637
  background: var(--kds-color-background-paper);
6060
- padding: var(--kds-spacing-1-25);
6061
- border-radius: var(--kds-radius-md);
6062
- margin-top: var(--kds-spacing-1);
7638
+ margin-top: var(--kds-spacing-1-25);
6063
7639
  display: block;
6064
7640
  box-sizing: content-box;
6065
7641
  }
6066
7642
 
7643
+ /* -- Bill Attachments -- */
7644
+ .kds-bill-attachments {
7645
+ display: flex;
7646
+ flex-direction: column;
7647
+ gap: var(--kds-spacing-0-75);
7648
+ }
7649
+
7650
+ .kds-bill-attachment {
7651
+ display: inline-flex;
7652
+ align-items: center;
7653
+ justify-content: flex-start;
7654
+ width: fit-content;
7655
+ color: var(--kds-color-info-main);
7656
+ font-size: var(--kds-font-size-sm);
7657
+ font-weight: var(--kds-font-weight-medium);
7658
+ text-decoration: none;
7659
+ }
7660
+
7661
+ .kds-bill-attachment:hover span {
7662
+ text-decoration: underline;
7663
+ }
7664
+
7665
+ .kds-bill-attachment i {
7666
+ font-size: var(--kds-font-size-lg);
7667
+ min-width: unset;
7668
+ justify-content: flex-start;
7669
+ }
7670
+
6067
7671
  /* -- Share Card (mustContinue) -- */
6068
7672
  .kds-share-card {
6069
7673
  margin-top: var(--kds-spacing-2);
@@ -6173,8 +7777,10 @@ button.kds-btn-success::after {
6173
7777
  Desktop (min-width: 768px) restores padding + full border-radius. */
6174
7778
  .kds-payment-flow .kds-card-elevated {
6175
7779
  margin-top: 0;
6176
- padding-top: 0;
6177
- padding-bottom: 0;
7780
+ /* Vertical > lateral: la card del flujo respira arriba/abajo (spacing-3)
7781
+ manteniendo el padding lateral del base (spacing-2 / spacing-3 mobile). */
7782
+ padding-top: var(--kds-spacing-3);
7783
+ padding-bottom: var(--kds-spacing-3);
6178
7784
  }
6179
7785
 
6180
7786
  /* Reset BeerCSS sibling margin on form/section inside payment cards.
@@ -6189,12 +7795,43 @@ button.kds-btn-success::after {
6189
7795
  padding-bottom: 0;
6190
7796
  }
6191
7797
 
6192
- /* Payment stage — full-viewport centered wrapper */
7798
+ /* Body card: alto mínimo estable para que NO salte entre estados de distinta altura
7799
+ (loader/progress ↔ formulario). Solo la body card = hijo directo de `.kds-screen`
7800
+ (los headers van dentro de `.kds-invoice-sticky-wrap`, no la afecta).
7801
+ Flex-column para que el contenido quede arriba y el footer interno (versión / secure
7802
+ footer) pueda pinearse al fondo con `margin-top: auto` aunque el contenido sea corto. */
7803
+ .kds-screen > .kds-card-elevated {
7804
+ min-height: 36rem;
7805
+ display: flex;
7806
+ flex-direction: column;
7807
+ /* mismo radio que el header (invoice-sticky usa radius-card); el base card-elevated
7808
+ es radius-md (8px) y quedaba distinto al header en desktop. */
7809
+ border-radius: var(--kds-radius-card);
7810
+ }
7811
+
7812
+ /* Variante sin radio superior: pantallas de resultado (éxito/fallo/timeout) que van
7813
+ SIN header arriba — la body card va sola y su tope queda plano (flush) en vez de
7814
+ con esquinas redondeadas sueltas. El padding del card sigue manejando el inset. */
7815
+ /* Tope plano SOLO en mobile (< 768px): la body card se pega al borde superior del widget
7816
+ (igual que el header sticky, que también aplana el tope solo en mobile). En desktop la card
7817
+ va centrada y separada, así que conserva el border-radius superior redondeado. */
7818
+ @media (max-width: 767px) {
7819
+ .kds-screen > .kds-card-elevated.kds-card-elevated--flush-top,
7820
+ .kds-card-elevated.kds-card-elevated--flush-top {
7821
+ border-top-left-radius: 0;
7822
+ border-top-right-radius: 0;
7823
+ }
7824
+ }
7825
+
7826
+ /* Payment stage — full-viewport centered wrapper.
7827
+ Fondo muted (gris) para que las cards blancas (header + body) y el gap entre
7828
+ ellas se distingan; sin esto, card blanca sobre fondo blanco se funden. */
6193
7829
  .kds-payment-stage {
6194
7830
  min-height: 100vh;
6195
7831
  display: flex;
6196
7832
  justify-content: center;
6197
7833
  padding: var(--kds-spacing-2-5) var(--kds-spacing-2) var(--kds-spacing-8);
7834
+ background: var(--kds-color-background-muted);
6198
7835
  }
6199
7836
 
6200
7837
  /* Payment flow — narrow column */
@@ -6228,23 +7865,23 @@ button.kds-btn-success::after {
6228
7865
  width: 100%;
6229
7866
  }
6230
7867
 
6231
- .kds-payment-flow .kds-card-elevated {
6232
- padding-top: var(--kds-spacing-2);
6233
- padding-bottom: var(--kds-spacing-2);
6234
- }
6235
-
6236
- /* Invoice sticky card: progressive padding-top (expanded 20px → collapsed 8px).
6237
- Overrides base rule at same specificity; source order wins here. */
7868
+ /* Invoice sticky card padding (mobile).
7869
+ Top: estático 12px. Bottom: progresivo 16px (expandido, = desktop) → 8px (colapsado).
7870
+ El padding-bottom animado se reduce al colapsar — sin depender de que el clip-path
7871
+ corte el padding abruptamente. */
6238
7872
  .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6239
7873
  padding-top: var(--kds-spacing-1-5);
7874
+ padding-bottom: calc(
7875
+ var(--kds-spacing-2)
7876
+ - var(--kds-spacing-1) * var(--collapse-progress, 0)
7877
+ );
6240
7878
  }
6241
7879
 
6242
7880
 
6243
7881
  }
6244
7882
 
6245
- /* Desktop: restore card padding and full border-radius on invoice sticky */
7883
+ /* Desktop: restore sticky header padding and full border-radius on invoice sticky */
6246
7884
  @media (min-width: 768px) {
6247
- .kds-payment-flow .kds-card-elevated,
6248
7885
  .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6249
7886
  padding-top: var(--kds-spacing-2);
6250
7887
  padding-bottom: var(--kds-spacing-2);
@@ -6348,6 +7985,28 @@ button.kds-btn-success::after {
6348
7985
  background: rgba(255, 255, 255, .08);
6349
7986
  }
6350
7987
 
7988
+ /* Icon-only arrows: kill the BeerCSS button active/focus ring (stray halo). */
7989
+ .kds-proto-nav-arrow:active,
7990
+ .kds-proto-nav-arrow:focus,
7991
+ .kds-proto-nav-arrow:focus-visible {
7992
+ outline: none;
7993
+ border: 0;
7994
+ box-shadow: none;
7995
+ }
7996
+
7997
+ /* Dark: the pill inverts to a LIGHT surface (bg = text-primary = white), so
7998
+ its contents need dark ink — the white-alpha tokens above become invisible. */
7999
+ [data-theme="dark"] .kds-proto-nav-label {
8000
+ color: var(--kds-color-gray-500);
8001
+ }
8002
+ [data-theme="dark"] .kds-proto-nav-arrow {
8003
+ color: var(--kds-color-gray-600);
8004
+ }
8005
+ [data-theme="dark"] .kds-proto-nav-arrow:hover {
8006
+ color: var(--kds-color-gray-900);
8007
+ background: rgba(0, 0, 0, .08);
8008
+ }
8009
+
6351
8010
  /* Tweaks panel — floating config panel */
6352
8011
  .kds-proto-tweaks {
6353
8012
  position: fixed;
@@ -6548,11 +8207,21 @@ button.kds-btn-success::after {
6548
8207
  display: none;
6549
8208
  }
6550
8209
 
6551
- .kds-bank-modal-search {
6552
- padding: 0 var(--kds-spacing-2) var(--kds-spacing-1-5);
8210
+ /* Icon-only close: kill the BeerCSS button active/focus ring (stray border). */
8211
+ .kds-bank-modal-close:active,
8212
+ .kds-bank-modal-close:focus,
8213
+ .kds-bank-modal-close:focus-visible {
8214
+ outline: none;
8215
+ border: 0;
8216
+ box-shadow: none;
8217
+ }
8218
+
8219
+ .kds-bank-modal-close:hover {
8220
+ background: var(--kds-color-action-hover);
6553
8221
  }
6554
8222
 
6555
- .kds-bank-modal-search input {
8223
+ /* Search field reutilizable (standalone o dentro del KdsBankModal). */
8224
+ .kds-search-field {
6556
8225
  width: 100%;
6557
8226
  padding: var(--kds-spacing-1-25) var(--kds-spacing-1-5);
6558
8227
  border: 1px solid var(--kds-color-divider);
@@ -6564,15 +8233,57 @@ button.kds-btn-success::after {
6564
8233
  background: var(--kds-color-surface);
6565
8234
  }
6566
8235
 
6567
- .kds-bank-modal-search input::placeholder {
8236
+ .kds-search-field::placeholder {
6568
8237
  color: var(--kds-color-text-hint);
6569
8238
  }
6570
8239
 
6571
- .kds-bank-modal-search input:focus {
8240
+ .kds-search-field:focus {
6572
8241
  border-color: var(--kds-color-primary-main);
6573
8242
  box-shadow: 0 0 0 2px var(--kds-color-primary-faint);
6574
8243
  }
6575
8244
 
8245
+ /* Variante con ícono (withIcon): lupa posicionada DENTRO del input, a la derecha. */
8246
+ .kds-search-field-wrapper {
8247
+ position: relative;
8248
+ width: 100%;
8249
+ }
8250
+
8251
+ .kds-search-field-icon {
8252
+ position: absolute;
8253
+ right: var(--kds-spacing-1-5);
8254
+ top: 50%;
8255
+ transform: translateY(-50%);
8256
+ font-size: 20px;
8257
+ color: var(--kds-color-text-hint);
8258
+ pointer-events: none;
8259
+ }
8260
+
8261
+ /* Espacio a la derecha del texto para no solaparse con la lupa. */
8262
+ .kds-search-field-wrapper .kds-search-field {
8263
+ padding-right: calc(var(--kds-spacing-1-5) + var(--kds-spacing-3));
8264
+ }
8265
+
8266
+ /* Variante angosta del field (prop `narrow` de KdsTextField): ancho reducido y texto
8267
+ centrado, para inputs de pocos caracteres dispuestos en fila (ej. segmentos de
8268
+ coordenadas o código). No crece ni se encoge dentro de un flex row. */
8269
+ .field.kds-field--narrow {
8270
+ width: 6rem;
8271
+ flex: 0 0 auto;
8272
+ /* En fila horizontal no aplica el margin vertical que BeerCSS da a fields
8273
+ hermanos (regla de "flow" `... + :is(.field,...)`, specificity ~0,3,1);
8274
+ sin el reset los siguientes quedan desalineados hacia abajo. `!important`
8275
+ para ganarle a esa regla de framework. */
8276
+ margin-block: 0 !important;
8277
+ }
8278
+
8279
+ .field.kds-field--narrow > input {
8280
+ text-align: center;
8281
+ }
8282
+
8283
+ .kds-bank-modal-search {
8284
+ padding: 0 var(--kds-spacing-2) var(--kds-spacing-1-5);
8285
+ }
8286
+
6576
8287
  .kds-bank-modal-body {
6577
8288
  flex: 1;
6578
8289
  overflow-y: auto;
@@ -6670,7 +8381,7 @@ button.kds-btn-success::after {
6670
8381
  min-width: 0;
6671
8382
  }
6672
8383
 
6673
- .kds-qr-text .title {
8384
+ .kds-qr-text .kds-qr-title {
6674
8385
  font-family: var(--kds-font-family-primary);
6675
8386
  font-weight: 600;
6676
8387
  font-size: var(--kds-font-size-sm);
@@ -6678,10 +8389,15 @@ button.kds-btn-success::after {
6678
8389
  color: var(--kds-color-text-primary);
6679
8390
  }
6680
8391
 
6681
- .kds-qr-text .sub {
8392
+ .kds-qr-text .kds-qr-subtitle {
6682
8393
  font-family: var(--kds-font-family-primary);
6683
8394
  font-size: var(--kds-font-size-caption);
6684
8395
  color: var(--kds-color-text-secondary);
8396
+ /* Trunca con ellipsis en lugar de wrap a 2 líneas — evita apretar el row
8397
+ cuando el contenedor es angosto (mobile o decorator constrained). */
8398
+ overflow: hidden;
8399
+ text-overflow: ellipsis;
8400
+ white-space: nowrap;
6685
8401
  }
6686
8402
 
6687
8403
  /* QR Badge - "Rápido" indicator */
@@ -6704,46 +8420,26 @@ button.kds-btn-success::after {
6704
8420
  font-size: 20px;
6705
8421
  }
6706
8422
 
6707
- /* Mobile responsive: Ajustes para pantallas pequeñas */
8423
+ /* Mobile responsive (≤480px): respira más — mantenemos padding/gap/avatar igual
8424
+ que desktop y solo agregamos truncation al subtitle y `flex-shrink: 0` en los
8425
+ ítems que deben mantener su tamaño (avatar, badge, chevron). */
6708
8426
  @media (max-width: 480px) {
6709
- .kds-qr-row {
6710
- gap: var(--kds-spacing-1-5);
6711
- padding: var(--kds-spacing-1-5);
6712
- }
6713
-
6714
8427
  .kds-qr-avatar {
6715
- width: var(--kds-spacing-4-5);
6716
- height: var(--kds-spacing-4-5);
6717
8428
  flex-shrink: 0;
6718
8429
  }
6719
8430
 
6720
- .kds-qr-avatar .material-symbols-outlined,
6721
- .kds-qr-avatar .material-icons-round {
6722
- font-size: var(--kds-font-size-lg);
6723
- }
6724
-
6725
- .kds-qr-text .title {
6726
- font-size: var(--kds-font-size-xs);
6727
- line-height: var(--kds-line-height-tight);
6728
- }
6729
-
6730
8431
  .kds-qr-text .sub {
6731
- font-size: var(--kds-font-size-caption);
6732
- line-height: var(--kds-line-height-tight);
6733
8432
  overflow: hidden;
6734
8433
  text-overflow: ellipsis;
6735
8434
  white-space: nowrap;
6736
8435
  }
6737
8436
 
6738
8437
  .kds-qr-badge {
6739
- font-size: var(--kds-font-size-caption);
6740
- padding: var(--kds-spacing-0-25) var(--kds-spacing-0-75);
6741
8438
  flex-shrink: 0;
6742
8439
  }
6743
8440
 
6744
8441
  .kds-qr-row .material-symbols-outlined:last-child,
6745
8442
  .kds-qr-row .material-icons-round:last-child {
6746
- font-size: var(--kds-font-size-base);
6747
8443
  flex-shrink: 0;
6748
8444
  }
6749
8445
  }
@@ -6772,7 +8468,11 @@ button.kds-btn-success::after {
6772
8468
  border-radius: var(--kds-spacing-0-75);
6773
8469
  font-size: var(--kds-font-size-sm);
6774
8470
  cursor: pointer;
6775
- transition: background 0.12s ease;
8471
+ /* Transición más amplia y suave: bg + color + border ease-out */
8472
+ transition:
8473
+ background-color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
8474
+ color 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
8475
+ border-top-color 280ms ease-out;
6776
8476
  position: relative;
6777
8477
  user-select: none;
6778
8478
  }
@@ -6781,19 +8481,21 @@ button.kds-btn-success::after {
6781
8481
  border-top: 0;
6782
8482
  }
6783
8483
 
6784
- .kds-copyable-table-row:hover {
8484
+ /* Hover NO aplica mientras la row esté en `.copied` o `.settling`
8485
+ (evita el flicker del hover state al desaparecer el verde de "copiado") */
8486
+ .kds-copyable-table-row:not(.copied):not(.settling):hover {
6785
8487
  background: var(--kds-color-primary-faint);
6786
8488
  }
6787
8489
 
6788
- .kds-copyable-table-row:hover + .kds-copyable-table-row {
8490
+ .kds-copyable-table-row:not(.copied):not(.settling):hover + .kds-copyable-table-row {
6789
8491
  border-top-color: transparent;
6790
8492
  }
6791
8493
 
6792
- .kds-copyable-table-row:active {
8494
+ .kds-copyable-table-row:not(.copied):not(.settling):active {
6793
8495
  background: var(--kds-color-primary-selected);
6794
8496
  }
6795
8497
 
6796
- .kds-copyable-table-row .k {
8498
+ .kds-copyable-table-row .kds-key {
6797
8499
  color: var(--kds-color-text-secondary);
6798
8500
  font-size: var(--kds-font-size-caption);
6799
8501
  letter-spacing: 0.3px;
@@ -6802,7 +8504,7 @@ button.kds-btn-success::after {
6802
8504
  flex: 0 0 auto;
6803
8505
  }
6804
8506
 
6805
- .kds-copyable-table-row .v {
8507
+ .kds-copyable-table-row .kds-value {
6806
8508
  color: var(--kds-color-text-primary);
6807
8509
  font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
6808
8510
  font-weight: var(--kds-font-weight-medium);
@@ -6818,17 +8520,18 @@ button.kds-btn-success::after {
6818
8520
  flex: 1 1 auto;
6819
8521
  }
6820
8522
 
6821
- .kds-copyable-table-row .v::after {
8523
+ .kds-copyable-table-row .kds-value::after {
6822
8524
  content: 'content_copy';
6823
8525
  font-family: 'Material Symbols Outlined';
6824
8526
  font-size: var(--kds-font-size-sm);
6825
8527
  color: var(--kds-color-primary-main);
6826
8528
  opacity: 0;
6827
- transition: opacity 0.12s ease;
8529
+ /* Transición coordinada con la row */
8530
+ transition: opacity 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
6828
8531
  flex: 0 0 auto;
6829
8532
  }
6830
8533
 
6831
- .kds-copyable-table-row:hover .v::after {
8534
+ .kds-copyable-table-row:not(.copied):not(.settling):hover .kds-value::after {
6832
8535
  opacity: 0.7;
6833
8536
  }
6834
8537
 
@@ -6836,22 +8539,83 @@ button.kds-btn-success::after {
6836
8539
  background: var(--kds-color-success-soft);
6837
8540
  }
6838
8541
 
6839
- .kds-copyable-table-row.copied .v {
8542
+ .kds-copyable-table-row.copied .kds-value {
6840
8543
  color: var(--kds-color-success-dark);
6841
8544
  }
6842
8545
 
6843
- .kds-copyable-table-row.copied .v::after {
8546
+ .kds-copyable-table-row.copied .kds-value::after {
6844
8547
  content: 'check';
6845
8548
  font-family: 'Material Symbols Outlined';
6846
8549
  color: var(--kds-color-success-dark);
6847
8550
  opacity: 1;
6848
8551
  }
6849
8552
 
8553
+ /* Dark: success-dark text is near-invisible on the dark translucent success
8554
+ surface — use the alert success text token (light green in dark). */
8555
+ [data-theme="dark"] .kds-copyable-table-row.copied .kds-value,
8556
+ [data-theme="dark"] .kds-copyable-table-row.copied .kds-value::after {
8557
+ color: var(--kds-alert-success-text);
8558
+ }
8559
+
8560
+ /* `.settling`: estado de "recién copiado" — la row vuelve al normal sin
8561
+ activar hover. Dura lo mismo que la transición (~300ms) y se aplica
8562
+ desde React tras quitar `.copied`. */
8563
+ .kds-copyable-table-row.settling .kds-value::after {
8564
+ /* Mantén el check con opacity 0 mientras settling, fade out suave */
8565
+ opacity: 0;
8566
+ }
8567
+
6850
8568
  /* Disable BeerCSS ripple on copyable table rows */
6851
8569
  .kds-copyable-table-row::after {
6852
8570
  display: none;
6853
8571
  }
6854
8572
 
8573
+ /* ========================================
8574
+ GRID VARIANT (.kds-copyable-table--grid)
8575
+ Read-only grid of N text cells per row. No copy,
8576
+ no role=button, no "copy all". Cells share the row
8577
+ width equally. Used inside radio options, etc.
8578
+ ======================================== */
8579
+
8580
+ /* La grilla es solo columnas de texto (como el DataTable original): sin caja,
8581
+ borde, fondo ni sombra del contenedor copyable. */
8582
+ .kds-copyable-table--grid {
8583
+ border: 0;
8584
+ border-radius: 0;
8585
+ background: none;
8586
+ padding: 0;
8587
+ box-shadow: none;
8588
+ }
8589
+
8590
+ .kds-copyable-table-row--grid {
8591
+ display: flex;
8592
+ align-items: center;
8593
+ gap: var(--kds-spacing-1-5);
8594
+ padding: 0;
8595
+ /* Sin el divisor border-top que trae la fila base del copyable. */
8596
+ border-top: 0;
8597
+ cursor: default;
8598
+ user-select: text;
8599
+ }
8600
+
8601
+ /* Separación entre filas de la grilla (sin divisores). */
8602
+ .kds-copyable-table-row--grid + .kds-copyable-table-row--grid {
8603
+ margin-top: var(--kds-spacing-0-5);
8604
+ }
8605
+
8606
+ .kds-grid-cell {
8607
+ flex: 1 1 0;
8608
+ min-width: 0;
8609
+ font-size: var(--kds-font-size-sm);
8610
+ font-weight: var(--kds-font-weight-medium);
8611
+ color: var(--kds-color-text-primary);
8612
+ word-break: break-word;
8613
+ }
8614
+
8615
+ .kds-grid-cell--disabled {
8616
+ color: var(--kds-color-text-disabled);
8617
+ }
8618
+
6855
8619
  /* ========================================
6856
8620
  COPY-ALL BUTTON (.kds-copy-all-btn)
6857
8621
  Modifier for kds-btn kds-btn-outlined that adds
@@ -6883,6 +8647,15 @@ a.kds-copy-all-btn.copied:hover {
6883
8647
  border-color: var(--kds-color-success-border-light);
6884
8648
  }
6885
8649
 
8650
+ /* Dark: lighten the "Datos copiados" text/border on the dark success surface. */
8651
+ [data-theme="dark"] button.kds-copy-all-btn.copied,
8652
+ [data-theme="dark"] button.kds-copy-all-btn.copied:hover,
8653
+ [data-theme="dark"] a.kds-copy-all-btn.copied,
8654
+ [data-theme="dark"] a.kds-copy-all-btn.copied:hover {
8655
+ color: var(--kds-alert-success-text);
8656
+ border-color: var(--kds-alert-success-border);
8657
+ }
8658
+
6886
8659
  /* ========================================
6887
8660
  SECTION NOTE (.kds-section-note)
6888
8661
  Lightweight inline note for contextual caveats.
@@ -6917,6 +8690,17 @@ a.kds-copy-all-btn.copied:hover {
6917
8690
  .kds-section-note.kds-error { color: var(--kds-color-error-dark); }
6918
8691
  .kds-section-note.kds-error > i { color: var(--kds-color-error-dark); }
6919
8692
 
8693
+ /* Dark: the semantic *-dark shades are near-invisible on the dark page bg —
8694
+ use the alert *-text tokens (light shades in dark). Base note is warning. */
8695
+ [data-theme="dark"] .kds-section-note,
8696
+ [data-theme="dark"] .kds-section-note > i { color: var(--kds-alert-warning-text); }
8697
+ [data-theme="dark"] .kds-section-note.kds-info,
8698
+ [data-theme="dark"] .kds-section-note.kds-info > i { color: var(--kds-alert-info-text); }
8699
+ [data-theme="dark"] .kds-section-note.kds-success,
8700
+ [data-theme="dark"] .kds-section-note.kds-success > i { color: var(--kds-alert-success-text); }
8701
+ [data-theme="dark"] .kds-section-note.kds-error,
8702
+ [data-theme="dark"] .kds-section-note.kds-error > i { color: var(--kds-alert-error-text); }
8703
+
6920
8704
  /* ========================================
6921
8705
  INFO TOOLTIP (.kds-info-tip)
6922
8706
  Inline info button with hover/click tooltip bubble.
@@ -7012,7 +8796,7 @@ a.kds-copy-all-btn.copied:hover {
7012
8796
  .kds-monto-row {
7013
8797
  display: flex;
7014
8798
  justify-content: space-between;
7015
- align-items: flex-end;
8799
+ align-items: flex-start;
7016
8800
  padding: var(--kds-spacing-1-75) 0 var(--kds-spacing-1);
7017
8801
  border-top: 1px dashed var(--kds-color-divider);
7018
8802
  margin-top: var(--kds-spacing-1-75);
@@ -7036,3 +8820,360 @@ a.kds-copy-all-btn.copied:hover {
7036
8820
  color: var(--kds-color-text-primary);
7037
8821
  }
7038
8822
 
8823
+ /* ========================================
8824
+ PAYMENT TOTAL (.kds-payment-total)
8825
+ Bloque "monto a pagar" para QR view y email templates.
8826
+ Portado desde paylink-ligopay → <kh:paymentTotal> + materialize-config.css.
8827
+ Variantes:
8828
+ - default: amount grande (3rem) en color primario Khipu.
8829
+ - email: amount compacto (1.5rem) en color texto primario.
8830
+ Responsive (default): mobile (≤ 1024px) centra y oculta titleMobile.
8831
+ ======================================== */
8832
+
8833
+ .kds-payment-total {
8834
+ /* Component-scoped tokens — overrideables sin tocar el CSS global. */
8835
+ --kds-payment-total-title-size: var(--kds-font-size-2xl); /* 24px */
8836
+ --kds-payment-total-label-size: var(--kds-font-size-xl); /* 20px */
8837
+ --kds-payment-amount-size: 3rem; /* 48px — destacado */
8838
+ --kds-payment-amount-line-height: var(--kds-line-height-snug);
8839
+ --kds-payment-amount-color: var(--kds-color-primary-main);
8840
+ --kds-payment-amount-weight: var(--kds-font-weight-medium);
8841
+
8842
+ text-align: left;
8843
+ }
8844
+
8845
+ .kds-payment-total-title,
8846
+ .kds-payment-total-title-mobile {
8847
+ font-size: var(--kds-payment-total-title-size);
8848
+ font-weight: var(--kds-font-weight-semibold);
8849
+ color: var(--kds-color-text-primary);
8850
+ margin-bottom: var(--kds-spacing-4);
8851
+ }
8852
+
8853
+ .kds-payment-total-title-mobile {
8854
+ display: none;
8855
+ }
8856
+
8857
+ .kds-payment-total .kds-payment-label {
8858
+ font-size: var(--kds-payment-total-label-size);
8859
+ font-weight: var(--kds-font-weight-semibold);
8860
+ color: var(--kds-color-text-primary);
8861
+ margin-bottom: var(--kds-spacing-1);
8862
+ padding-top: 0;
8863
+ }
8864
+
8865
+ .kds-payment-total .kds-payment-amount {
8866
+ font-size: var(--kds-payment-amount-size);
8867
+ font-weight: var(--kds-payment-amount-weight);
8868
+ line-height: var(--kds-payment-amount-line-height);
8869
+ color: var(--kds-payment-amount-color);
8870
+ margin-bottom: var(--kds-spacing-4);
8871
+ }
8872
+
8873
+ .kds-payment-total .kds-payment-amount .kds-payment-total-decimal-sup,
8874
+ .kds-invoice-amount .kds-payment-total-decimal-sup {
8875
+ font-size: var(--kds-font-size-decimal-sup);
8876
+ font-weight: var(--kds-font-weight-semibold);
8877
+ position: relative;
8878
+ top: 0;
8879
+ }
8880
+
8881
+ /* Variante email: amount compacto en color texto primario, alineación izquierda fija */
8882
+ .kds-payment-total--email {
8883
+ --kds-payment-amount-size: var(--kds-font-size-2xl); /* 24px */
8884
+ --kds-payment-amount-line-height: var(--kds-line-height-snug);
8885
+ --kds-payment-amount-color: var(--kds-color-text-primary);
8886
+ --kds-payment-amount-weight: var(--kds-font-weight-semibold);
8887
+ }
8888
+
8889
+ /* Tone modifier: swaps the amount color to the khipu-blue / LigoPay info blue.
8890
+ Combinable with --email or with the default variant. */
8891
+ .kds-payment-total--tone-info {
8892
+ --kds-payment-amount-color: var(--kds-color-info-blue); /* #5A5FE0 */
8893
+ }
8894
+
8895
+ /* Centered modifier: removes the asymmetric desktop padding (which exists for
8896
+ LigoPay QR view) and centers all internal text. Composable with --email and
8897
+ --tone-info. */
8898
+ .kds-payment-total--centered {
8899
+ padding-left: 0;
8900
+ padding-top: 0;
8901
+ text-align: center;
8902
+ }
8903
+ .kds-payment-total--centered .kds-payment-total-title,
8904
+ .kds-payment-total--centered .kds-payment-total-title-mobile,
8905
+ .kds-payment-total--centered .kds-payment-label,
8906
+ .kds-payment-total--centered .kds-payment-amount {
8907
+ text-align: center;
8908
+ }
8909
+
8910
+ /* Responsive: mobile ≤ 1024px — centra y conmuta los títulos (sólo variante default) */
8911
+ @media (max-width: 1024px) {
8912
+ .kds-payment-total {
8913
+ text-align: center;
8914
+ }
8915
+
8916
+ .kds-payment-total .kds-payment-total-title {
8917
+ display: none;
8918
+ }
8919
+
8920
+ .kds-payment-total .kds-payment-total-title-mobile {
8921
+ display: block;
8922
+ text-align: center;
8923
+ }
8924
+
8925
+ .kds-payment-total .kds-payment-label,
8926
+ .kds-payment-total .kds-payment-amount {
8927
+ text-align: center;
8928
+ }
8929
+
8930
+ /* Email mantiene alineación izquierda incluso en mobile (matchea email clients) */
8931
+ .kds-payment-total--email,
8932
+ .kds-payment-total--email .kds-payment-label,
8933
+ .kds-payment-total--email .kds-payment-amount {
8934
+ text-align: left;
8935
+ }
8936
+ }
8937
+
8938
+ /* ==========================================================================
8939
+ GRID UTILITIES — semantic aliases for BeerCSS .grid / .s* / .m* / .l*
8940
+
8941
+ Estas utilidades son ALIAS de las clases cortas de BeerCSS para que
8942
+ consumers (payment, LigoPay, Grails legacy) puedan escribir markup con
8943
+ nombres descriptivos sin renunciar al grid de 12 columnas de BeerCSS.
8944
+
8945
+ Convención (estilo Bootstrap responsive):
8946
+ - kds-grid → .grid (12-col CSS grid + 1rem gap)
8947
+ - kds-col-sm-{1..12} → .s{1..12} (mobile, siempre aplica)
8948
+ - kds-col-md-{1..12} → .m{1..12} (>=601px)
8949
+ - kds-col-lg-{1..12} → .l{1..12} (>=993px)
8950
+
8951
+ Las definiciones originales de BeerCSS NO se tocan; estas son aditivas.
8952
+ ========================================================================== */
8953
+
8954
+ .kds-grid {
8955
+ --_gap: 1rem;
8956
+ display: grid;
8957
+ grid-template-columns: repeat(12, 1fr);
8958
+ gap: var(--_gap);
8959
+ block-size: auto;
8960
+ }
8961
+
8962
+ .kds-grid.kds-grid-no-space { --_gap: 0rem; }
8963
+ .kds-grid.kds-grid-medium-space { --_gap: 1.5rem; }
8964
+ .kds-grid.kds-grid-large-space { --_gap: 2rem; }
8965
+
8966
+ .kds-grid > * { margin: 0; }
8967
+
8968
+ .kds-col-sm-1 { grid-area: auto/span 1; }
8969
+ .kds-col-sm-2 { grid-area: auto/span 2; }
8970
+ .kds-col-sm-3 { grid-area: auto/span 3; }
8971
+ .kds-col-sm-4 { grid-area: auto/span 4; }
8972
+ .kds-col-sm-5 { grid-area: auto/span 5; }
8973
+ .kds-col-sm-6 { grid-area: auto/span 6; }
8974
+ .kds-col-sm-7 { grid-area: auto/span 7; }
8975
+ .kds-col-sm-8 { grid-area: auto/span 8; }
8976
+ .kds-col-sm-9 { grid-area: auto/span 9; }
8977
+ .kds-col-sm-10 { grid-area: auto/span 10; }
8978
+ .kds-col-sm-11 { grid-area: auto/span 11; }
8979
+ .kds-col-sm-12 { grid-area: auto/span 12; }
8980
+
8981
+ @media only screen and (min-width: 601px) {
8982
+ .kds-col-md-1 { grid-area: auto/span 1; }
8983
+ .kds-col-md-2 { grid-area: auto/span 2; }
8984
+ .kds-col-md-3 { grid-area: auto/span 3; }
8985
+ .kds-col-md-4 { grid-area: auto/span 4; }
8986
+ .kds-col-md-5 { grid-area: auto/span 5; }
8987
+ .kds-col-md-6 { grid-area: auto/span 6; }
8988
+ .kds-col-md-7 { grid-area: auto/span 7; }
8989
+ .kds-col-md-8 { grid-area: auto/span 8; }
8990
+ .kds-col-md-9 { grid-area: auto/span 9; }
8991
+ .kds-col-md-10 { grid-area: auto/span 10; }
8992
+ .kds-col-md-11 { grid-area: auto/span 11; }
8993
+ .kds-col-md-12 { grid-area: auto/span 12; }
8994
+ }
8995
+
8996
+ @media only screen and (min-width: 993px) {
8997
+ .kds-col-lg-1 { grid-area: auto/span 1; }
8998
+ .kds-col-lg-2 { grid-area: auto/span 2; }
8999
+ .kds-col-lg-3 { grid-area: auto/span 3; }
9000
+ .kds-col-lg-4 { grid-area: auto/span 4; }
9001
+ .kds-col-lg-5 { grid-area: auto/span 5; }
9002
+ .kds-col-lg-6 { grid-area: auto/span 6; }
9003
+ .kds-col-lg-7 { grid-area: auto/span 7; }
9004
+ .kds-col-lg-8 { grid-area: auto/span 8; }
9005
+ .kds-col-lg-9 { grid-area: auto/span 9; }
9006
+ .kds-col-lg-10 { grid-area: auto/span 10; }
9007
+ .kds-col-lg-11 { grid-area: auto/span 11; }
9008
+ .kds-col-lg-12 { grid-area: auto/span 12; }
9009
+ }
9010
+
9011
+ /* === Form icon chip ================================================== */
9012
+ /* Chip cuadrado con el icono del formulario (SecureForm, headers OIDC). */
9013
+
9014
+ .kds-form-icon-container {
9015
+ align-items: center;
9016
+ align-self: stretch;
9017
+ display: flex;
9018
+ flex-direction: column;
9019
+ gap: var(--kds-spacing-1);
9020
+ justify-content: center;
9021
+ padding: 0 var(--kds-spacing-2);
9022
+ }
9023
+
9024
+ .kds-form-icon-box {
9025
+ align-items: center;
9026
+ background: var(--kds-color-background-brand-subtle, #f0f0fa);
9027
+ border-radius: var(--kds-radius-md);
9028
+ display: flex;
9029
+ height: 52px;
9030
+ justify-content: center;
9031
+ padding: var(--kds-spacing-1);
9032
+ width: 52px;
9033
+ }
9034
+
9035
+ .kds-form-icon-box .kds-form-icon,
9036
+ .kds-form-icon-box > img,
9037
+ .kds-form-icon-box > svg {
9038
+ aspect-ratio: 1 / 1;
9039
+ flex-shrink: 0;
9040
+ height: 32px;
9041
+ width: 32px;
9042
+ }
9043
+
9044
+ @media (min-width: 600px) {
9045
+ .kds-form-icon-box {
9046
+ height: 56px;
9047
+ width: 56px;
9048
+ }
9049
+
9050
+ .kds-form-icon-box .kds-form-icon,
9051
+ .kds-form-icon-box > img,
9052
+ .kds-form-icon-box > svg {
9053
+ height: 30px;
9054
+ width: 30px;
9055
+ }
9056
+ }
9057
+
9058
+ @media (min-width: 900px) {
9059
+ .kds-form-icon-box {
9060
+ height: 60px;
9061
+ width: 60px;
9062
+ }
9063
+
9064
+ .kds-form-icon-box .kds-form-icon,
9065
+ .kds-form-icon-box > img,
9066
+ .kds-form-icon-box > svg {
9067
+ height: 32px;
9068
+ width: 32px;
9069
+ }
9070
+ }
9071
+
9072
+ /* === Accordion (componente KdsAccordion) ============================= */
9073
+ /* El bundle solo estilaba .kds-contract-accordion; estas son las clases
9074
+ que emite el componente React (details/summary con chevron propio). */
9075
+
9076
+ .kds-accordion {
9077
+ border: 1px solid var(--kds-accordion-border);
9078
+ border-radius: var(--kds-radius-md);
9079
+ overflow: hidden;
9080
+ }
9081
+
9082
+ .kds-accordion + .kds-accordion {
9083
+ margin-top: var(--kds-spacing-1);
9084
+ }
9085
+
9086
+ .kds-accordion-summary {
9087
+ align-items: center;
9088
+ background: var(--kds-accordion-header-bg);
9089
+ color: var(--kds-color-text-primary);
9090
+ cursor: pointer;
9091
+ display: flex;
9092
+ font-weight: var(--kds-font-weight-semibold);
9093
+ justify-content: space-between;
9094
+ list-style: none;
9095
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
9096
+ transition: background 0.2s ease;
9097
+ }
9098
+
9099
+ .kds-accordion-summary::-webkit-details-marker {
9100
+ display: none;
9101
+ }
9102
+
9103
+ .kds-accordion-summary:hover {
9104
+ background: var(--kds-color-background-elevated);
9105
+ }
9106
+
9107
+ .kds-accordion-summary > .material-symbols-outlined {
9108
+ transition: transform 0.3s ease;
9109
+ }
9110
+
9111
+ .kds-accordion[open] > .kds-accordion-summary > .material-symbols-outlined {
9112
+ transform: rotate(180deg);
9113
+ }
9114
+
9115
+ .kds-accordion[open] > .kds-accordion-summary {
9116
+ background: var(--kds-accordion-bg-open);
9117
+ border-bottom: 1px solid var(--kds-accordion-border);
9118
+ }
9119
+
9120
+ .kds-accordion-details {
9121
+ background: var(--kds-accordion-bg-open);
9122
+ color: var(--kds-color-text-secondary);
9123
+ font-size: var(--kds-font-size-sm);
9124
+ line-height: var(--kds-line-height-relaxed);
9125
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
9126
+ }
9127
+
9128
+ .kds-accordion-details ul,
9129
+ .kds-accordion-details ol {
9130
+ margin: 0;
9131
+ padding-inline-start: var(--kds-spacing-2);
9132
+ }
9133
+
9134
+ /* === Display utilities ================================================ */
9135
+
9136
+ .kds-block {
9137
+ display: block;
9138
+ }
9139
+
9140
+ .kds-inline {
9141
+ display: inline;
9142
+ }
9143
+
9144
+ .kds-inline-block {
9145
+ display: inline-block;
9146
+ }
9147
+
9148
+ .kds-pre-wrap {
9149
+ white-space: pre-wrap;
9150
+ }
9151
+
9152
+ /* -- Empty State (sin resultados en búsquedas/listas filtradas) -- */
9153
+ .kds-empty-state {
9154
+ display: flex;
9155
+ flex-direction: column;
9156
+ align-items: center;
9157
+ text-align: center;
9158
+ gap: var(--kds-spacing-1);
9159
+ }
9160
+
9161
+ .kds-empty-state > i {
9162
+ /* La caja del material-symbol sigue al font-size (1em). */
9163
+ font-size: var(--kds-font-size-4xl);
9164
+ color: var(--kds-color-text-secondary);
9165
+ }
9166
+
9167
+ /* Textos agrupados con el mismo ritmo compacto que kds-secure-loader-text. */
9168
+ .kds-empty-state-text {
9169
+ display: flex;
9170
+ flex-direction: column;
9171
+ gap: var(--kds-spacing-0-25);
9172
+ }
9173
+
9174
+ .kds-empty-state-text p {
9175
+ /* BeerCSS aplica margin-block-start !important a los <p>; hay que igualarlo. */
9176
+ margin: 0 !important;
9177
+ line-height: var(--kds-line-height-snug);
9178
+ }
9179
+