@ -34,11 +34,6 @@
--_calendar-control-size : var ( --calendar-control-size-md ) ;
--_calendar-day-size : var ( --calendar-day-size-md ) ;
--_calendar-font-size : var ( --calendar-font-size-md ) ;
--_calendar-accent-solid : var ( --color-primary-solid ) ;
--_calendar-accent-solid-hover : var ( --color-primary-solid-hover ) ;
--_calendar-accent-track : var ( --color-primary-track ) ;
--_calendar-accent-border : var ( --color-primary-border ) ;
--_calendar-accent-text : var ( --color-primary-text ) ;
/ * Range endpoints — the calendar-surface public API ` --calendar-range- * ` . The
asymmetry below is DELIBERATE : START defaults live in the recipe ( ` : root ` ,
= affirm — the range "opens" ) so a theme can override them via config ; the host
@ -46,9 +41,9 @@
MUST sit on the host where ` --_calendar-accent- * ` cascades — the recipe ' s ` : root `
end defaults are the nominal public default ( start is independently themeable ,
end tracks the accent ) . * /
--calendar-range-end-solid : var ( --_ calendar-accent -solid) ;
--calendar-range-end-solid-hover : var ( --_ calendar-accent -solid-hover) ;
--calendar-range-end-border : var ( --_ calendar-accent -solid) ;
--calendar-range-end-solid : var ( --_ range-calendar-palette -solid) ;
--calendar-range-end-solid-hover : var ( --_ range-calendar-palette -solid-hover) ;
--calendar-range-end-border : var ( --_ range-calendar-palette -solid) ;
--calendar-range-end-text : var ( --calendar-day-selected-color ) ;
display : inline-flex ;
@ -100,73 +95,19 @@
box-shadow : none ;
}
/* ── Color cascades ─────────────────────────────────────────────────── */
[ data-range-calendar ] [ data-color = 'secondary' ] {
--_calendar-accent-solid : var ( --color-secondary-solid ) ;
--_calendar-accent-solid-hover : var ( --color-secondary-solid-hover ) ;
--_calendar-accent-track : var ( --color-secondary-track ) ;
--_calendar-accent-border : var ( --color-secondary-border ) ;
--_calendar-accent-text : var ( --color-secondary-text ) ;
}
[ data-range-calendar ] [ data-color = 'neutral' ] {
--_calendar-accent-solid : var ( --color-neutral-solid ) ;
--_calendar-accent-solid-hover : var ( --color-neutral-solid-hover ) ;
--_calendar-accent-track : var ( --color-neutral-track ) ;
--_calendar-accent-border : var ( --color-neutral-border ) ;
--_calendar-accent-text : var ( --color-neutral-text ) ;
}
[ data-range-calendar ] [ data-color = 'affirm' ] {
--_calendar-accent-solid : var ( --color-affirm-solid ) ;
--_calendar-accent-solid-hover : var ( --color-affirm-solid-hover ) ;
--_calendar-accent-track : var ( --color-affirm-track ) ;
--_calendar-accent-border : var ( --color-affirm-border ) ;
--_calendar-accent-text : var ( --color-affirm-text ) ;
/ * When the end accent IS ` affirm ` , swap the start endpoint to
secondary so the two endpoints stay visually distinct . * /
--calendar-range-start-solid : var ( --color-secondary-solid ) ;
--calendar-range-start-solid-hover : var ( --color-secondary-solid-hover ) ;
--calendar-range-start-border : var ( --color-secondary-border ) ;
--calendar-range-start-text : var ( --color-secondary-contrast ) ;
}
/ * ─ ─ Endpoint distinctness ( per-role START swap ) ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
The END endpoint tracks the palette ( ` --_range-calendar-palette- * ` , driven by
the shared forward for roles / 33 scales / custom ) . When the palette resolves
to affirm / fulfill , swap the START endpoint to secondary so the two endpoints
never blend — a distinctness refinement , not part of the palette . * /
[ data-range-calendar ] [ data-color = 'affirm' ] ,
[ data-range-calendar ] [ data-color = 'fulfill' ] {
--_calendar-accent-solid : var ( --color-fulfill-solid ) ;
--_calendar-accent-solid-hover : var ( --color-fulfill-solid-hover ) ;
--_calendar-accent-track : var ( --color-fulfill-track ) ;
--_calendar-accent-border : var ( --color-fulfill-border ) ;
--_calendar-accent-text : var ( --color-fulfill-text ) ;
--calendar-range-start-solid : var ( --color-secondary-solid ) ;
--calendar-range-start-solid-hover : var ( --color-secondary-solid-hover ) ;
--calendar-range-start-border : var ( --color-secondary-border ) ;
--calendar-range-start-text : var ( --color-secondary-contrast ) ;
}
[ data-range-calendar ] [ data-color = 'risk' ] {
--_calendar-accent-solid : var ( --color-risk-solid ) ;
--_calendar-accent-solid-hover : var ( --color-risk-solid-hover ) ;
--_calendar-accent-track : var ( --color-risk-track ) ;
--_calendar-accent-border : var ( --color-risk-border ) ;
--_calendar-accent-text : var ( --color-risk-text ) ;
}
[ data-range-calendar ] [ data-color = 'threat' ] {
--_calendar-accent-solid : var ( --color-threat-solid ) ;
--_calendar-accent-solid-hover : var ( --color-threat-solid-hover ) ;
--_calendar-accent-track : var ( --color-threat-track ) ;
--_calendar-accent-border : var ( --color-threat-border ) ;
--_calendar-accent-text : var ( --color-threat-text ) ;
}
[ data-range-calendar ] [ data-color = 'loss' ] {
--_calendar-accent-solid : var ( --color-loss-solid ) ;
--_calendar-accent-solid-hover : var ( --color-loss-solid-hover ) ;
--_calendar-accent-track : var ( --color-loss-track ) ;
--_calendar-accent-border : var ( --color-loss-border ) ;
--_calendar-accent-text : var ( --color-loss-text ) ;
}
/* ── Header + nav controls ──────────────────────────────────────────── */
[ data-range-calendar-header ] {
display : grid ;
@ -277,7 +218,7 @@
[ data-range-calendar-cell ] [ data-in-range ] ,
[ data-range-calendar-cell ] [ data-in-preview-range ] {
background : var ( --_ calendar-accent -track) ;
background : var ( --_ range-calendar-palette -track) ;
}
/* ── Day cells + range-specific states ──────────────────────────────── */
@ -370,21 +311,21 @@
[ data-range-calendar-day ] [ data-in-range ] : not ( [ data-selected ] ) {
border-color : transparent ;
background : transparent ;
color : var ( --_ calendar-accent -text) ;
color : var ( --_ range-calendar-palette -text) ;
}
[ data-range-calendar-day ] [ data-preview-start ] ,
[ data-range-calendar-day ] [ data-preview-end ] ,
[ data-range-calendar-day ] [ data-in-preview-range ] : not ( [ data-selected ] ) {
border-color : var ( --_ calendar-accent -border) ;
border-color : var ( --_ range-calendar-palette -border) ;
background : transparent ;
color : var ( --_ calendar-accent -text) ;
color : var ( --_ range-calendar-palette -text) ;
}
[ data-range-calendar-day ] [ data-focused ] : not ( [ data-selected ] ) {
border-color : var ( --_ calendar-accent -border) ;
background : var ( --_ calendar-accent -track) ;
color : var ( --_ calendar-accent -text) ;
border-color : var ( --_ range-calendar-palette -border) ;
background : var ( --_ range-calendar-palette -track) ;
color : var ( --_ range-calendar-palette -text) ;
}
[ data-range-calendar-day ] [ data-today ] : not ( [ data-selected ] ) {