/** * DSS Theme - Layer 2 (Semantic Mapping) * * Maps design tokens to semantic purposes. * This layer creates the bridge between raw design tokens * and component-specific styling. * * FIRST PRINCIPLES: * - No fallback values - tokens layer MUST load first * - If tokens are missing, theme-loader.js handles it with fallback CSS file * - Components should use these semantic tokens, not raw tokens directly */ :root { /* ========================================================================== App Shell Semantic Tokens ========================================================================== */ /* Header */ --header-bg: var(--ds-color-surface-0); --header-border: var(--ds-color-border); --header-text: var(--ds-color-foreground); --header-height: var(--app-header-height); /* Sidebar */ --sidebar-bg: var(--ds-color-surface-0); --sidebar-border: var(--ds-color-border); --sidebar-text: var(--ds-color-foreground); --sidebar-width: var(--app-sidebar-width); /* Main Content */ --main-bg: var(--ds-color-background); --main-text: var(--ds-color-foreground); /* ========================================================================== Navigation Semantic Tokens ========================================================================== */ --nav-item-text: var(--ds-color-foreground); --nav-item-text-muted: var(--ds-color-muted-foreground); --nav-item-bg-hover: var(--ds-color-accent); --nav-item-bg-active: var(--ds-color-accent); --nav-item-text-active: var(--ds-color-primary); --nav-item-border-focus: var(--ds-color-ring); --nav-section-title: var(--ds-color-muted-foreground); --nav-item-radius: var(--ds-radius-md); --nav-item-padding: var(--ds-space-3); --nav-item-gap: var(--ds-space-3); /* ========================================================================== Button Semantic Tokens ========================================================================== */ /* Default Button */ --button-bg: var(--ds-color-primary); --button-text: var(--ds-color-primary-foreground); --button-border: var(--ds-color-primary); --button-bg-hover: hsl(var(--ds-color-primary-h) var(--ds-color-primary-s) calc(var(--ds-color-primary-l) + 10%)); /* Secondary Button */ --button-secondary-bg: var(--ds-color-secondary); --button-secondary-text: var(--ds-color-secondary-foreground); /* Ghost Button */ --button-ghost-bg: transparent; --button-ghost-text: var(--ds-color-foreground); --button-ghost-bg-hover: var(--ds-color-accent); /* Outline Button */ --button-outline-bg: transparent; --button-outline-text: var(--ds-color-foreground); --button-outline-border: var(--ds-color-border); --button-outline-bg-hover: var(--ds-color-accent); /* Button Sizing */ --button-padding-x: var(--ds-space-4); --button-padding-y: var(--ds-space-2); --button-radius: var(--ds-radius-md); --button-font-size: var(--ds-font-size-sm); --button-font-weight: var(--ds-font-weight-medium); /* ========================================================================== Card Semantic Tokens ========================================================================== */ --card-bg: var(--ds-color-surface-0); --card-border: var(--ds-color-border); --card-text: var(--ds-color-foreground); --card-text-muted: var(--ds-color-muted-foreground); --card-radius: var(--ds-radius-lg); --card-padding: var(--ds-space-5); --card-shadow: var(--ds-shadow-sm); --card-shadow-hover: var(--ds-shadow-md); /* ========================================================================== Input Semantic Tokens ========================================================================== */ --input-bg: var(--ds-color-background); --input-text: var(--ds-color-foreground); --input-placeholder: var(--ds-color-muted-foreground); --input-border: var(--ds-color-border); --input-border-focus: var(--ds-color-ring); --input-radius: var(--ds-radius-md); --input-padding-x: var(--ds-space-3); --input-padding-y: var(--ds-space-2); /* ========================================================================== Badge Semantic Tokens ========================================================================== */ --badge-bg: var(--ds-color-primary); --badge-text: var(--ds-color-primary-foreground); --badge-radius: var(--ds-radius-full); --badge-padding-x: var(--ds-space-2-5); --badge-padding-y: var(--ds-space-0-5); --badge-font-size: var(--ds-font-size-xs); /* Badge Variants */ --badge-secondary-bg: var(--ds-color-secondary); --badge-secondary-text: var(--ds-color-secondary-foreground); --badge-outline-bg: transparent; --badge-outline-text: var(--ds-color-foreground); --badge-outline-border: var(--ds-color-border); --badge-success-bg: var(--ds-color-success); --badge-success-text: var(--ds-color-success-foreground); --badge-warning-bg: var(--ds-color-warning); --badge-warning-text: var(--ds-color-warning-foreground); --badge-error-bg: var(--ds-color-error); --badge-error-text: var(--ds-color-error-foreground); /* ========================================================================== Landing Page Semantic Tokens ========================================================================== */ --landing-bg: var(--ds-color-background); --landing-hero-text: var(--ds-color-foreground); --landing-hero-subtitle: var(--ds-color-muted-foreground); /* Dashboard Card */ --dashboard-card-bg: var(--ds-color-surface-0); --dashboard-card-border: var(--ds-color-border); --dashboard-card-border-hover: var(--ds-color-accent); --dashboard-card-text: var(--ds-color-foreground); --dashboard-card-text-muted: var(--ds-color-muted-foreground); --dashboard-card-shadow-hover: var(--ds-shadow-md); /* Category Title */ --category-title-text: var(--ds-color-foreground); --category-title-border: var(--ds-color-border); /* ========================================================================== Toast/Notification Semantic Tokens ========================================================================== */ --toast-bg: var(--ds-color-surface-0); --toast-text: var(--ds-color-foreground); --toast-border: var(--ds-color-border); --toast-shadow: var(--ds-shadow-lg); --toast-radius: var(--ds-radius-lg); --toast-success-bg: var(--ds-color-success); --toast-success-text: var(--ds-color-success-foreground); --toast-warning-bg: var(--ds-color-warning); --toast-warning-text: var(--ds-color-warning-foreground); --toast-error-bg: var(--ds-color-error); --toast-error-text: var(--ds-color-error-foreground); --toast-info-bg: var(--ds-color-info); --toast-info-text: var(--ds-color-info-foreground); /* ========================================================================== Avatar Semantic Tokens ========================================================================== */ --avatar-bg: var(--ds-color-muted); --avatar-text: var(--ds-color-foreground); --avatar-border: var(--ds-color-border); --avatar-size-sm: 32px; --avatar-size-md: 40px; --avatar-size-lg: 48px; /* ========================================================================== Help Panel Semantic Tokens ========================================================================== */ --help-panel-bg: var(--ds-color-surface-1); --help-panel-border: var(--ds-color-border); --help-panel-text: var(--ds-color-foreground); --help-panel-text-muted: var(--ds-color-muted-foreground); /* ========================================================================== Typography Semantic Tokens ========================================================================== */ --text-heading: var(--ds-color-foreground); --text-body: var(--ds-color-foreground); --text-muted: var(--ds-color-muted-foreground); --text-link: var(--ds-color-primary); --text-link-hover: hsl(var(--ds-color-primary-h) var(--ds-color-primary-s) calc(var(--ds-color-primary-l) + 20%)); /* ========================================================================== Focus Ring ========================================================================== */ --focus-ring-width: 2px; --focus-ring-color: var(--ds-color-ring); --focus-ring-offset: 2px; }