@seguros-bolivar/ui-bundle
Version:
Seguros Bolivar UI Design System - Multi-brand CSS & Web Components Bundle for CDN
1,646 lines (1,414 loc) • 413 kB
CSS
/**
* Seguros Bolivar UI Design System - Complete Bundle
* Brand: seguros-bolivar | Theme: light
* Generated: 2025-11-21T06:53:36.259Z
*
* Includes:
* - Design Tokens (variables CSS)
* - Base Components (atoms)
* - Complex Components (molecules)
* - Brand Overrides (if any)
*
* Usage:
* <link rel="stylesheet" href="sb-ui-seguros-bolivar-light.min.css">
* <script type="module" src="sb-ui-components.min.js"></script>
*
* @brand seguros-bolivar
* @theme light
*/
/**
* Design Tokens - seguros-bolivar light
* Generated by Style Dictionary
* DO NOT EDIT DIRECTLY
*
* Variables con prefijo --sb-ui- (Seguros Bolivar UI)
* Todas las marcas tienen las mismas variables con diferentes valores
* Ejemplo: --sb-ui-color-primary-base, --sb-ui-typography-fontFamily
*/
[data-brand="seguros-bolivar"][data-theme="light"] {
--sb-ui-color-primary-D400: #0b613e;
--sb-ui-color-primary-D300: #086d44;
--sb-ui-color-primary-D200: #05794a;
--sb-ui-color-primary-D100: #038450;
--sb-ui-color-primary-base: #009056;
--sb-ui-color-primary-L100: #66bc9a;
--sb-ui-color-primary-L200: #cce9dd;
--sb-ui-color-primary-L300: #e5f4ee;
--sb-ui-color-primary-L400: #f2f9f6;
--sb-ui-color-secondary-D400: #ffc918;
--sb-ui-color-secondary-D300: #ffce29;
--sb-ui-color-secondary-D200: #ffd543;
--sb-ui-color-secondary-D100: #ffda55;
--sb-ui-color-secondary-base: #ffe16f;
--sb-ui-color-secondary-L100: #ffea9a;
--sb-ui-color-secondary-L200: #fff0b7;
--sb-ui-color-secondary-L300: #fff6d4;
--sb-ui-color-secondary-L400: #fffcf0;
--sb-ui-color-tertiary-D400: #0c8a4d;
--sb-ui-color-tertiary-D300: #099d56;
--sb-ui-color-tertiary-D200: #07af5e;
--sb-ui-color-tertiary-D100: #04c267;
--sb-ui-color-tertiary-base: #02d46f;
--sb-ui-color-tertiary-L100: #4ee19a;
--sb-ui-color-tertiary-L200: #b3f2d4;
--sb-ui-color-tertiary-L300: #e6fbf1;
--sb-ui-color-tertiary-L400: #f2fdf8;
--sb-ui-color-grayscale-black: #1b1b1b;
--sb-ui-color-grayscale-D400: #282828;
--sb-ui-color-grayscale-D300: #414141;
--sb-ui-color-grayscale-D200: #5b5b5b;
--sb-ui-color-grayscale-D100: #757575;
--sb-ui-color-grayscale-base: #9b9b9b;
--sb-ui-color-grayscale-L100: #b9b9b9;
--sb-ui-color-grayscale-L200: #e1e1e1;
--sb-ui-color-grayscale-L300: #f5f5f5;
--sb-ui-color-grayscale-L400: #fafafa;
--sb-ui-color-grayscale-white: #ffffff;
--sb-ui-color-feedback-error-D400: #8f2b34;
--sb-ui-color-feedback-error-D300: #a22d38;
--sb-ui-color-feedback-error-D200: #b5303d;
--sb-ui-color-feedback-error-D100: #c93241;
--sb-ui-color-feedback-error-base: #dc3545;
--sb-ui-color-feedback-error-L100: #e7727d;
--sb-ui-color-feedback-error-L200: #ee9aa2;
--sb-ui-color-feedback-error-L300: #f5c2c7;
--sb-ui-color-feedback-error-L400: #fbebec;
--sb-ui-color-feedback-warning-D400: #d7b23e;
--sb-ui-color-feedback-warning-D300: #e0b52e;
--sb-ui-color-feedback-warning-D200: #ebb91f;
--sb-ui-color-feedback-warning-D100: #f5bd0f;
--sb-ui-color-feedback-warning-base: #ffc100;
--sb-ui-color-feedback-warning-L100: #ffd44d;
--sb-ui-color-feedback-warning-L200: #ffe080;
--sb-ui-color-feedback-warning-L300: #ffecb2;
--sb-ui-color-feedback-warning-L400: #fff9e5;
--sb-ui-color-feedback-info-D400: #0b56a4;
--sb-ui-color-feedback-info-D300: #0860bb;
--sb-ui-color-feedback-info-D200: #056ad1;
--sb-ui-color-feedback-info-D100: #0374e8;
--sb-ui-color-feedback-info-base: #007eff;
--sb-ui-color-feedback-info-L100: #4da5ff;
--sb-ui-color-feedback-info-L200: #80bfff;
--sb-ui-color-feedback-info-L300: #b2d8ff;
--sb-ui-color-feedback-info-L400: #e5f2ff;
--sb-ui-color-feedback-success-D400: #236f34;
--sb-ui-color-feedback-success-D300: #247d38;
--sb-ui-color-feedback-success-D200: #258b3d;
--sb-ui-color-feedback-success-D100: #279941;
--sb-ui-color-feedback-success-base: #28a745;
--sb-ui-color-feedback-success-L100: #69c17d;
--sb-ui-color-feedback-success-L200: #94d3a2;
--sb-ui-color-feedback-success-L300: #bee5c7;
--sb-ui-color-feedback-success-L400: #e9f6ec;
--sb-ui-shadow-xs: 0px 2px 4px rgba(115, 115, 115, 0.16), 0px 0px 6px rgba(115, 115, 115, 0.16);
--sb-ui-shadow-s: 1px 4px 4px rgba(115, 115, 115, 0.04), 1px 1px 8px rgba(115, 115, 115, 0.16);
--sb-ui-shadow-m: 2px 8px 8px rgba(115, 115, 115, 0.04), 2px 2px 16px rgba(115, 115, 115, 0.16);
--sb-ui-shadow-l: 3px 12px 8px rgba(115, 115, 115, 0.04), 3px 3px 24px rgba(115, 115, 115, 0.16);
--sb-ui-shadow-xl: 3px 12px 16px rgba(115, 115, 115, 0.16), 4px 4px 24px rgba(115, 115, 115, 0.16);
--sb-ui-typography-fontFamily: 'Bolivar', 'Roboto', sans-serif;
--sb-ui-typography-fontSize-h1: 2.25rem;
--sb-ui-typography-fontSize-h2: 2rem;
--sb-ui-typography-fontSize-h3: 1.75rem;
--sb-ui-typography-fontSize-h4: 1.5rem;
--sb-ui-typography-fontSize-h5: 1.25rem;
--sb-ui-typography-fontSize-h6: 1rem;
--sb-ui-typography-fontSize-mobile-h1: 1rem;
--sb-ui-typography-fontSize-mobile-h2: 1rem;
--sb-ui-typography-fontSize-mobile-h3: 1rem;
--sb-ui-typography-fontSize-mobile-h4: 1rem;
--sb-ui-typography-fontSize-mobile-h5: 1rem;
--sb-ui-typography-fontSize-mobile-h6: 1rem;
--sb-ui-typography-fontSize-body: 1rem;
--sb-ui-typography-fontSize-label: 0.875rem;
--sb-ui-typography-fontSize-caption: 0.75rem;
--sb-ui-typography-fontSize-button: 1rem;
--sb-ui-gradient-primary-dark: linear-gradient(0deg, #05794a 0%, #0b613e 100%);
--sb-ui-gradient-primary-base: linear-gradient(180deg, #05794a 0.04%, #009056 100%);
--sb-ui-gradient-primary-light: linear-gradient(180deg, #cce9dd 0%, #f2f9f6 100%);
--sb-ui-gradient-secondary-dark: linear-gradient(180deg, #ffc918 0%, #ffd543 100%);
--sb-ui-gradient-secondary-base: linear-gradient(180deg, #ffd543 0%, #ffe16f 100%);
--sb-ui-gradient-secondary-light: linear-gradient(180deg, #fff0b7 0%, #fffcf0 100%);
--sb-ui-gradient-tertiary-dark: linear-gradient(180deg, #0c8a4d 0%, #07af5e 100%);
--sb-ui-gradient-tertiary-base: linear-gradient(180deg, #07af5e 0%, #02d46f 100%);
--sb-ui-gradient-tertiary-light: linear-gradient(180deg, #b3f2d4 0%, #f2fdf8 100%);
}
@layer reset, tokens, base, variants, sizes, modifiers, states, utilities;
/**
* Accordion Component - Seguros Bolivar UI Design System
* - CSS Nesting nativo con &
* - @layer para control de cascada
* - Logical Properties (RTL/LTR)
* - clamp() para responsive fluido
*
* Uso: <details class="sb-ui-accordion sb-ui-accordion--primary">
* <summary class="sb-ui-accordion__header">
* <span class="sb-ui-accordion__icon-start">🌐</span>
* <span class="sb-ui-accordion__label">Label text</span>
* <button class="sb-ui-accordion__action sb-ui-button sb-ui-button--primary sb-ui-button--fill">Button</button>
* <span class="sb-ui-accordion__icon-end">▼</span>
* </summary>
* <div class="sb-ui-accordion__content">Content</div>
* </details>
*/
/* ========================================
RESET LAYER
======================================== */
@layer reset {
.sb-ui-accordion {
all: unset;
box-sizing: border-box;
}
.sb-ui-accordion__header {
all: unset;
box-sizing: border-box;
}
.sb-ui-accordion__content {
all: unset;
box-sizing: border-box;
}
}
/* ========================================
TOKENS LAYER - Variables CSS
======================================== */
@layer tokens {
.sb-ui-accordion {
/* Colores BASE - Estados interactivos */
--sb-ui-accordion-bg-color: var(--sb-ui-color-grayscale-white, #fff);
--sb-ui-accordion-bg-hover: var(--sb-ui-color-grayscale-L300, #f5f5f5);
--sb-ui-accordion-bg-active: var(--sb-ui-color-grayscale-L200, #e1e1e1);
--sb-ui-accordion-bg-disabled: var(--sb-ui-color-grayscale-L400, #fafafa);
--sb-ui-accordion-bg-disabled-hover: var(--sb-ui-color-grayscale-L400, #fafafa);
--sb-ui-accordion-bg-expanded: var(--sb-ui-color-grayscale-L300, #f5f5f5);
--sb-ui-accordion-text-color: var(--sb-ui-color-grayscale-D200, #5b5b5b);
--sb-ui-accordion-text-hover: var(--sb-ui-color-grayscale-D200, #5b5b5b);
--sb-ui-accordion-text-active: var(--sb-ui-color-grayscale-D200, #5b5b5b);
--sb-ui-accordion-text-disabled: var(--sb-ui-color-grayscale-base, #9b9b9b);
--sb-ui-accordion-text-disabled-hover: var(--sb-ui-color-grayscale-base, #9b9b9b);
--sb-ui-accordion-border-color: var(--sb-ui-color-grayscale-L200, #e1e1e1);
--sb-ui-accordion-border-hover: var(--sb-ui-color-grayscale-L200, #e1e1e1);
--sb-ui-accordion-border-active: var(--sb-ui-color-grayscale-L100, #d0d0d0);
--sb-ui-accordion-border-disabled: var(--sb-ui-color-grayscale-L200, #e1e1e1);
--sb-ui-accordion-border-disabled-hover: var(--sb-ui-color-grayscale-L200, #e1e1e1);
--sb-ui-accordion-border-focus: var(--sb-ui-color-primary-base, #038450);
/* Espaciado - SIEMPRE con clamp() */
--sb-ui-accordion-padding-inline: clamp(1rem, 0.8rem + 1vw, 1.5rem);
--sb-ui-accordion-padding-block: clamp(0.75rem, 0.6rem + 0.5vw, 1rem);
--sb-ui-accordion-gap: clamp(0.75rem, 0.5rem + 0.5vw, 1rem);
--sb-ui-accordion-content-padding-block: clamp(1rem, 0.8rem + 1vw, 1.25rem);
--sb-ui-accordion-content-padding-inline: clamp(1rem, 0.8rem + 1vw, 1.5rem);
/* Tipografía - SIEMPRE con clamp() */
--sb-ui-accordion-font-family: var(--sb-ui-typography-fontFamily, 'Roboto', sans-serif);
--sb-ui-accordion-font-size: clamp(0.875rem, 0.8rem + 0.3vw, 1rem);
--sb-ui-accordion-font-weight: 400;
--sb-ui-accordion-line-height: 1.5;
/* Tamaños - Logical properties */
--sb-ui-accordion-min-block-size: clamp(48px, 10vw, 56px);
/* Bordes */
--sb-ui-accordion-border-width: 1px;
--sb-ui-accordion-border-radius: clamp(12px, 0.75rem + 0.5vw, 16px);
--sb-ui-accordion-border-focus-width: 3px;
/* Iconos */
--sb-ui-accordion-icon-size: clamp(1.25rem, 1.125rem + 0.5vw, 1.5rem);
/* Transiciones - NO incluir outline para evitar destellos en focus */
--sb-ui-accordion-transition: background-color 0.2s ease, border-color 0.2s ease,
transform 0.2s ease;
}
}
/* ========================================
BASE LAYER - Estilos base
======================================== */
@layer base {
.sb-ui-accordion {
/* Layout */
display: block;
position: relative;
/* Spacing - SOLO Logical Properties */
margin-block-end: clamp(0.5rem, 0.4rem + 0.3vw, 0.75rem);
/* Appearance */
background-color: var(--sb-ui-accordion-bg-color);
border: var(--sb-ui-accordion-border-width) solid var(--sb-ui-accordion-border-color);
border-radius: var(--sb-ui-accordion-border-radius);
/* Animation */
transition: var(--sb-ui-accordion-transition);
/* Remove default marker */
}
.sb-ui-accordion summary {
list-style: none;
}
.sb-ui-accordion summary::-webkit-details-marker {
display: none;
}
/* Border color changes on header interaction */
.sb-ui-accordion:has(.sb-ui-accordion__header:hover:not(:disabled)) {
border-color: var(--sb-ui-accordion-border-hover, var(--sb-ui-accordion-border-color));
}
.sb-ui-accordion:has(.sb-ui-accordion__header:active:not(:disabled)) {
border-color: var(--sb-ui-accordion-border-active, var(--sb-ui-accordion-border-color));
}
/* Focus state - Border verde grueso */
.sb-ui-accordion:has(.sb-ui-accordion__header:focus-visible) {
border-color: var(--sb-ui-accordion-border-focus);
border-width: var(--sb-ui-accordion-border-focus-width);
}
.sb-ui-accordion__header {
/* Layout */
display: flex;
align-items: center;
gap: var(--sb-ui-accordion-gap);
/* Spacing */
padding-inline: var(--sb-ui-accordion-padding-inline);
padding-block: var(--sb-ui-accordion-padding-block);
min-block-size: var(--sb-ui-accordion-min-block-size);
/* Typography */
font-family: var(--sb-ui-accordion-font-family);
font-size: var(--sb-ui-accordion-font-size);
font-weight: var(--sb-ui-accordion-font-weight);
line-height: var(--sb-ui-accordion-line-height);
color: var(--sb-ui-accordion-text-color);
/* Appearance */
border-radius: var(--sb-ui-accordion-border-radius);
/* Interaction */
cursor: pointer;
user-select: none;
/* Animation */
transition: var(--sb-ui-accordion-transition);
/* Nested Pseudo-classes */
}
.sb-ui-accordion__header:hover:not(:disabled) {
background-color: var(--sb-ui-accordion-bg-hover);
color: var(--sb-ui-accordion-text-hover, var(--sb-ui-accordion-text-color));
}
.sb-ui-accordion__header:active:not(:disabled) {
background-color: var(--sb-ui-accordion-bg-active);
color: var(--sb-ui-accordion-text-active, var(--sb-ui-accordion-text-color));
}
.sb-ui-accordion__header:focus-visible:not(:disabled) {
outline: none;
}
.sb-ui-accordion__icon-start {
/* Layout */
display: flex;
align-items: center;
justify-content: center;
/* Size */
inline-size: var(--sb-ui-accordion-icon-size);
block-size: var(--sb-ui-accordion-icon-size);
flex-shrink: 0;
/* Appearance */
font-size: var(--sb-ui-accordion-icon-size);
}
.sb-ui-accordion__label {
/* Layout */
flex: 1;
/* Typography */
font-family: var(--sb-ui-accordion-font-family);
font-size: var(--sb-ui-accordion-font-size);
font-weight: var(--sb-ui-accordion-font-weight);
line-height: var(--sb-ui-accordion-line-height);
}
.sb-ui-accordion__action {
/* Layout */
flex-shrink: 0;
}
.sb-ui-accordion__icon-end {
/* Layout */
display: flex;
align-items: center;
justify-content: center;
/* Size */
inline-size: var(--sb-ui-accordion-icon-size);
block-size: var(--sb-ui-accordion-icon-size);
flex-shrink: 0;
/* Appearance */
font-size: var(--sb-ui-accordion-icon-size);
font-weight: 300;
/* Animation */
transition: transform 0.3s ease;
}
.sb-ui-accordion__content {
/* Layout */
display: block;
/* Spacing */
padding-inline: var(--sb-ui-accordion-content-padding-inline);
padding-block-start: var(--sb-ui-accordion-content-padding-block);
padding-block-end: var(--sb-ui-accordion-content-padding-block);
/* Typography */
font-family: var(--sb-ui-accordion-font-family);
font-size: var(--sb-ui-accordion-font-size);
font-weight: 400;
line-height: var(--sb-ui-accordion-line-height);
color: var(--sb-ui-accordion-text-color);
/* Border divisor (solo visible cuando está open) */
border-block-start: 0 solid transparent;
transition: border-color 0.2s ease;
}
/* Expanded state */
.sb-ui-accordion[open] {
border-color: var(--sb-ui-accordion-border-expanded, var(--sb-ui-accordion-border-color));
}
.sb-ui-accordion[open] .sb-ui-accordion__header {
background-color: var(--sb-ui-accordion-bg-expanded, #F2F9F6);
color: var(--sb-ui-accordion-text-expanded, var(--sb-ui-accordion-text-color));
}
.sb-ui-accordion[open] .sb-ui-accordion__icon-end {
transform: rotate(180deg);
color: var(--sb-ui-accordion-text-expanded, var(--sb-ui-accordion-text-color));
}
.sb-ui-accordion[open] .sb-ui-accordion__content {
border-block-start: var(--sb-ui-accordion-border-width) solid
var(--sb-ui-accordion-border-color);
}
/* Disabled state */
.sb-ui-accordion--disabled {
pointer-events: none;
}
.sb-ui-accordion--disabled .sb-ui-accordion__header {
background-color: var(--sb-ui-accordion-bg-disabled);
color: var(--sb-ui-accordion-text-disabled);
cursor: not-allowed;
}
.sb-ui-accordion--disabled .sb-ui-accordion {
border-color: var(--sb-ui-accordion-border-disabled);
}
.sb-ui-accordion--disabled:hover .sb-ui-accordion__header {
background-color: var(
--sb-ui-accordion-bg-disabled-hover,
var(--sb-ui-accordion-bg-disabled)
) !important;
color: var(
--sb-ui-accordion-text-disabled-hover,
var(--sb-ui-accordion-text-disabled)
) !important;
}
}
/* ========================================
VARIANTS LAYER
======================================== */
@layer variants {
.sb-ui-accordion--primary {
--sb-ui-accordion-border-color: var(--sb-ui-color-primary-base);
--sb-ui-accordion-border-hover: var(--sb-ui-color-primary-D100);
--sb-ui-accordion-border-active: var(--sb-ui-color-primary-D200);
}
.sb-ui-accordion--secondary {
--sb-ui-accordion-border-color: var(--sb-ui-color-secondary-base);
--sb-ui-accordion-border-hover: var(--sb-ui-color-secondary-D100);
--sb-ui-accordion-border-active: var(--sb-ui-color-secondary-D200);
}
}
/* ========================================
SIZES LAYER
======================================== */
@layer sizes {
.sb-ui-accordion--small {
--sb-ui-accordion-font-size: clamp(0.75rem, 0.7rem + 0.2vw, 0.875rem);
--sb-ui-accordion-padding-inline: clamp(0.75rem, 0.6rem + 0.8vw, 1rem);
--sb-ui-accordion-padding-block: clamp(0.5rem, 0.4rem + 0.3vw, 0.75rem);
--sb-ui-accordion-min-block-size: clamp(40px, 8vw, 48px);
}
.sb-ui-accordion--large {
--sb-ui-accordion-font-size: clamp(1rem, 0.9rem + 0.4vw, 1.25rem);
--sb-ui-accordion-padding-inline: clamp(1.25rem, 1rem + 1.5vw, 2rem);
--sb-ui-accordion-padding-block: clamp(1rem, 0.8rem + 0.8vw, 1.5rem);
--sb-ui-accordion-min-block-size: clamp(56px, 12vw, 72px);
}
}
/* ========================================
MODIFIERS LAYER
======================================== */
@layer modifiers {
.sb-ui-accordion--no-icon-start .sb-ui-accordion__icon-start {
display: none;
}
.sb-ui-accordion--no-icon-end .sb-ui-accordion__icon-end {
display: none;
}
.sb-ui-accordion--no-action .sb-ui-accordion__action {
display: none;
}
}
/* ========================================
STATES LAYER
======================================== */
@layer states {
.sb-ui-accordion--loading {
pointer-events: none;
opacity: 0.7;
}
}
/* ========================================
UTILITIES LAYER (máxima prioridad)
======================================== */
@layer utilities {
/* High contrast mode support - OBLIGATORIO */
@media (prefers-contrast: high) {
.sb-ui-accordion {
--sb-ui-accordion-border-width: 2px;
}
}
/* Reduced motion support - OBLIGATORIO */
@media (prefers-reduced-motion: reduce) {
.sb-ui-accordion {
--sb-ui-accordion-transition: none;
}
.sb-ui-accordion__icon-end {
transition: none;
}
}
}
/**
* Alert Component - Seguros Bolívar UI Design System
* Componente CSS puro con variables --sb-ui-* personalizables por marca
* Incluye estilos para alertas tipo toast, inline y banner
*
* Uso:
* <div class="rb-alert rb-alert--success">
* <div class="rb-alert-icon">✓</div>
* <div class="rb-alert-content">
* <div class="rb-alert-title">Description info text</div>
* <div class="rb-alert-message">This is a success alert — check it</div>
* </div>
* <button class="rb-alert-close" aria-label="Close alert">×</button>
* </div>
*/
/* ========================================
VARIABLES CSS PERSONALIZABLES Y ESTILOS BASE
======================================== */
.sb-ui-alert {
/* Colores - Pueden ser sobreescritos por marca */
--sb-ui-alert-bg-color: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-bg-color-success: var(--sb-ui-color-feedback-success-L400, rgba(40, 167, 69, 0.1));
--sb-ui-alert-bg-color-info: var(--sb-ui-color-feedback-info-L400, rgba(0, 122, 204, 0.1));
--sb-ui-alert-bg-color-warning: var(--sb-ui-color-feedback-warning-L400, rgba(255, 193, 7, 0.1));
--sb-ui-alert-bg-color-error: var(--sb-ui-color-feedback-error-L400, rgba(220, 53, 69, 0.1));
--sb-ui-alert-border-color: var(--sb-ui-color-grayscale-L200, #edeef0);
--sb-ui-alert-border-color-success: var(--sb-ui-color-feedback-success-base, #28a745);
--sb-ui-alert-border-color-info: var(--sb-ui-color-feedback-info-base, #007acc);
--sb-ui-alert-border-color-warning: var(--sb-ui-color-feedback-warning-base, #ffc107);
--sb-ui-alert-border-color-error: var(--sb-ui-color-feedback-error-base, #dc3545);
--sb-ui-alert-text-color: var(--sb-ui-color-grayscale-D300, #404040);
--sb-ui-alert-text-color-success: var(--sb-ui-color-feedback-success-base, #28a745);
--sb-ui-alert-text-color-info: var(--sb-ui-color-feedback-info-base, #007acc);
--sb-ui-alert-text-color-warning: var(--sb-ui-color-feedback-warning-base, #ffc107);
--sb-ui-alert-text-color-error: var(--sb-ui-color-feedback-error-base, #dc3545);
--sb-ui-alert-icon-color: var(--sb-ui-color-grayscale-base, #d9d9d9);
--sb-ui-alert-icon-color-success: var(--sb-ui-color-feedback-success-base, #28a745);
--sb-ui-alert-icon-color-info: var(--sb-ui-color-feedback-info-base, #007acc);
--sb-ui-alert-icon-color-warning: var(--sb-ui-color-feedback-warning-base, #ffc107);
--sb-ui-alert-icon-color-error: var(--sb-ui-color-feedback-error-base, #dc3545);
--sb-ui-alert-close-color: var(--sb-ui-color-grayscale-base, #d9d9d9);
--sb-ui-alert-close-color-hover: var(--sb-ui-color-grayscale-D300, #404040);
/* Espaciado */
--sb-ui-alert-padding: 1rem;
--sb-ui-alert-padding-compact: 0.75rem;
--sb-ui-alert-padding-large: 1.25rem;
--sb-ui-alert-gap: 0.75rem;
--sb-ui-alert-border-width: 1px;
--sb-ui-alert-border-left-width: 4px;
/* Tipografía */
--sb-ui-alert-font-family: var(--sb-ui-typography-fontFamily, 'Roboto', sans-serif);
--sb-ui-alert-title-font-size: 0.875rem;
--sb-ui-alert-title-font-weight: 600;
--sb-ui-alert-message-font-size: 0.875rem;
--sb-ui-alert-message-font-weight: 400;
--sb-ui-alert-line-height: 1.25;
/* Tamaños */
--sb-ui-alert-min-height: 3rem;
--sb-ui-alert-border-radius: 8px;
--sb-ui-alert-icon-size: 1.25rem;
--sb-ui-alert-close-size: 1.5rem;
/* Sombras */
--sb-ui-alert-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
--sb-ui-alert-shadow-toast: 0 4px 16px rgba(0, 0, 0, 0.15);
/* Transiciones */
--sb-ui-alert-transition: all 0.2s ease;
/* Layout */
display: flex;
align-items: flex-start;
gap: var(--sb-ui-alert-gap);
position: relative;
box-sizing: border-box;
min-height: var(--sb-ui-alert-min-height);
padding: var(--sb-ui-alert-padding);
background-color: var(--sb-ui-alert-bg-color);
border: var(--sb-ui-alert-border-width) solid var(--sb-ui-alert-border-color);
border-left: var(--sb-ui-alert-border-left-width) solid var(--sb-ui-alert-border-color);
border-radius: var(--sb-ui-alert-border-radius);
box-shadow: var(--sb-ui-alert-shadow);
font-family: var(--sb-ui-alert-font-family);
line-height: var(--sb-ui-alert-line-height);
color: var(--sb-ui-alert-text-color);
transition: var(--sb-ui-alert-transition);
}
/* ========================================
ALERT CONTENT
======================================== */
.sb-ui-alert-content {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.25rem;
min-width: 0; /* Permite que el contenido se encoja */
}
.sb-ui-alert-title {
font-size: var(--sb-ui-alert-title-font-size);
font-weight: var(--sb-ui-alert-title-font-weight);
line-height: var(--sb-ui-alert-line-height);
margin: 0;
color: inherit;
}
.sb-ui-alert-message {
font-size: var(--sb-ui-alert-message-font-size);
font-weight: var(--sb-ui-alert-message-font-weight);
line-height: var(--sb-ui-alert-line-height);
margin: 0;
color: inherit;
opacity: 0.8;
}
/* ========================================
ALERT ICON
======================================== */
.sb-ui-alert-icon {
display: flex;
align-items: center;
justify-content: center;
width: var(--sb-ui-alert-icon-size);
height: var(--sb-ui-alert-icon-size);
font-size: var(--sb-ui-alert-icon-size);
color: var(--sb-ui-alert-icon-color);
flex-shrink: 0;
margin-top: 0.125rem; /* Alineación visual con el texto */
}
/* ========================================
ALERT CLOSE BUTTON
======================================== */
.sb-ui-alert-close {
display: flex;
align-items: center;
justify-content: center;
width: var(--sb-ui-alert-close-size);
height: var(--sb-ui-alert-close-size);
background: none;
border: none;
color: var(--sb-ui-alert-close-color);
font-size: 1.25rem;
font-weight: 400;
line-height: 1;
cursor: pointer;
border-radius: 4px;
transition: var(--sb-ui-alert-transition);
flex-shrink: 0;
margin-top: -0.125rem; /* Alineación visual */
margin-right: -0.25rem; /* Espaciado visual */
}
.sb-ui-alert-close:hover {
color: var(--sb-ui-alert-close-color-hover);
background-color: var(--sb-ui-color-grayscale-L400, rgba(247, 247, 247, 0.5));
}
.sb-ui-alert-close:focus {
outline: 2px solid var(--sb-ui-color-primary-base, #007acc);
outline-offset: 2px;
}
/* ========================================
ALERT STATES
======================================== */
/* Success state */
.sb-ui-alert--success {
--sb-ui-alert-bg-color: var(--sb-ui-alert-bg-color-success);
--sb-ui-alert-border-color: var(--sb-ui-alert-border-color-success);
--sb-ui-alert-text-color: var(--sb-ui-alert-text-color-success);
--sb-ui-alert-icon-color: var(--sb-ui-alert-icon-color-success);
}
.sb-ui-alert--success .sb-ui-alert-icon::before {
content: '✓';
}
/* Info state */
.sb-ui-alert--info {
--sb-ui-alert-bg-color: var(--sb-ui-alert-bg-color-info);
--sb-ui-alert-border-color: var(--sb-ui-alert-border-color-info);
--sb-ui-alert-text-color: var(--sb-ui-alert-text-color-info);
--sb-ui-alert-icon-color: var(--sb-ui-alert-icon-color-info);
}
.sb-ui-alert--info .sb-ui-alert-icon::before {
content: 'i';
font-style: italic;
font-weight: 600;
}
/* Warning state */
.sb-ui-alert--warning {
--sb-ui-alert-bg-color: var(--sb-ui-alert-bg-color-warning);
--sb-ui-alert-border-color: var(--sb-ui-alert-border-color-warning);
--sb-ui-alert-text-color: var(--sb-ui-alert-text-color-warning);
--sb-ui-alert-icon-color: var(--sb-ui-alert-icon-color-warning);
}
.sb-ui-alert--warning .sb-ui-alert-icon::before {
content: '⚠';
}
/* Error state */
.sb-ui-alert--error {
--sb-ui-alert-bg-color: var(--sb-ui-alert-bg-color-error);
--sb-ui-alert-border-color: var(--sb-ui-alert-border-color-error);
--sb-ui-alert-text-color: var(--sb-ui-alert-text-color-error);
--sb-ui-alert-icon-color: var(--sb-ui-alert-icon-color-error);
}
.sb-ui-alert--error .sb-ui-alert-icon::before {
content: '✕';
}
/* ========================================
ALERT VARIANTS
======================================== */
/* With background (default) */
.sb-ui-alert--with-bg {
/* Ya es el comportamiento por defecto */
}
/* Without background (bordered only) */
.sb-ui-alert--no-bg {
--sb-ui-alert-bg-color: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-bg-color-success: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-bg-color-info: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-bg-color-warning: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-bg-color-error: var(--sb-ui-color-grayscale-white, #ffffff);
}
/* With close icon (default) */
.sb-ui-alert--with-close {
/* Ya es el comportamiento por defecto */
}
/* Without close icon */
.sb-ui-alert--no-close .sb-ui-alert-close {
display: none;
}
/* ========================================
ALERT SIZES
======================================== */
.sb-ui-alert--small {
--sb-ui-alert-padding: 0.75rem;
--sb-ui-alert-min-height: 2.5rem;
--sb-ui-alert-title-font-size: 0.8125rem;
--sb-ui-alert-message-font-size: 0.8125rem;
--sb-ui-alert-icon-size: 1rem;
--sb-ui-alert-close-size: 1.25rem;
--sb-ui-alert-gap: 0.5rem;
}
.sb-ui-alert--medium {
--sb-ui-alert-padding: 1rem;
--sb-ui-alert-min-height: 3rem;
--sb-ui-alert-title-font-size: 0.875rem;
--sb-ui-alert-message-font-size: 0.875rem;
--sb-ui-alert-icon-size: 1.25rem;
--sb-ui-alert-close-size: 1.5rem;
--sb-ui-alert-gap: 0.75rem;
}
.sb-ui-alert--large {
--sb-ui-alert-padding: 1.25rem;
--sb-ui-alert-min-height: 3.5rem;
--sb-ui-alert-title-font-size: 1rem;
--sb-ui-alert-message-font-size: 0.9375rem;
--sb-ui-alert-icon-size: 1.5rem;
--sb-ui-alert-close-size: 1.75rem;
--sb-ui-alert-gap: 1rem;
}
/* ========================================
ALERT POSITIONING (TOAST)
======================================== */
.sb-ui-alert--toast {
position: fixed;
top: 1rem;
right: 1rem;
z-index: 1000;
max-width: 400px;
min-width: 300px;
box-shadow: var(--sb-ui-alert-shadow-toast);
animation: rb-alert-slide-in 0.3s ease;
}
.sb-ui-alert--toast-top-left {
top: 1rem;
left: 1rem;
right: auto;
}
.sb-ui-alert--toast-top-center {
top: 1rem;
left: 50%;
right: auto;
transform: translateX(-50%);
}
.sb-ui-alert--toast-bottom-right {
top: auto;
bottom: 1rem;
right: 1rem;
}
.sb-ui-alert--toast-bottom-left {
top: auto;
bottom: 1rem;
left: 1rem;
right: auto;
}
.sb-ui-alert--toast-bottom-center {
top: auto;
bottom: 1rem;
left: 50%;
right: auto;
transform: translateX(-50%);
}
/* ========================================
ALERT ANIMATIONS
======================================== */
@keyframes rb-alert-slide-in {
from {
opacity: 0;
transform: translateX(100%);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes rb-alert-slide-out {
from {
opacity: 1;
transform: translateX(0);
}
to {
opacity: 0;
transform: translateX(100%);
}
}
@keyframes rb-alert-fade-in {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes rb-alert-fade-out {
from {
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(-10px);
}
}
/* Animation classes */
.sb-ui-alert--fade-in {
animation: rb-alert-fade-in 0.3s ease;
}
.sb-ui-alert--fade-out {
animation: rb-alert-fade-out 0.3s ease;
}
.sb-ui-alert--slide-out {
animation: rb-alert-slide-out 0.3s ease;
}
/* ========================================
ALERT MODIFIERS
======================================== */
/* Rounded corners */
.sb-ui-alert--rounded {
--sb-ui-alert-border-radius: 1rem;
}
/* Compact spacing */
.sb-ui-alert--compact {
--sb-ui-alert-padding: 0.75rem;
--sb-ui-alert-gap: 0.5rem;
}
/* Dense spacing */
.sb-ui-alert--dense {
--sb-ui-alert-padding: 0.5rem;
--sb-ui-alert-gap: 0.375rem;
--sb-ui-alert-min-height: 2rem;
}
/* Full width */
.sb-ui-alert--full-width {
width: 100%;
}
/* Inline alert */
.sb-ui-alert--inline {
display: inline-flex;
width: auto;
max-width: none;
}
/* Banner alert */
.sb-ui-alert--banner {
border-radius: 0;
border-left: none;
border-right: none;
border-top: none;
margin: 0;
}
/* ========================================
ALERT CONTAINER
======================================== */
.sb-ui-alert-container {
position: fixed;
top: 1rem;
right: 1rem;
z-index: 1000;
display: flex;
flex-direction: column;
gap: 0.5rem;
max-width: 400px;
min-width: 300px;
}
.sb-ui-alert-container--top-left {
top: 1rem;
left: 1rem;
right: auto;
}
.sb-ui-alert-container--top-center {
top: 1rem;
left: 50%;
right: auto;
transform: translateX(-50%);
}
.sb-ui-alert-container--bottom-right {
top: auto;
bottom: 1rem;
right: 1rem;
}
.sb-ui-alert-container--bottom-left {
top: auto;
bottom: 1rem;
left: 1rem;
right: auto;
}
.sb-ui-alert-container--bottom-center {
top: auto;
bottom: 1rem;
left: 50%;
right: auto;
transform: translateX(-50%);
}
/* ========================================
ALERT GROUP
======================================== */
.sb-ui-alert-group {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.sb-ui-alert-group--horizontal {
flex-direction: row;
flex-wrap: wrap;
gap: 1rem;
}
/* ========================================
ACCESSIBILITY & RESPONSIVE
======================================== */
/* High contrast mode support */
@media (prefers-contrast: high) {
.sb-ui-alert {
--sb-ui-alert-border-width: 2px;
--sb-ui-alert-border-left-width: 6px;
}
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
.sb-ui-alert {
--sb-ui-alert-transition: none;
}
.sb-ui-alert--toast,
.sb-ui-alert--fade-in,
.sb-ui-alert--fade-out,
.sb-ui-alert--slide-out {
animation: none;
}
}
/* Mobile optimizations */
@media (width <= 640px) {
.sb-ui-alert--toast {
top: 0.5rem;
right: 0.5rem;
left: 0.5rem;
max-width: none;
min-width: auto;
}
.sb-ui-alert-container {
top: 0.5rem;
right: 0.5rem;
left: 0.5rem;
max-width: none;
min-width: auto;
}
.sb-ui-alert-group--horizontal {
flex-direction: column;
}
}
/* Desktop optimizations */
@media (width >= 641px) {
.sb-ui-alert--toast {
max-width: 450px;
}
.sb-ui-alert-container {
max-width: 450px;
}
}
/* Print styles */
@media print {
.sb-ui-alert {
background: transparent !important;
color: black !important;
border: 1px solid black !important;
box-shadow: none !important;
position: static !important;
}
.sb-ui-alert-close {
display: none !important;
}
}
/* ========================================
FOCUS VISIBLE (keyboard navigation)
======================================== */
.sb-ui-alert-close:focus-visible {
outline: 2px solid var(--sb-ui-color-primary-base, #007acc);
outline-offset: 2px;
}
/* ========================================
LOADING STATE
======================================== */
.sb-ui-alert--loading {
position: relative;
pointer-events: none;
}
.sb-ui-alert--loading::after {
content: '';
position: absolute;
top: 50%;
right: 1rem;
width: 16px;
height: 16px;
margin-top: -8px;
border: 2px solid var(--sb-ui-color-grayscale-L200, #edeef0);
border-top-color: var(--sb-ui-color-primary-base, #007acc);
border-radius: 50%;
animation: rb-alert-spinner 1s linear infinite;
z-index: 3;
}
.sb-ui-alert--loading .sb-ui-alert-close {
display: none;
}
@keyframes rb-alert-spinner {
to {
transform: rotate(360deg);
}
}
/* ========================================
DARK MODE SUPPORT
======================================== */
@media (prefers-color-scheme: dark) {
.sb-ui-alert {
--sb-ui-alert-bg-color: var(--sb-ui-color-grayscale-D200, #6e6e6e);
--sb-ui-alert-text-color: var(--sb-ui-color-grayscale-L200, #edeef0);
--sb-ui-alert-border-color: var(--sb-ui-color-grayscale-D100, #4a4a4a);
}
.sb-ui-alert--no-bg {
--sb-ui-alert-bg-color: var(--sb-ui-color-grayscale-D200, #6e6e6e);
}
.sb-ui-alert-close:hover {
background-color: var(--sb-ui-color-grayscale-D100, rgba(74, 74, 74, 0.5));
}
}
/* ========================================
ALERT THEME VARIANTS
======================================== */
/* Minimal alert */
.sb-ui-alert--minimal {
--sb-ui-alert-border-width: 0;
--sb-ui-alert-border-left-width: 0;
--sb-ui-alert-shadow: none;
--sb-ui-alert-shadow-toast: none;
}
/* Outlined alert */
.sb-ui-alert--outlined {
--sb-ui-alert-bg-color: transparent;
--sb-ui-alert-bg-color-success: transparent;
--sb-ui-alert-bg-color-info: transparent;
--sb-ui-alert-bg-color-warning: transparent;
--sb-ui-alert-bg-color-error: transparent;
--sb-ui-alert-border-width: 2px;
}
/* Filled alert */
.sb-ui-alert--filled {
--sb-ui-alert-bg-color-success: var(--sb-ui-color-feedback-success-base, #28a745);
--sb-ui-alert-bg-color-info: var(--sb-ui-color-feedback-info-base, #007acc);
--sb-ui-alert-bg-color-warning: var(--sb-ui-color-feedback-warning-base, #ffc107);
--sb-ui-alert-bg-color-error: var(--sb-ui-color-feedback-error-base, #dc3545);
--sb-ui-alert-text-color-success: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-text-color-info: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-text-color-warning: var(--sb-ui-color-grayscale-D300, #404040);
--sb-ui-alert-text-color-error: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-icon-color-success: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-icon-color-info: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-icon-color-warning: var(--sb-ui-color-grayscale-D300, #404040);
--sb-ui-alert-icon-color-error: var(--sb-ui-color-grayscale-white, #ffffff);
--sb-ui-alert-border-color: transparent;
}
/* ========================================
ALERT INTERACTIVE STATES
======================================== */
.sb-ui-alert--dismissible {
cursor: pointer;
}
.sb-ui-alert--dismissible:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.sb-ui-alert--dismissible:active {
transform: translateY(0);
}
/* ========================================
ALERT ACCESSIBILITY ENHANCEMENTS
======================================== */
/* Screen reader only text */
.sb-ui-alert-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Focus trap for keyboard navigation */
.sb-ui-alert:focus-within {
z-index: 1001;
}
/* ========================================
ALERT VALIDATION STYLES
======================================== */
.sb-ui-alert--valid {
/* Success styling for valid alerts */
}
.sb-ui-alert--invalid {
/* Error styling for invalid alerts */
}
/* ========================================
ALERT CUSTOM ICONS
======================================== */
.sb-ui-alert-icon--custom {
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.sb-ui-alert-icon--custom::before {
display: none;
}
/* ========================================
ALERT PROGRESS BAR
======================================== */
.sb-ui-alert-progress {
position: absolute;
bottom: 0;
left: 0;
height: 3px;
background-color: var(--sb-ui-color-primary-base, #007acc);
border-radius: 0 0 var(--sb-ui-alert-border-radius) var(--sb-ui-alert-border-radius);
transition: width linear;
}
.sb-ui-alert-progress--success {
background-color: var(--sb-ui-color-feedback-success-base, #28a745);
}
.sb-ui-alert-progress--info {
background-color: var(--sb-ui-color-feedback-info-base, #007acc);
}
.sb-ui-alert-progress--warning {
background-color: var(--sb-ui-color-feedback-warning-base, #ffc107);
}
.sb-ui-alert-progress--error {
background-color: var(--sb-ui-color-feedback-error-base, #dc3545);
}
@layer reset, tokens, base, states, utilities;
/**
* Breadcrumb Component - Seguros Bolivar UI Design System
* - CSS Nesting nativo con &
* - @layer para control de cascada
* - Logical Properties (RTL/LTR)
* - clamp() para responsive fluido
*
* Uso:
* <nav class="sb-ui-breadcrumb" aria-label="Breadcrumb">
* <ol class="sb-ui-breadcrumb__list">
* <li class="sb-ui-breadcrumb__item">
* <a href="#" class="sb-ui-breadcrumb__link">Home</a>
* </li>
* <li class="sb-ui-breadcrumb__item">
* <a href="#" class="sb-ui-breadcrumb__link">Category</a>
* </li>
* <li class="sb-ui-breadcrumb__item">
* <span class="sb-ui-breadcrumb__current" aria-current="page">Current</span>
* </li>
* </ol>
* </nav>
*/
/* ========================================
RESET LAYER
======================================== */
@layer reset {
.sb-ui-breadcrumb {
all: unset;
box-sizing: border-box;
}
.sb-ui-breadcrumb *,
.sb-ui-breadcrumb *::before,
.sb-ui-breadcrumb *::after {
box-sizing: inherit;
}
}
/* ========================================
TOKENS LAYER - Variables CSS
======================================== */
@layer tokens {
.sb-ui-breadcrumb {
/* Typography */
--sb-ui-breadcrumb-font-family: var(--sb-ui-typography-fontFamily, 'Roboto', sans-serif);
--sb-ui-breadcrumb-font-size: clamp(0.875rem, 0.8rem + 0.3vw, 1rem);
--sb-ui-breadcrumb-font-weight: 400;
--sb-ui-breadcrumb-line-height: 1.5;
/* Colors */
--sb-ui-breadcrumb-link-color: var(--sb-ui-color-primary-base);
--sb-ui-breadcrumb-link-hover: var(--sb-ui-color-primary-D100);
--sb-ui-breadcrumb-link-active: var(--sb-ui-color-primary-D200);
--sb-ui-breadcrumb-current-color: var(--sb-ui-color-grayscale-base, #9b9b9b);
--sb-ui-breadcrumb-separator-color: var(--sb-ui-color-grayscale-base, #9b9b9b);
/* Spacing */
--sb-ui-breadcrumb-gap: clamp(0.5rem, 0.4rem + 0.3vw, 0.75rem);
--sb-ui-breadcrumb-padding-block: clamp(0.5rem, 0.4rem + 0.3vw, 0.75rem);
--sb-ui-breadcrumb-padding-inline: 0;
/* Separator */
--sb-ui-breadcrumb-separator-content: '>';
--sb-ui-breadcrumb-separator-margin-inline: clamp(0.5rem, 0.4rem + 0.3vw, 0.75rem);
/* Transitions */
--sb-ui-breadcrumb-transition: color 0.2s ease, text-decoration-color 0.2s ease;
}
}
/* ========================================
BASE LAYER - Estilos base
======================================== */
@layer base {
/* Container */
.sb-ui-breadcrumb {
display: block;
inline-size: 100%;
padding-block: var(--sb-ui-breadcrumb-padding-block);
padding-inline: var(--sb-ui-breadcrumb-padding-inline);
font-family: var(--sb-ui-breadcrumb-font-family);
font-size: var(--sb-ui-breadcrumb-font-size);
font-weight: var(--sb-ui-breadcrumb-font-weight);
line-height: var(--sb-ui-breadcrumb-line-height);
}
/* List */
.sb-ui-breadcrumb__list {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0;
margin: 0;
padding: 0;
list-style: none;
}
/* Item */
.sb-ui-breadcrumb__item {
display: inline-flex;
align-items: center;
margin: 0;
padding: 0;
/* Separator - usando ::after */
}
.sb-ui-breadcrumb__item:not(:last-child)::after {
content: var(--sb-ui-breadcrumb-separator-content);
color: var(--sb-ui-breadcrumb-separator-color);
margin-inline-start: var(--sb-ui-breadcrumb-separator-margin-inline);
margin-inline-end: var(--sb-ui-breadcrumb-separator-margin-inline);
font-weight: 400;
user-select: none;
pointer-events: none;
}
/* Link */
.sb-ui-breadcrumb__link {
color: var(--sb-ui-breadcrumb-link-color);
text-decoration: underline;
text-decoration-color: transparent;
text-underline-offset: 3px;
transition: var(--sb-ui-breadcrumb-transition);
cursor: pointer;
display: inline-block;
}
.sb-ui-breadcrumb__link:hover {
color: var(--sb-ui-breadcrumb-link-hover);
text-decoration-color: currentColor;
}
.sb-ui-breadcrumb__link:active {
color: var(--sb-ui-breadcrumb-link-active);
}
.sb-ui-breadcrumb__link:focus-visible {
outline: 2px solid var(--sb-ui-color-secondary-L100);
outline-offset: 3px;
border-radius: 2px;
}
/* Current page (no link) */
.sb-ui-breadcrumb__current {
color: var(--sb-ui-breadcrumb-current-color);
font-weight: 400;
cursor: default;
display: inline-block;
}
}
/* ========================================
STATES LAYER
======================================== */
@layer states {
/* Collapsed state - mobile */
.sb-ui-breadcrumb--collapsed .sb-ui-breadcrumb__item:not(:first-child):not(:last-child) {
display: none;
}
.sb-ui-breadcrumb--collapsed .sb-ui-breadcrumb__item:first-child::after {
content: '...';
}
/* Loading state */
.sb-ui-breadcrumb--loading {
opacity: 0.6;
pointer-events: none;
}
.sb-ui-breadcrumb--loading .sb-ui-breadcrumb__link {
cursor: wait;
}
}
/* ========================================
UTILITIES LAYER (máxima prioridad)
======================================== */
@layer utilities {
/* High contrast mode support */
@media (prefers-contrast: high) {
.sb-ui-breadcrumb .sb-ui-breadcrumb__link {
text-decoration: underline;
text-decoration-color: currentColor;
}
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
.sb-ui-breadcrumb {
--sb-ui-breadcrumb-transition: none;
}
}
/* Mobile styles - collapse to first and last */
@media (max-width: 640px) {
.sb-ui-breadcrumb {
--sb-ui-breadcrumb-font-size: 0.875rem;
}
/* Auto-collapse on mobile */
.sb-ui-breadcrumb:not(.sb-ui-breadcrumb--no-collapse) .sb-ui-breadcrumb__item:not(:first-child):not(:last-child) {
display: none;
}
.sb-ui-breadcrumb:not(.sb-ui-breadcrumb--no-collapse) .sb-ui-breadcrumb__item:first-child::after {
content: '...';
}
}
}
@layer reset, tokens, base, variants, style-variants, brand-overrides, sizes, modifiers, icon-positions, states, utilities;
/**
* ============================================================================
* Button Component - Seguros Bolivar UI Design System
* ============================================================================
*
* Componente CSS moderno con:
* - CSS Nesting nativo
* - @layer para control de cascada
* - Logical Properties para internacionalización (RTL/LTR)
* - clamp() para responsive fluido
*
* ============================================================================
* 📋 ÍNDICE DE NAVEGACIÓN
* ============================================================================
*
* 1. LAYERS DECLARATION ...................... Línea ~40
* 2. RESET LAYER ............................. Línea ~50
* 3. TOKENS LAYER ............................ Línea ~60
* - Variables CSS base (STROKE default)
* 4. BASE LAYER .............................. Línea ~115
* - Estilos base del componente
* - Estados interactivos (:hover, :active, :focus, :disabled)
* 5. VARIANTS LAYER .......................... Línea ~180
* ├─ PRIMARY ............................. Línea ~185
* ├─ SECONDARY ........................... Línea ~195
* ├─ TERTIARY ............................ Línea ~205
* └─ ERROR ............................... Línea ~215
* 6. STYLE-VARIANTS LAYER .................... Línea ~255
* ├─ STROKE (default) .................... Línea ~265
* ├─ FILL ................................ Línea ~275
* │ ├─ PRIMARY FILL ..................... Línea ~280
* │ ├─ SECONDARY FILL ................... Línea ~295
* │ ├─ TERTIARY FILL .................... Línea ~310
* │ └─ ERROR FILL ....................... Línea ~325
* └─ TEXT ................................ Línea ~385
* ├─ PRIMARY TEXT ..................... Línea ~405
* ├─ SECONDARY TEXT ................... Línea ~410
* ├─ TERTIARY TEXT .................... Línea ~415
* └─ ERROR TEXT ....................... Línea ~420
* 7. SIZES LAYER ............................. Línea ~445
* ├─ SMALL ............................... Línea ~450
* ├─ MEDIUM (default) .................... Línea ~455
* └─ LARGE ............................... Línea ~460
* 8. MODIFIERS LAYER ......................... Línea ~470
* ├─ SQUARE .............................. Línea ~475
* ├─ CIRCLE .............................. Línea ~480
* └─ BLOCK ............................... Línea ~490
* 9. ICON-POSITIONS LAYER .................... Línea ~500
* ├─ ICON-LEFT ........................... Línea ~510
* ├─ ICON-RIGHT .......................... Línea ~525
* └─ ICON-ONLY ........................... Línea ~540
* 10. STATES LAYER ........................... Línea ~555
* └─ LOADING ............................ Línea ~565
* ├─ Loading Left (default) .......... Línea ~575
* ├─ Loading Right ................... Línea ~590
* ├─ Loading Icon Only ............... Línea ~605
* └─ Spinner Colors by Variant ....... Línea ~625
* 11. ANIMATIONS ............................. Línea ~660
* 12. UTILITIES LAYER ........................ Línea ~670
* ├─ High Contrast Mode ................. Línea ~675
* ├─ Reduced Motion ..................... Línea ~685
* ├─ Mobile Responsive .................. Línea ~695
* ├─ Desktop Responsive ................. Línea ~705
* └─ Print Styles ....................... Línea ~715
*
* ============================================================================
* 🎨 VARIANTES DE ESTILO
* ============================================================================
*
* STROKE (default): outline con borde, fondo transparente
* FILL: sólido con fondo de color
* TEXT: sin fondo ni borde, solo texto
*
* ============================================================================
* 🎯 TIPOS DE COLOR
* ============================================================================
*
* primary, secondary, tertiary, error
*
* ============================================================================
* 📱 ESTADOS
* ============================================================================
*
* default, hover, pressed, focus, loading, disabled, disabled-hover
*
* ============================================================================
* 🎭 POSICIONES DE ICONOS
* ============================================================================
*
* no-icon (default), icon-left, icon-right, icon-only
*
* ============================================================================
* 📏 TAMAÑOS
* ============================================================================
*
* small, medium (default), large
*
* ============================================================================
* 💡 EJEMPLOS DE USO
* ============================================================================
*
* <!-- STROKE (default) -->
* <button class="sb-ui-button sb-