@birdycom/omniacss 0.11.0 → 0.11.2
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.
- package/LICENSE +21 -21
- package/README.md +44 -44
- package/dist/oc-theme.css +1 -1
- package/dist/omnia.css +2 -1
- package/dist/omnia.min.css +1 -1
- package/dist/omnia.starter.css +2 -0
- package/dist/omnia.starter.min.css +1 -1
- package/dist/tokens/omnia.dtcg.json +2 -2
- package/dist/tokens/omnia.tokens.json +1 -1
- package/dist/tokens/omnia_tokens.py +2 -2
- package/package.json +63 -63
- package/scss/utilities/_anchor_positioning.scss +65 -65
- package/scss/utilities/_animation_properties.scss +143 -143
- package/scss/utilities/_borders_extended.scss +97 -97
- package/scss/utilities/_borders_outlines.scss +161 -161
- package/scss/utilities/_containment.scss +82 -82
- package/scss/utilities/_css_functions.scss +34 -34
- package/scss/utilities/_dark_mode.scss +117 -117
- package/scss/utilities/_drop_shadow_colors.scss +26 -26
- package/scss/utilities/_experimental_css.scss +149 -149
- package/scss/utilities/_flexbox.scss +317 -317
- package/scss/utilities/_font_variants.scss +139 -139
- package/scss/utilities/_gap.scss +103 -103
- package/scss/utilities/_gradient_stops.scss +48 -48
- package/scss/utilities/_grid.scss +672 -672
- package/scss/utilities/_layout_extras.scss +171 -171
- package/scss/utilities/_layout_flow.scss +210 -210
- package/scss/utilities/_mask_extras.scss +62 -62
- package/scss/utilities/_motion_transforms.scss +167 -167
- package/scss/utilities/_scroll_animations.scss +80 -80
- package/scss/utilities/_scrollbar.scss +2 -1
- package/scss/utilities/_shadow_tokens.scss +21 -21
- package/scss/utilities/_shapes.scss +72 -72
- package/scss/utilities/_sizing_logical.scss +99 -99
- package/scss/utilities/_starting_style.scss +53 -53
- package/scss/utilities/_state_variants.scss +196 -196
- package/scss/utilities/_svg.scss +100 -100
- package/scss/utilities/_table_advanced.scss +19 -19
- package/scss/utilities/_typography_advanced.scss +124 -124
- package/scss/utilities/_typography_modern.scss +83 -83
- package/scss/utilities/_view_transitions.scss +64 -64
- package/scss/utilities/_writing_modes.scss +72 -72
- package/scss/variables/_hulp.scss +107 -107
- package/scss/variables/_variables_effects.scss +108 -108
- package/src/postcss.mjs +43 -43
- package/src/tokens.mjs +377 -377
- package/src/variants.mjs +278 -278
- package/tokens/semantic.json +80 -80
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_containment.scss
|
|
3
|
-
// Description: Container queries, containment and content-visibility utilities (CSS Containment Level 2/3).
|
|
4
|
-
// Copyright: 2021-2026 Birdycom
|
|
5
|
-
// Author: Serge Cools
|
|
6
|
-
// Version: 0.3.0
|
|
7
|
-
// Framework: OmniaCSS
|
|
8
|
-
// Purpose: Generate .container-*, .cq-name-*, .contain-*, .content-{auto,visible,hidden}, .contain-intrinsic-*
|
|
9
|
-
// and container query variants (.cq-xs\:flex, .cq-md\:grid-cols-3, ...).
|
|
10
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries
|
|
11
|
-
// Note: .cq-inline / .cq-normal stay in _container.scss (backwards compatible aliases).
|
|
12
|
-
// Map: container-type -> container-name -> contain -> content-visibility -> intrinsic size -> @container variants
|
|
13
|
-
|
|
14
|
-
/* Container type — makes an element a query container */
|
|
15
|
-
.container-normal { container-type: normal; }
|
|
16
|
-
.container-size { container-type: size; }
|
|
17
|
-
.container-inline-size { container-type: inline-size; }
|
|
18
|
-
.container-scroll-state { container-type: scroll-state; }
|
|
19
|
-
.cq-size { container-type: size; }
|
|
20
|
-
.cq-scroll-state { container-type: scroll-state; }
|
|
21
|
-
|
|
22
|
-
/* Container name — target a specific container in @container rules */
|
|
23
|
-
.cq-name-none { container-name: none; }
|
|
24
|
-
.cq-name-main { container-name: main; }
|
|
25
|
-
.cq-name-sidebar { container-name: sidebar; }
|
|
26
|
-
.cq-name-card { container-name: card; }
|
|
27
|
-
|
|
28
|
-
/* Contain — isolate layout, paint, style and size calculations */
|
|
29
|
-
.contain-none { contain: none; }
|
|
30
|
-
.contain-strict { contain: strict; }
|
|
31
|
-
.contain-content { contain: content; }
|
|
32
|
-
.contain-size { contain: size; }
|
|
33
|
-
.contain-inline-size { contain: inline-size; }
|
|
34
|
-
.contain-layout { contain: layout; }
|
|
35
|
-
.contain-style { contain: style; }
|
|
36
|
-
.contain-paint { contain: paint; }
|
|
37
|
-
|
|
38
|
-
/* Content visibility — skip rendering work for off-screen content */
|
|
39
|
-
.content-visible { content-visibility: visible; }
|
|
40
|
-
.content-auto { content-visibility: auto; }
|
|
41
|
-
.content-hidden { content-visibility: hidden; }
|
|
42
|
-
|
|
43
|
-
/* Contain intrinsic size — placeholder size for content-visibility: auto */
|
|
44
|
-
.contain-intrinsic-none { contain-intrinsic-size: none; }
|
|
45
|
-
.contain-intrinsic-auto-sm { contain-intrinsic-size: auto 200px; }
|
|
46
|
-
.contain-intrinsic-auto-md { contain-intrinsic-size: auto 500px; }
|
|
47
|
-
.contain-intrinsic-auto-lg { contain-intrinsic-size: auto 1000px; }
|
|
48
|
-
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
// Container query variants — same idea as _responsive.scss, but based on the
|
|
51
|
-
// nearest query container (.container-inline-size / .cq-inline) instead of
|
|
52
|
-
// the viewport. Pattern: .cq-{size}\:{utility}
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
$_cq-breakpoints: (
|
|
55
|
-
'xs': 20rem,
|
|
56
|
-
'sm': 24rem,
|
|
57
|
-
'md': 28rem,
|
|
58
|
-
'lg': 32rem,
|
|
59
|
-
'xl': 36rem
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
@each $prefix, $min-width in $_cq-breakpoints {
|
|
63
|
-
@container (min-width: #{$min-width}) {
|
|
64
|
-
// Display
|
|
65
|
-
.cq-#{$prefix}\:block { display: block; }
|
|
66
|
-
.cq-#{$prefix}\:hidden { display: none; }
|
|
67
|
-
.cq-#{$prefix}\:flex { display: flex; }
|
|
68
|
-
.cq-#{$prefix}\:grid { display: grid; }
|
|
69
|
-
.cq-#{$prefix}\:inline-flex { display: inline-flex; }
|
|
70
|
-
|
|
71
|
-
// Flex direction
|
|
72
|
-
.cq-#{$prefix}\:flex-row { flex-direction: row; }
|
|
73
|
-
.cq-#{$prefix}\:flex-col { flex-direction: column; }
|
|
74
|
-
|
|
75
|
-
// Grid template columns (1-6)
|
|
76
|
-
@for $i from 1 through 6 {
|
|
77
|
-
.cq-#{$prefix}\:grid-cols-#{$i} {
|
|
78
|
-
grid-template-columns: repeat(#{$i}, minmax(0, 1fr));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_containment.scss
|
|
3
|
+
// Description: Container queries, containment and content-visibility utilities (CSS Containment Level 2/3).
|
|
4
|
+
// Copyright: 2021-2026 Birdycom
|
|
5
|
+
// Author: Serge Cools
|
|
6
|
+
// Version: 0.3.0
|
|
7
|
+
// Framework: OmniaCSS
|
|
8
|
+
// Purpose: Generate .container-*, .cq-name-*, .contain-*, .content-{auto,visible,hidden}, .contain-intrinsic-*
|
|
9
|
+
// and container query variants (.cq-xs\:flex, .cq-md\:grid-cols-3, ...).
|
|
10
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries
|
|
11
|
+
// Note: .cq-inline / .cq-normal stay in _container.scss (backwards compatible aliases).
|
|
12
|
+
// Map: container-type -> container-name -> contain -> content-visibility -> intrinsic size -> @container variants
|
|
13
|
+
|
|
14
|
+
/* Container type — makes an element a query container */
|
|
15
|
+
.container-normal { container-type: normal; }
|
|
16
|
+
.container-size { container-type: size; }
|
|
17
|
+
.container-inline-size { container-type: inline-size; }
|
|
18
|
+
.container-scroll-state { container-type: scroll-state; }
|
|
19
|
+
.cq-size { container-type: size; }
|
|
20
|
+
.cq-scroll-state { container-type: scroll-state; }
|
|
21
|
+
|
|
22
|
+
/* Container name — target a specific container in @container rules */
|
|
23
|
+
.cq-name-none { container-name: none; }
|
|
24
|
+
.cq-name-main { container-name: main; }
|
|
25
|
+
.cq-name-sidebar { container-name: sidebar; }
|
|
26
|
+
.cq-name-card { container-name: card; }
|
|
27
|
+
|
|
28
|
+
/* Contain — isolate layout, paint, style and size calculations */
|
|
29
|
+
.contain-none { contain: none; }
|
|
30
|
+
.contain-strict { contain: strict; }
|
|
31
|
+
.contain-content { contain: content; }
|
|
32
|
+
.contain-size { contain: size; }
|
|
33
|
+
.contain-inline-size { contain: inline-size; }
|
|
34
|
+
.contain-layout { contain: layout; }
|
|
35
|
+
.contain-style { contain: style; }
|
|
36
|
+
.contain-paint { contain: paint; }
|
|
37
|
+
|
|
38
|
+
/* Content visibility — skip rendering work for off-screen content */
|
|
39
|
+
.content-visible { content-visibility: visible; }
|
|
40
|
+
.content-auto { content-visibility: auto; }
|
|
41
|
+
.content-hidden { content-visibility: hidden; }
|
|
42
|
+
|
|
43
|
+
/* Contain intrinsic size — placeholder size for content-visibility: auto */
|
|
44
|
+
.contain-intrinsic-none { contain-intrinsic-size: none; }
|
|
45
|
+
.contain-intrinsic-auto-sm { contain-intrinsic-size: auto 200px; }
|
|
46
|
+
.contain-intrinsic-auto-md { contain-intrinsic-size: auto 500px; }
|
|
47
|
+
.contain-intrinsic-auto-lg { contain-intrinsic-size: auto 1000px; }
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Container query variants — same idea as _responsive.scss, but based on the
|
|
51
|
+
// nearest query container (.container-inline-size / .cq-inline) instead of
|
|
52
|
+
// the viewport. Pattern: .cq-{size}\:{utility}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
$_cq-breakpoints: (
|
|
55
|
+
'xs': 20rem,
|
|
56
|
+
'sm': 24rem,
|
|
57
|
+
'md': 28rem,
|
|
58
|
+
'lg': 32rem,
|
|
59
|
+
'xl': 36rem
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
@each $prefix, $min-width in $_cq-breakpoints {
|
|
63
|
+
@container (min-width: #{$min-width}) {
|
|
64
|
+
// Display
|
|
65
|
+
.cq-#{$prefix}\:block { display: block; }
|
|
66
|
+
.cq-#{$prefix}\:hidden { display: none; }
|
|
67
|
+
.cq-#{$prefix}\:flex { display: flex; }
|
|
68
|
+
.cq-#{$prefix}\:grid { display: grid; }
|
|
69
|
+
.cq-#{$prefix}\:inline-flex { display: inline-flex; }
|
|
70
|
+
|
|
71
|
+
// Flex direction
|
|
72
|
+
.cq-#{$prefix}\:flex-row { flex-direction: row; }
|
|
73
|
+
.cq-#{$prefix}\:flex-col { flex-direction: column; }
|
|
74
|
+
|
|
75
|
+
// Grid template columns (1-6)
|
|
76
|
+
@for $i from 1 through 6 {
|
|
77
|
+
.cq-#{$prefix}\:grid-cols-#{$i} {
|
|
78
|
+
grid-template-columns: repeat(#{$i}, minmax(0, 1fr));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_css_functions.scss
|
|
3
|
-
// Description: Utilities built on modern CSS functions: tree counting (sibling-index(), sibling-count()) for
|
|
4
|
-
// staggered motion and fanned layouts, and color-mix() alpha steps of currentColor.
|
|
5
|
-
// Copyright: 2021-2026 Birdycom
|
|
6
|
-
// Author: Serge Cools
|
|
7
|
-
// Version: 0.8.2
|
|
8
|
-
// Framework: OmniaCSS
|
|
9
|
-
// Purpose: Progressive enhancement — without sibling-index() the delay/rotation is invalid and falls back to 0.
|
|
10
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/sibling-index
|
|
11
|
-
// Map: stagger -> fan -> currentColor alpha
|
|
12
|
-
|
|
13
|
-
/* Stagger — each child waits (index - 1) × --oc-stagger before its transition or animation starts */
|
|
14
|
-
@each $ms in (30, 60, 100, 150, 250) {
|
|
15
|
-
.stagger-#{$ms} { --oc-stagger: #{$ms}ms; }
|
|
16
|
-
}
|
|
17
|
-
.delay-stagger { transition-delay: calc((sibling-index() - 1) * var(--oc-stagger, 60ms)); }
|
|
18
|
-
.delay-stagger-reverse { transition-delay: calc((sibling-count() - sibling-index()) * var(--oc-stagger, 60ms)); }
|
|
19
|
-
.animate-delay-stagger { animation-delay: calc((sibling-index() - 1) * var(--oc-stagger, 60ms)); }
|
|
20
|
-
|
|
21
|
-
/* Fan — rotate siblings around the middle one, like cards in a hand (set on each child) */
|
|
22
|
-
.fan {
|
|
23
|
-
rotate: calc((sibling-index() - (sibling-count() + 1) / 2) * var(--oc-fan, 6deg));
|
|
24
|
-
transform-origin: 50% 140%;
|
|
25
|
-
}
|
|
26
|
-
@each $deg in (3, 6, 10, 15) {
|
|
27
|
-
.fan-#{$deg} { --oc-fan: #{$deg}deg; }
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/* currentColor alpha — tint a background or border with the text color (works with every text-* color) */
|
|
31
|
-
@each $n in (5, 10, 15, 20, 30, 40, 50, 60, 70, 80) {
|
|
32
|
-
.bg-current-#{$n} { background-color: color-mix(in oklch, currentColor $n * 1%, transparent); }
|
|
33
|
-
.border-current-#{$n} { border-color: color-mix(in oklch, currentColor $n * 1%, transparent); }
|
|
34
|
-
}
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_css_functions.scss
|
|
3
|
+
// Description: Utilities built on modern CSS functions: tree counting (sibling-index(), sibling-count()) for
|
|
4
|
+
// staggered motion and fanned layouts, and color-mix() alpha steps of currentColor.
|
|
5
|
+
// Copyright: 2021-2026 Birdycom
|
|
6
|
+
// Author: Serge Cools
|
|
7
|
+
// Version: 0.8.2
|
|
8
|
+
// Framework: OmniaCSS
|
|
9
|
+
// Purpose: Progressive enhancement — without sibling-index() the delay/rotation is invalid and falls back to 0.
|
|
10
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/sibling-index
|
|
11
|
+
// Map: stagger -> fan -> currentColor alpha
|
|
12
|
+
|
|
13
|
+
/* Stagger — each child waits (index - 1) × --oc-stagger before its transition or animation starts */
|
|
14
|
+
@each $ms in (30, 60, 100, 150, 250) {
|
|
15
|
+
.stagger-#{$ms} { --oc-stagger: #{$ms}ms; }
|
|
16
|
+
}
|
|
17
|
+
.delay-stagger { transition-delay: calc((sibling-index() - 1) * var(--oc-stagger, 60ms)); }
|
|
18
|
+
.delay-stagger-reverse { transition-delay: calc((sibling-count() - sibling-index()) * var(--oc-stagger, 60ms)); }
|
|
19
|
+
.animate-delay-stagger { animation-delay: calc((sibling-index() - 1) * var(--oc-stagger, 60ms)); }
|
|
20
|
+
|
|
21
|
+
/* Fan — rotate siblings around the middle one, like cards in a hand (set on each child) */
|
|
22
|
+
.fan {
|
|
23
|
+
rotate: calc((sibling-index() - (sibling-count() + 1) / 2) * var(--oc-fan, 6deg));
|
|
24
|
+
transform-origin: 50% 140%;
|
|
25
|
+
}
|
|
26
|
+
@each $deg in (3, 6, 10, 15) {
|
|
27
|
+
.fan-#{$deg} { --oc-fan: #{$deg}deg; }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* currentColor alpha — tint a background or border with the text color (works with every text-* color) */
|
|
31
|
+
@each $n in (5, 10, 15, 20, 30, 40, 50, 60, 70, 80) {
|
|
32
|
+
.bg-current-#{$n} { background-color: color-mix(in oklch, currentColor $n * 1%, transparent); }
|
|
33
|
+
.border-current-#{$n} { border-color: color-mix(in oklch, currentColor $n * 1%, transparent); }
|
|
34
|
+
}
|
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
// File: src/scss/utilities/_dark_mode.scss
|
|
2
|
-
// Description: Dark mode variant utilities using dark: prefix.
|
|
3
|
-
// Supports two strategies:
|
|
4
|
-
// 1. Class-based: add .dark class to <html> or <body>
|
|
5
|
-
// 2. Media-based: prefers-color-scheme: dark (automatic)
|
|
6
|
-
// Default strategy: class-based (.dark ancestor selector)
|
|
7
|
-
// Pattern: .dark .dark\:{utility} e.g. dark\:bg-gray-900, dark\:text-white
|
|
8
|
-
// Copyright: 2021-2026 Birdycom
|
|
9
|
-
// Autor: Serge Cools
|
|
10
|
-
// Version: 0.1.6
|
|
11
|
-
// Framework: OmniaCSS
|
|
12
|
-
@use "shadow_tokens" as *;
|
|
13
|
-
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
// Class-based dark mode (.dark ancestor on html/body)
|
|
16
|
-
// Usage: <html class="dark"> or toggle via JS
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
|
|
19
|
-
// Background colors for dark mode
|
|
20
|
-
.dark .dark\:bg-black { background-color: var(--color-black-60); }
|
|
21
|
-
.dark .dark\:bg-white { background-color: var(--color-white-2); }
|
|
22
|
-
.dark .dark\:bg-gray-50 { background-color: var(--color-snow-50); }
|
|
23
|
-
.dark .dark\:bg-gray-100 { background-color: var(--color-linen-30); }
|
|
24
|
-
.dark .dark\:bg-gray-200 { background-color: var(--color-silver-2); }
|
|
25
|
-
.dark .dark\:bg-gray-300 { background-color: var(--color-silver-20); }
|
|
26
|
-
.dark .dark\:bg-gray-400 { background-color: var(--color-gray-20); }
|
|
27
|
-
.dark .dark\:bg-gray-500 { background-color: var(--color-black-2); }
|
|
28
|
-
.dark .dark\:bg-gray-600 { background-color: var(--color-duskblue-20); }
|
|
29
|
-
.dark .dark\:bg-gray-700 { background-color: var(--color-shallowblue-30); }
|
|
30
|
-
.dark .dark\:bg-gray-800 { background-color: var(--color-shallowblue-40); }
|
|
31
|
-
.dark .dark\:bg-gray-900 { background-color: var(--color-shallowblue-50); }
|
|
32
|
-
.dark .dark\:bg-gray-950 { background-color: var(--color-black-40); }
|
|
33
|
-
.dark .dark\:bg-transparent { background-color: transparent; }
|
|
34
|
-
|
|
35
|
-
// Semantic surface colors for dark mode
|
|
36
|
-
.dark .dark\:bg-surface { background-color: var(--color-shallowblue-50); }
|
|
37
|
-
.dark .dark\:bg-surface-soft { background-color: var(--color-shallowblue-40); }
|
|
38
|
-
.dark .dark\:bg-surface-raised { background-color: var(--color-shallowblue-30); }
|
|
39
|
-
|
|
40
|
-
// Text colors for dark mode
|
|
41
|
-
.dark .dark\:text-white { color: var(--color-white-2); }
|
|
42
|
-
.dark .dark\:text-black { color: var(--color-black-60); }
|
|
43
|
-
.dark .dark\:text-gray-50 { color: var(--color-snow-50); }
|
|
44
|
-
.dark .dark\:text-gray-100 { color: var(--color-linen-30); }
|
|
45
|
-
.dark .dark\:text-gray-200 { color: var(--color-silver-2); }
|
|
46
|
-
.dark .dark\:text-gray-300 { color: var(--color-silver-20); }
|
|
47
|
-
.dark .dark\:text-gray-400 { color: var(--color-gray-20); }
|
|
48
|
-
.dark .dark\:text-gray-500 { color: var(--color-black-2); }
|
|
49
|
-
.dark .dark\:text-gray-600 { color: var(--color-duskblue-20); }
|
|
50
|
-
.dark .dark\:text-gray-700 { color: var(--color-shallowblue-30); }
|
|
51
|
-
.dark .dark\:text-gray-800 { color: var(--color-shallowblue-40); }
|
|
52
|
-
.dark .dark\:text-gray-900 { color: var(--color-shallowblue-50); }
|
|
53
|
-
|
|
54
|
-
// Semantic text colors
|
|
55
|
-
.dark .dark\:text-muted { color: var(--color-gray-20); }
|
|
56
|
-
.dark .dark\:text-soft { color: var(--color-silver-20); }
|
|
57
|
-
.dark .dark\:text-primary { color: var(--color-silver-2); }
|
|
58
|
-
|
|
59
|
-
// Border colors for dark mode
|
|
60
|
-
.dark .dark\:border-gray-200 { border-color: var(--color-silver-2); }
|
|
61
|
-
.dark .dark\:border-gray-300 { border-color: var(--color-silver-20); }
|
|
62
|
-
.dark .dark\:border-gray-500 { border-color: var(--color-black-2); }
|
|
63
|
-
.dark .dark\:border-gray-600 { border-color: var(--color-duskblue-20); }
|
|
64
|
-
.dark .dark\:border-gray-700 { border-color: var(--color-shallowblue-30); }
|
|
65
|
-
.dark .dark\:border-gray-800 { border-color: var(--color-shallowblue-40); }
|
|
66
|
-
.dark .dark\:border-transparent { border-color: transparent; }
|
|
67
|
-
|
|
68
|
-
// Opacity for dark mode
|
|
69
|
-
.dark .dark\:opacity-0 { opacity: 0; }
|
|
70
|
-
.dark .dark\:opacity-25 { opacity: 0.25; }
|
|
71
|
-
.dark .dark\:opacity-50 { opacity: 0.5; }
|
|
72
|
-
.dark .dark\:opacity-75 { opacity: 0.75; }
|
|
73
|
-
.dark .dark\:opacity-100 { opacity: 1; }
|
|
74
|
-
|
|
75
|
-
// Shadow utilities for dark mode (softer shadows on dark backgrounds)
|
|
76
|
-
.dark .dark\:shadow-none { box-shadow: none; }
|
|
77
|
-
.dark .dark\:shadow-sm { box-shadow: #{$oc-dark-shadow-sm}; }
|
|
78
|
-
.dark .dark\:shadow-md { box-shadow: #{$oc-dark-shadow-md}; }
|
|
79
|
-
.dark .dark\:shadow-lg { box-shadow: #{$oc-dark-shadow-lg}; }
|
|
80
|
-
|
|
81
|
-
// Ring / outline for dark mode
|
|
82
|
-
.dark .dark\:outline-gray-600 { outline-color: var(--color-duskblue-20); }
|
|
83
|
-
.dark .dark\:outline-gray-700 { outline-color: var(--color-shallowblue-30); }
|
|
84
|
-
|
|
85
|
-
// Display overrides (e.g. show/hide elements in dark mode)
|
|
86
|
-
.dark .dark\:hidden { display: none; }
|
|
87
|
-
.dark .dark\:block { display: block; }
|
|
88
|
-
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
// Media-based dark mode (automatic, respects OS preference)
|
|
91
|
-
// These use @media (prefers-color-scheme: dark) for auto-detection.
|
|
92
|
-
// Classes use the auto-dark: prefix.
|
|
93
|
-
// ---------------------------------------------------------------------------
|
|
94
|
-
|
|
95
|
-
@media (prefers-color-scheme: dark) {
|
|
96
|
-
// Background
|
|
97
|
-
.auto-dark\:bg-gray-800 { background-color: var(--color-shallowblue-40); }
|
|
98
|
-
.auto-dark\:bg-gray-900 { background-color: var(--color-shallowblue-50); }
|
|
99
|
-
.auto-dark\:bg-gray-950 { background-color: var(--color-black-40); }
|
|
100
|
-
.auto-dark\:bg-surface { background-color: var(--color-shallowblue-50); }
|
|
101
|
-
|
|
102
|
-
// Text
|
|
103
|
-
.auto-dark\:text-white { color: var(--color-white-2); }
|
|
104
|
-
.auto-dark\:text-gray-100 { color: var(--color-linen-30); }
|
|
105
|
-
.auto-dark\:text-gray-200 { color: var(--color-silver-2); }
|
|
106
|
-
.auto-dark\:text-gray-300 { color: var(--color-silver-20); }
|
|
107
|
-
.auto-dark\:text-muted { color: var(--color-gray-20); }
|
|
108
|
-
|
|
109
|
-
// Border
|
|
110
|
-
.auto-dark\:border-gray-700 { border-color: var(--color-shallowblue-30); }
|
|
111
|
-
.auto-dark\:border-gray-800 { border-color: var(--color-shallowblue-40); }
|
|
112
|
-
|
|
113
|
-
// Shadow
|
|
114
|
-
.auto-dark\:shadow-none { box-shadow: none; }
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/* End dark mode utilities */
|
|
1
|
+
// File: src/scss/utilities/_dark_mode.scss
|
|
2
|
+
// Description: Dark mode variant utilities using dark: prefix.
|
|
3
|
+
// Supports two strategies:
|
|
4
|
+
// 1. Class-based: add .dark class to <html> or <body>
|
|
5
|
+
// 2. Media-based: prefers-color-scheme: dark (automatic)
|
|
6
|
+
// Default strategy: class-based (.dark ancestor selector)
|
|
7
|
+
// Pattern: .dark .dark\:{utility} e.g. dark\:bg-gray-900, dark\:text-white
|
|
8
|
+
// Copyright: 2021-2026 Birdycom
|
|
9
|
+
// Autor: Serge Cools
|
|
10
|
+
// Version: 0.1.6
|
|
11
|
+
// Framework: OmniaCSS
|
|
12
|
+
@use "shadow_tokens" as *;
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Class-based dark mode (.dark ancestor on html/body)
|
|
16
|
+
// Usage: <html class="dark"> or toggle via JS
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
// Background colors for dark mode
|
|
20
|
+
.dark .dark\:bg-black { background-color: var(--color-black-60); }
|
|
21
|
+
.dark .dark\:bg-white { background-color: var(--color-white-2); }
|
|
22
|
+
.dark .dark\:bg-gray-50 { background-color: var(--color-snow-50); }
|
|
23
|
+
.dark .dark\:bg-gray-100 { background-color: var(--color-linen-30); }
|
|
24
|
+
.dark .dark\:bg-gray-200 { background-color: var(--color-silver-2); }
|
|
25
|
+
.dark .dark\:bg-gray-300 { background-color: var(--color-silver-20); }
|
|
26
|
+
.dark .dark\:bg-gray-400 { background-color: var(--color-gray-20); }
|
|
27
|
+
.dark .dark\:bg-gray-500 { background-color: var(--color-black-2); }
|
|
28
|
+
.dark .dark\:bg-gray-600 { background-color: var(--color-duskblue-20); }
|
|
29
|
+
.dark .dark\:bg-gray-700 { background-color: var(--color-shallowblue-30); }
|
|
30
|
+
.dark .dark\:bg-gray-800 { background-color: var(--color-shallowblue-40); }
|
|
31
|
+
.dark .dark\:bg-gray-900 { background-color: var(--color-shallowblue-50); }
|
|
32
|
+
.dark .dark\:bg-gray-950 { background-color: var(--color-black-40); }
|
|
33
|
+
.dark .dark\:bg-transparent { background-color: transparent; }
|
|
34
|
+
|
|
35
|
+
// Semantic surface colors for dark mode
|
|
36
|
+
.dark .dark\:bg-surface { background-color: var(--color-shallowblue-50); }
|
|
37
|
+
.dark .dark\:bg-surface-soft { background-color: var(--color-shallowblue-40); }
|
|
38
|
+
.dark .dark\:bg-surface-raised { background-color: var(--color-shallowblue-30); }
|
|
39
|
+
|
|
40
|
+
// Text colors for dark mode
|
|
41
|
+
.dark .dark\:text-white { color: var(--color-white-2); }
|
|
42
|
+
.dark .dark\:text-black { color: var(--color-black-60); }
|
|
43
|
+
.dark .dark\:text-gray-50 { color: var(--color-snow-50); }
|
|
44
|
+
.dark .dark\:text-gray-100 { color: var(--color-linen-30); }
|
|
45
|
+
.dark .dark\:text-gray-200 { color: var(--color-silver-2); }
|
|
46
|
+
.dark .dark\:text-gray-300 { color: var(--color-silver-20); }
|
|
47
|
+
.dark .dark\:text-gray-400 { color: var(--color-gray-20); }
|
|
48
|
+
.dark .dark\:text-gray-500 { color: var(--color-black-2); }
|
|
49
|
+
.dark .dark\:text-gray-600 { color: var(--color-duskblue-20); }
|
|
50
|
+
.dark .dark\:text-gray-700 { color: var(--color-shallowblue-30); }
|
|
51
|
+
.dark .dark\:text-gray-800 { color: var(--color-shallowblue-40); }
|
|
52
|
+
.dark .dark\:text-gray-900 { color: var(--color-shallowblue-50); }
|
|
53
|
+
|
|
54
|
+
// Semantic text colors
|
|
55
|
+
.dark .dark\:text-muted { color: var(--color-gray-20); }
|
|
56
|
+
.dark .dark\:text-soft { color: var(--color-silver-20); }
|
|
57
|
+
.dark .dark\:text-primary { color: var(--color-silver-2); }
|
|
58
|
+
|
|
59
|
+
// Border colors for dark mode
|
|
60
|
+
.dark .dark\:border-gray-200 { border-color: var(--color-silver-2); }
|
|
61
|
+
.dark .dark\:border-gray-300 { border-color: var(--color-silver-20); }
|
|
62
|
+
.dark .dark\:border-gray-500 { border-color: var(--color-black-2); }
|
|
63
|
+
.dark .dark\:border-gray-600 { border-color: var(--color-duskblue-20); }
|
|
64
|
+
.dark .dark\:border-gray-700 { border-color: var(--color-shallowblue-30); }
|
|
65
|
+
.dark .dark\:border-gray-800 { border-color: var(--color-shallowblue-40); }
|
|
66
|
+
.dark .dark\:border-transparent { border-color: transparent; }
|
|
67
|
+
|
|
68
|
+
// Opacity for dark mode
|
|
69
|
+
.dark .dark\:opacity-0 { opacity: 0; }
|
|
70
|
+
.dark .dark\:opacity-25 { opacity: 0.25; }
|
|
71
|
+
.dark .dark\:opacity-50 { opacity: 0.5; }
|
|
72
|
+
.dark .dark\:opacity-75 { opacity: 0.75; }
|
|
73
|
+
.dark .dark\:opacity-100 { opacity: 1; }
|
|
74
|
+
|
|
75
|
+
// Shadow utilities for dark mode (softer shadows on dark backgrounds)
|
|
76
|
+
.dark .dark\:shadow-none { box-shadow: none; }
|
|
77
|
+
.dark .dark\:shadow-sm { box-shadow: #{$oc-dark-shadow-sm}; }
|
|
78
|
+
.dark .dark\:shadow-md { box-shadow: #{$oc-dark-shadow-md}; }
|
|
79
|
+
.dark .dark\:shadow-lg { box-shadow: #{$oc-dark-shadow-lg}; }
|
|
80
|
+
|
|
81
|
+
// Ring / outline for dark mode
|
|
82
|
+
.dark .dark\:outline-gray-600 { outline-color: var(--color-duskblue-20); }
|
|
83
|
+
.dark .dark\:outline-gray-700 { outline-color: var(--color-shallowblue-30); }
|
|
84
|
+
|
|
85
|
+
// Display overrides (e.g. show/hide elements in dark mode)
|
|
86
|
+
.dark .dark\:hidden { display: none; }
|
|
87
|
+
.dark .dark\:block { display: block; }
|
|
88
|
+
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Media-based dark mode (automatic, respects OS preference)
|
|
91
|
+
// These use @media (prefers-color-scheme: dark) for auto-detection.
|
|
92
|
+
// Classes use the auto-dark: prefix.
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
|
|
95
|
+
@media (prefers-color-scheme: dark) {
|
|
96
|
+
// Background
|
|
97
|
+
.auto-dark\:bg-gray-800 { background-color: var(--color-shallowblue-40); }
|
|
98
|
+
.auto-dark\:bg-gray-900 { background-color: var(--color-shallowblue-50); }
|
|
99
|
+
.auto-dark\:bg-gray-950 { background-color: var(--color-black-40); }
|
|
100
|
+
.auto-dark\:bg-surface { background-color: var(--color-shallowblue-50); }
|
|
101
|
+
|
|
102
|
+
// Text
|
|
103
|
+
.auto-dark\:text-white { color: var(--color-white-2); }
|
|
104
|
+
.auto-dark\:text-gray-100 { color: var(--color-linen-30); }
|
|
105
|
+
.auto-dark\:text-gray-200 { color: var(--color-silver-2); }
|
|
106
|
+
.auto-dark\:text-gray-300 { color: var(--color-silver-20); }
|
|
107
|
+
.auto-dark\:text-muted { color: var(--color-gray-20); }
|
|
108
|
+
|
|
109
|
+
// Border
|
|
110
|
+
.auto-dark\:border-gray-700 { border-color: var(--color-shallowblue-30); }
|
|
111
|
+
.auto-dark\:border-gray-800 { border-color: var(--color-shallowblue-40); }
|
|
112
|
+
|
|
113
|
+
// Shadow
|
|
114
|
+
.auto-dark\:shadow-none { box-shadow: none; }
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* End dark mode utilities */
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_drop_shadow_colors.scss
|
|
3
|
-
// Description: Color classes for the drop-shadow filter (.drop-shadow-sm … -lg read --oc-shadow-color).
|
|
4
|
-
// Copyright: 2021-2026 Birdycom
|
|
5
|
-
// Author: Serge Cools
|
|
6
|
-
// Version: 0.4.0
|
|
7
|
-
// Framework: OmniaCSS
|
|
8
|
-
// Purpose: Generate .drop-shadow-current, .drop-shadow-transparent and .drop-shadow-{omnia color} (also hover: via the engine).
|
|
9
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/drop-shadow
|
|
10
|
-
// Note: class="drop-shadow-lg drop-shadow-vividblue" — the color class only sets --oc-shadow-color,
|
|
11
|
-
// the size class draws the shadow with a 25-30% alpha of that color.
|
|
12
|
-
// Map: keywords -> every Omnia color
|
|
13
|
-
|
|
14
|
-
@use "sass:string";
|
|
15
|
-
@use '../utilities/' as *;
|
|
16
|
-
|
|
17
|
-
.drop-shadow-current { --oc-shadow-color: currentcolor; }
|
|
18
|
-
.drop-shadow-transparent { --oc-shadow-color: transparent; }
|
|
19
|
-
|
|
20
|
-
@each $group, $families in $omnia-colors {
|
|
21
|
-
@each $family, $colors in $families {
|
|
22
|
-
@each $color, $props in $colors {
|
|
23
|
-
.drop-shadow-#{string.to-lower-case(#{$color})} { --oc-shadow-color: var(--color-#{string.to-lower-case(#{$color})}-50); }
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_drop_shadow_colors.scss
|
|
3
|
+
// Description: Color classes for the drop-shadow filter (.drop-shadow-sm … -lg read --oc-shadow-color).
|
|
4
|
+
// Copyright: 2021-2026 Birdycom
|
|
5
|
+
// Author: Serge Cools
|
|
6
|
+
// Version: 0.4.0
|
|
7
|
+
// Framework: OmniaCSS
|
|
8
|
+
// Purpose: Generate .drop-shadow-current, .drop-shadow-transparent and .drop-shadow-{omnia color} (also hover: via the engine).
|
|
9
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/drop-shadow
|
|
10
|
+
// Note: class="drop-shadow-lg drop-shadow-vividblue" — the color class only sets --oc-shadow-color,
|
|
11
|
+
// the size class draws the shadow with a 25-30% alpha of that color.
|
|
12
|
+
// Map: keywords -> every Omnia color
|
|
13
|
+
|
|
14
|
+
@use "sass:string";
|
|
15
|
+
@use '../utilities/' as *;
|
|
16
|
+
|
|
17
|
+
.drop-shadow-current { --oc-shadow-color: currentcolor; }
|
|
18
|
+
.drop-shadow-transparent { --oc-shadow-color: transparent; }
|
|
19
|
+
|
|
20
|
+
@each $group, $families in $omnia-colors {
|
|
21
|
+
@each $family, $colors in $families {
|
|
22
|
+
@each $color, $props in $colors {
|
|
23
|
+
.drop-shadow-#{string.to-lower-case(#{$color})} { --oc-shadow-color: var(--color-#{string.to-lower-case(#{$color})}-50); }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|