@semanticus/semanticus-css 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/semanticus-semantics.css +1 -1
  2. package/dist/semanticus.css +2 -2
  3. package/dist/semanticus.size.pico.css +1 -1
  4. package/package.json +11 -8
  5. package/src/semantics/_misc.css +3 -0
  6. package/src/semantics/attributes/_popover.css +13 -0
  7. package/src/semantics/attributes/_role-group-search.css +140 -0
  8. package/src/semantics/elements/_abbr.css +5 -0
  9. package/src/semantics/elements/_address.css +7 -0
  10. package/src/semantics/elements/_article.css +6 -0
  11. package/src/semantics/{_aside.css → elements/_aside.css} +1 -1
  12. package/src/semantics/elements/_blockquote.css +18 -0
  13. package/src/semantics/{_button.css → elements/_button.css} +2 -2
  14. package/src/semantics/{_code.css → elements/_code.css} +10 -7
  15. package/src/semantics/elements/_del.css +3 -0
  16. package/src/semantics/{_details.css → elements/_details.css} +9 -9
  17. package/src/semantics/elements/_dialog.css +117 -0
  18. package/src/semantics/elements/_footer.css +13 -0
  19. package/src/semantics/elements/_header.css +13 -0
  20. package/src/semantics/elements/_headings.css +34 -0
  21. package/src/semantics/elements/_hgroup.css +14 -0
  22. package/src/semantics/{_hr.css → elements/_hr.css} +1 -1
  23. package/src/semantics/{_input.css → elements/_input.css} +1 -2
  24. package/src/semantics/elements/_ins.css +4 -0
  25. package/src/semantics/{_links.css → elements/_links.css} +11 -4
  26. package/src/semantics/elements/_lists.css +22 -0
  27. package/src/semantics/elements/_main.css +7 -0
  28. package/src/semantics/elements/_mark.css +6 -0
  29. package/src/semantics/{_nav.css → elements/_nav.css} +4 -4
  30. package/src/semantics/elements/_p.css +11 -0
  31. package/src/semantics/elements/_section.css +7 -0
  32. package/src/semantics/elements/_strong.css +4 -0
  33. package/src/semantics/elements/_sub.css +7 -0
  34. package/src/semantics/elements/_sup.css +7 -0
  35. package/src/semantics/{_table.css → elements/_table.css} +7 -2
  36. package/src/semantics/modules.css +47 -32
  37. package/src/sizes/pico.css +14 -9
  38. package/src/variables/_colors.css +11 -22
  39. package/src/variables/_components.css +59 -47
  40. package/src/variables/_elements.css +0 -5
  41. package/src/variables/_icons.css +12 -0
  42. package/src/variables/_layout.css +18 -23
  43. package/src/variants/_contrast.css +27 -13
  44. package/src/variants/_ghost.css +35 -28
  45. package/src/variants/_pane-panel-card.css +54 -0
  46. package/src/variants/_secondary.css +24 -11
  47. package/src/variants/_sidebar.css +49 -9
  48. package/src/variants/modules.css +4 -5
  49. package/src/semantics/_article.css +0 -12
  50. package/src/semantics/_dialog.css +0 -157
  51. package/src/semantics/_footer.css +0 -12
  52. package/src/semantics/_header.css +0 -12
  53. package/src/semantics/_main.css +0 -10
  54. package/src/semantics/_role-group-search.css +0 -129
  55. package/src/semantics/_section.css +0 -9
  56. package/src/semantics/_typography.css +0 -146
  57. package/src/variants/_card.css +0 -45
  58. package/src/variants/_panel.css +0 -18
  59. /package/src/semantics/{_aria-busy.css → attributes/_aria-busy.css} +0 -0
  60. /package/src/semantics/{_hidden.css → attributes/_hidden.css} +0 -0
  61. /package/src/semantics/{_role-toolbar.css → attributes/_role-toolbar.css} +0 -0
  62. /package/src/semantics/{_role-tooltip.css → attributes/_role-tooltip.css} +0 -0
  63. /package/src/semantics/{_body.css → elements/_body.css} +0 -0
  64. /package/src/semantics/{_document.css → elements/_document.css} +0 -0
  65. /package/src/semantics/{_embedded.css → elements/_embedded.css} +0 -0
  66. /package/src/semantics/{_figure.css → elements/_figure.css} +0 -0
  67. /package/src/semantics/{_progress.css → elements/_progress.css} +0 -0
  68. /package/src/semantics/{_type-checkbox-radio.css → elements/_type-checkbox-radio.css} +0 -0
  69. /package/src/semantics/{_type-color.css → elements/_type-color.css} +0 -0
  70. /package/src/semantics/{_type-date.css → elements/_type-date.css} +0 -0
  71. /package/src/semantics/{_type-file.css → elements/_type-file.css} +0 -0
  72. /package/src/semantics/{_type-range.css → elements/_type-range.css} +0 -0
  73. /package/src/semantics/{_type-search.css → elements/_type-search.css} +0 -0
@@ -41,11 +41,10 @@
41
41
  --transition: 0.2s ease-in-out;
42
42
 
43
43
  /* Spacing - shared base unit */
44
- --spacing: 0.75rem;
44
+ --base-spacing: 0.75rem;
45
45
  --responsive-multiplier: 1;
46
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
46
47
  --typography-spacing-vertical: 1rem;
47
- --block-spacing-vertical: 1.2rem;
48
- --block-spacing-horizontal: 1.2rem;
49
48
  --grid-column-gap: var(--spacing);
50
49
  --grid-row-gap: var(--spacing);
51
50
  --form-element-spacing-vertical: 0.5rem;
@@ -56,26 +55,12 @@
56
55
  --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-primary-focus);
57
56
  --group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color);
58
57
 
59
- /* Modal */
60
- --modal-overlay-backdrop-filter: blur(0.375rem);
61
-
62
58
  /* Navigation */
63
- --nav-link-spacing-vertical: 0.5rem;
64
- --nav-link-spacing-horizontal: 0.5rem;
59
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
65
60
  --nav-breadcrumb-divider: ">";
66
61
 
67
62
  /* Sidebar */
68
63
  --sidebar-width: 25%;
69
-
70
- /* Icons - inline SVG data-URIs used by form elements and UI components */
71
- --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
72
- --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
73
- --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
74
- --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
75
- --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
76
- --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
77
- --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
78
- --icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
79
64
  }
80
65
 
81
66
  /* ==========================================================================
@@ -87,7 +72,9 @@
87
72
  :host {
88
73
  --font-size: 98%;
89
74
  --sidebar-width: max(25%, 150px);
90
- --responsive-multiplier: 1.25;
75
+ --responsive-multiplier: 1.1;
76
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
77
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
91
78
  }
92
79
  }
93
80
 
@@ -96,7 +83,9 @@
96
83
  :host {
97
84
  --font-size: 99%;
98
85
  --sidebar-width: max(22%, 180px);
99
- --responsive-multiplier: 1.5;
86
+ --responsive-multiplier: 1.2;
87
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
88
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
100
89
  }
101
90
  }
102
91
 
@@ -105,7 +94,9 @@
105
94
  :host {
106
95
  --font-size: 100%;
107
96
  --sidebar-width: max(20%, 200px);
108
- --responsive-multiplier: 1.75;
97
+ --responsive-multiplier: 1.3;
98
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
99
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
109
100
  }
110
101
  }
111
102
 
@@ -114,7 +105,9 @@
114
105
  :host {
115
106
  --font-size: 101%;
116
107
  --sidebar-width: max(18%, 220px);
117
- --responsive-multiplier: 1.85;
108
+ --responsive-multiplier: 1.4;
109
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
110
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
118
111
  }
119
112
  }
120
113
 
@@ -123,6 +116,8 @@
123
116
  :host {
124
117
  --font-size: 102%;
125
118
  --sidebar-width: clamp(240px, 16%, 300px);
126
- --responsive-multiplier: 2;
119
+ --responsive-multiplier: 1.5;
120
+ --spacing: calc(var(--base-spacing) * var(--responsive-multiplier));
121
+ --nav-link-spacing: calc(var(--spacing) * 0.5);
127
122
  }
128
123
  }
@@ -17,21 +17,23 @@
17
17
  }
18
18
  }
19
19
 
20
- :is(.panel, button, [type="submit"], [type="button"], [role="button"]).contrast {
21
- --color-background: var(--color-contrast-bg);
22
- --border-color: var(--color-contrast-border);
23
- --color-text: var(--color-contrast-inverse);
24
- }
20
+ :is(button, [type="submit"], [type="button"], [role="button"]) {
21
+ &.contrast {
22
+ --color-background: var(--color-contrast-bg);
23
+ --border-color: var(--color-contrast-border);
24
+ --color-text: var(--color-contrast-inverse);
25
25
 
26
- :is(button, [type="submit"], [type="button"], [role="button"]).contrast:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
27
- --color-background: var(--color-contrast-hover-bg);
28
- --border-color: var(--color-contrast-hover-border);
29
- --color-text: var(--color-contrast-inverse);
30
- }
26
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
27
+ --color-background: var(--color-contrast-hover-bg);
28
+ --border-color: var(--color-contrast-hover-border);
29
+ --color-text: var(--color-contrast-inverse);
30
+ }
31
31
 
32
- :is(button, [type="submit"], [type="button"], [role="button"]).contrast:focus,
33
- :is(button, [type="submit"], [type="button"], [role="button"]).contrast:is([aria-current]:not([aria-current="false"])):focus {
34
- --shadow-lg: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--color-contrast-focus);
32
+ &:focus,
33
+ &:is([aria-current]:not([aria-current="false"])):focus {
34
+ --shadow-lg: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--color-contrast-focus);
35
+ }
36
+ }
35
37
  }
36
38
 
37
39
  /* Accordion chevron dark mode override */
@@ -45,3 +47,15 @@
45
47
  [data-theme="dark"] details summary[role="button"].contrast::after {
46
48
  filter: brightness(0);
47
49
  }
50
+
51
+ :is(.card, .pane, .panel).contrast {
52
+ --color-text: rgb(var(--color-contrast-emphasis-rgb)) !important;
53
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
54
+ --pane-bg: var(--color-contrast-bg-subtle);
55
+ --pane-section-bg: rgba(var(--color-contrast-rgb), 0.6);
56
+ --pane-section-border: var(--color-contrast-border-subtle);
57
+ }
58
+
59
+ :is(.panel).contrast {
60
+ --pane-border: var(--color-contrast-border);
61
+ }
@@ -10,47 +10,54 @@
10
10
  background-color: var(--color-background) !important;
11
11
  }
12
12
 
13
- :is(button, [type="submit"], [type="button"], [role="button"]).ghost {
14
- --color-background: transparent;
15
- --color-text: rgb(var(--color-primary-rgb));
16
- --border-color: rgb(var(--color-primary-rgb));
17
- }
13
+ :is(button, [type="submit"], [type="button"], [role="button"]) {
14
+ &.ghost {
15
+ --color-background: transparent;
16
+ --border-color: rgb(var(--color-primary-rgb));
17
+ --color-text: rgb(var(--color-primary-rgb));
18
18
 
19
- :is(button, [type="submit"], [type="button"], [role="button"]).ghost:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
20
- --color-background: transparent;
21
- --color-text: var(--color-primary-hover);
22
- --border-color: var(--color-primary-hover);
23
- }
19
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
20
+ --color-background: var(--color-primary-hover-bg);
21
+ --border-color: var(--color-primary-hover-border);
22
+ --color-text: var(--color-primary-inverse);
23
+ }
24
24
 
25
- :is(.panel, button, [type="submit"], [type="button"], [role="button"]).ghost.secondary {
26
- --color-text: rgb(var(--color-secondary-rgb));
27
- --border-color: rgb(var(--color-secondary-rgb));
28
- }
25
+ &.secondary {
26
+ --color-background: transparent;
27
+ --border-color: rgb(var(--color-secondary-rgb));
28
+ --color-text: rgb(var(--color-secondary-rgb));
29
29
 
30
- :is(button, [type="submit"], [type="button"], [role="button"]).ghost.secondary:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
31
- --color-text: var(--color-secondary-hover);
32
- --border-color: var(--color-secondary-hover);
33
- }
30
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
31
+ --color-background: var(--color-secondary-hover-bg);
32
+ --border-color: var(--color-secondary-hover-border);
33
+ --color-text: var(--color-secondary-inverse);
34
+ }
35
+ }
34
36
 
35
- :is(.panel, button, [type="submit"], [type="button"], [role="button"]).ghost.contrast {
36
- --color-text: rgb(var(--color-contrast-rgb));
37
- --border-color: rgb(var(--color-contrast-rgb));
38
- }
37
+ &.contrast {
38
+ --color-background: transparent;
39
+ --border-color: rgb(var(--color-contrast-rgb));
40
+ --color-text: rgb(var(--color-contrast-rgb));
39
41
 
40
- :is(button, [type="submit"], [type="button"], [role="button"]).ghost.contrast:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
41
- --color-text: var(--color-contrast-hover);
42
- --border-color: var(--color-contrast-hover);
42
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
43
+ --color-background: var(--color-contrast-hover-bg);
44
+ --border-color: var(--color-contrast-hover-border);
45
+ --color-text: var(--color-contrast-inverse);
46
+ }
47
+ }
48
+ }
43
49
  }
44
50
 
45
51
  /* Reset buttons */
46
52
  [type="reset"].ghost {
47
53
  --color-background: transparent;
48
- --color-text: rgb(var(--color-secondary-rgb));
49
54
  --border-color: rgb(var(--color-secondary-rgb));
55
+ --color-text: rgb(var(--color-secondary-rgb));
50
56
 
51
57
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
52
- --color-text: var(--color-secondary-hover);
53
- --border-color: var(--color-secondary-hover);
58
+ --color-background: var(--color-secondary-hover-bg);
59
+ --border-color: var(--color-secondary-hover-border);
60
+ --color-text: var(--color-secondary-inverse);
54
61
  }
55
62
  }
56
63
 
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Pane, Panel and Card
3
+ * A container component for grouped content with visual pane, panel and card styling
4
+ * Can be applied to any element (article, div, section, etc.)
5
+ */
6
+ .pane,
7
+ .panel,
8
+ .card {
9
+ padding-block: var(--spacing);
10
+ padding-inline: var(--spacing);
11
+ margin-bottom: var(--spacing);
12
+ border-radius: var(--border-radius);
13
+ border: var(--border-width) solid var(--pane-border);
14
+ background: var(--pane-bg);
15
+ box-shadow: var(--pane-shadow);
16
+
17
+ & > header,
18
+ & > footer {
19
+ width: auto;
20
+ margin-inline: calc(var(--spacing) * -1);
21
+ padding-inline: var(--spacing);
22
+ background-color: var(--pane-section-bg);
23
+ }
24
+
25
+ & > header {
26
+ margin-top: calc(var(--spacing) * -1);
27
+ border-bottom: var(--border-width) solid var(--pane-section-border);
28
+ border-top-right-radius: var(--border-radius);
29
+ border-top-left-radius: var(--border-radius);
30
+ }
31
+
32
+ & > footer {
33
+ margin-bottom: calc(var(--spacing) * -1);
34
+ border-top: var(--border-width) solid var(--pane-section-border);
35
+ border-bottom-right-radius: var(--border-radius);
36
+ border-bottom-left-radius: var(--border-radius);
37
+ display: flex;
38
+ justify-content: end;
39
+ gap: calc(var(--nav-link-spacing) * 1.5);
40
+ }
41
+ }
42
+
43
+ .pane,
44
+ .panel {
45
+ --pane-shadow: none;
46
+ }
47
+
48
+ .panel {
49
+ --pane-border: var(--pane-section-border);
50
+ }
51
+
52
+ .card {
53
+ --pane-shadow: var(--shadow-lg);
54
+ }
@@ -17,19 +17,32 @@
17
17
  }
18
18
  }
19
19
 
20
- :is(.panel, button, [type="submit"], [type="button"], [role="button"]).secondary {
21
- --color-background: var(--color-secondary-bg);
22
- --border-color: var(--color-secondary-border);
23
- --color-text: var(--color-secondary-inverse);
20
+ :is(button, [type="submit"], [type="button"], [role="button"]) {
21
+ &.secondary {
22
+ --color-background: var(--color-secondary-bg);
23
+ --border-color: var(--color-secondary-border);
24
+ --color-text: var(--color-secondary-inverse);
25
+
26
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
27
+ --color-background: var(--color-secondary-hover-bg);
28
+ --border-color: var(--color-secondary-hover-border);
29
+ --color-text: var(--color-secondary-inverse);
30
+ }
31
+
32
+ &:focus,
33
+ &:is([aria-current]:not([aria-current="false"])):focus {
34
+ --shadow-lg: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--color-secondary-focus);
35
+ }
36
+ }
24
37
  }
25
38
 
26
- :is(button, [type="submit"], [type="button"], [role="button"]).secondary:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
27
- --color-background: var(--color-secondary-hover-bg);
28
- --border-color: var(--color-secondary-hover-border);
29
- --color-text: var(--color-secondary-inverse);
39
+ :is(.card, .pane, .panel).secondary {
40
+ --color-text: rgb(var(--color-secondary-emphasis-rgb)) !important;
41
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
42
+ --pane-bg: var(--color-secondary-bg-subtle);
30
43
  }
31
44
 
32
- :is(button, [type="submit"], [type="button"], [role="button"]).secondary:focus,
33
- :is(button, [type="submit"], [type="button"], [role="button"]).secondary:is([aria-current]:not([aria-current="false"])):focus {
34
- --shadow-lg: var(--button-shadow-hover, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--color-secondary-focus);
45
+ :is(.panel).secondary {
46
+ --pane-section-border: var(--color-secondary-border-subtle);
47
+ --pane-border: var(--color-secondary-border-subtle);
35
48
  }
@@ -1,11 +1,51 @@
1
- aside {
2
- &.sidebar {
3
- z-index: 1020;
4
- position: sticky;
5
- top: 0;
6
- max-height: 100svh;
7
- align-self: stretch;
8
- display: flex;
9
- flex-direction: column;
1
+ aside.sidebar {
2
+ z-index: 1020;
3
+ position: sticky !important;
4
+ top: 0;
5
+ max-height: 100svh;
6
+ align-self: stretch;
7
+ display: flex;
8
+ flex-direction: column;
9
+
10
+ /* Opening animation using @starting-style (Chrome 117+, Firefox 129+, Safari 17.4+) */
11
+ /* Gracefully degrades to instant appearance in unsupported browsers */
12
+ transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;
13
+
14
+ &:popover-open {
15
+ --color-background: var(--color-body-bg);
16
+
17
+ display: flex !important;
18
+ width: 60% !important;
19
+ box-shadow: var(--pane-shadow);
20
+ background-color: var(--color-background) !important;
21
+ left: 0;
22
+ right: unset;
23
+
24
+ &[data-placement="right"] {
25
+ left: unset;
26
+ right: 0;
27
+ }
28
+ }
29
+
30
+ &::backdrop {
31
+ backdrop-filter: var(--backdrop-overlay-filter);
32
+ background-color: var(--backdrop-overlay-bg);
33
+ transition: backdrop-filter 0.2s ease-in-out, background-color 0.2s ease-in-out;
34
+ }
35
+ }
36
+
37
+ @starting-style {
38
+ aside.sidebar:popover-open {
39
+ opacity: 0;
40
+ transform: translateX(-20px);
41
+
42
+ &[data-placement="right"] {
43
+ transform: translateX(20px);
44
+ }
45
+ }
46
+
47
+ aside.sidebar:popover-open::backdrop {
48
+ backdrop-filter: none;
49
+ background-color: transparent;
10
50
  }
11
51
  }
@@ -4,11 +4,10 @@
4
4
  * Used by the full version which imports global variables, normalize, and semantics separately
5
5
  */
6
6
 
7
- @import "./_card.css";
8
- @import "./_contained.css";
9
- @import "./_container.css";
10
- @import "./_contrast.css";
11
- @import "./_panel.css";
7
+ @import "./_contained.css";
8
+ @import "./_container.css";
9
+ @import "./_contrast.css";
10
+ @import "./_pane-panel-card.css";
12
11
  @import "./_secondary.css";
13
12
  @import "./_sidebar.css";
14
13
  @import "./_striped.css";
@@ -1,12 +0,0 @@
1
- /**
2
- * Article fills up the available width, and stretches to fill the available height.
3
- * Stacks its children vertically.
4
- */
5
- article {
6
- --block-spacing-vertical: calc(var(--spacing) * var(--responsive-multiplier));
7
- --block-spacing-horizontal: calc(var(--spacing) * var(--responsive-multiplier));
8
-
9
- width: 100%;
10
- padding-block: var(--block-spacing-vertical);
11
- padding-inline: var(--block-spacing-horizontal);
12
- }
@@ -1,157 +0,0 @@
1
- /**
2
- * Modal (<dialog>)
3
- */
4
-
5
- /* Prevent body scroll and interaction when modal is open */
6
- /* Uses :has() for automatic detection - no classes needed */
7
- /* Accounts for both [open] attribute (JS) and :target (CSS-only) */
8
- body:has(dialog[open]),
9
- body:has(dialog:target) {
10
- overflow: hidden;
11
- pointer-events: none;
12
- touch-action: none;
13
-
14
- & dialog[open],
15
- & dialog:target {
16
- pointer-events: auto;
17
- touch-action: auto;
18
- }
19
- }
20
-
21
- dialog {
22
- display: flex;
23
- z-index: 999;
24
- position: fixed;
25
- top: 0;
26
- right: 0;
27
- bottom: 0;
28
- left: 0;
29
- align-items: center;
30
- justify-content: center;
31
- width: inherit;
32
- min-width: 100%;
33
- height: inherit;
34
- min-height: 100%;
35
- padding: 0;
36
- border: 0;
37
- backdrop-filter: var(--modal-overlay-backdrop-filter);
38
- background-color: var(--modal-overlay-bg);
39
- color: var(--color-text);
40
-
41
- /* Modal content box - styled like a card */
42
- /* Works with: <dialog><article>...</article></dialog> */
43
- & > article {
44
- position: relative;
45
- width: 100%;
46
- max-height: calc(100vh - var(--spacing) * 2);
47
- margin: var(--spacing);
48
- padding: var(--block-spacing-vertical) var(--block-spacing-horizontal);
49
- overflow: auto;
50
- border-radius: var(--border-radius);
51
- background: var(--card-bg);
52
- box-shadow: var(--card-shadow);
53
-
54
- @media (--breakpoint-sm) {
55
- max-width: 510px;
56
- }
57
-
58
- @media (--breakpoint-md) {
59
- max-width: 700px;
60
- }
61
-
62
- /* Header styling */
63
- & > header {
64
- width: calc(100% + var(--block-spacing-horizontal) * 2);
65
- margin: calc(var(--block-spacing-vertical) * -1) calc(var(--block-spacing-horizontal) * -1) var(--block-spacing-vertical);
66
- padding: calc(var(--block-spacing-vertical) * 0.66) var(--block-spacing-horizontal);
67
- background-color: var(--card-section-bg);
68
- border-bottom: var(--border-width) solid var(--card-border);
69
- border-top-right-radius: var(--border-radius);
70
- border-top-left-radius: var(--border-radius);
71
-
72
- & > * {
73
- margin-bottom: 0;
74
- }
75
- }
76
-
77
- /* Footer styling */
78
- & > footer {
79
- width: calc(100% + var(--block-spacing-horizontal) * 2);
80
- margin: var(--block-spacing-vertical) calc(var(--block-spacing-horizontal) * -1) calc(var(--block-spacing-vertical) * -1);
81
- padding: calc(var(--block-spacing-vertical) * 0.66) var(--block-spacing-horizontal);
82
- background-color: var(--card-section-bg);
83
- border-top: var(--border-width) solid var(--card-border);
84
- border-bottom-right-radius: var(--border-radius);
85
- border-bottom-left-radius: var(--border-radius);
86
- text-align: right;
87
-
88
- & :where(button, [role=button]) {
89
- margin-bottom: 0;
90
-
91
- &:not(:first-of-type) {
92
- margin-left: calc(var(--spacing) * 0.5);
93
- }
94
- }
95
- }
96
-
97
- /* Close button styling */
98
- & :is(a, button)[rel=prev]:not([role=button]) {
99
- margin: 0;
100
- padding: 0;
101
- position: absolute;
102
- display: block;
103
- width: 1rem;
104
- height: 1rem;
105
- top: calc(var(--block-spacing-vertical) * .66);
106
- right: var(--block-spacing-horizontal);
107
- border: none;
108
- border-radius: 0;
109
- background-image: var(--icon-close);
110
- background-position: center;
111
- background-size: auto 1rem;
112
- background-repeat: no-repeat;
113
- background-color: transparent;
114
- box-shadow: none;
115
- opacity: 0.5;
116
- transition: opacity var(--transition);
117
-
118
- &:hover {
119
- opacity: 1;
120
- }
121
- }
122
- }
123
-
124
- /* Hidden state */
125
- &:not([open]),
126
- &[open=false] {
127
- display: none;
128
- }
129
-
130
- /* CSS-only modal triggering using :target pseudo-class */
131
- /* When dialog is targeted via anchor link (e.g., <a href="#modal-id">) */
132
- &:target {
133
- display: flex;
134
- }
135
- }
136
-
137
- /* Opening animation using @starting-style (Chrome 117+, Firefox 129+, Safari 17.4+) */
138
- /* Gracefully degrades to instant appearance in unsupported browsers */
139
- dialog {
140
- transition: opacity 0.2s ease-in-out, backdrop-filter 0.2s ease-in-out;
141
- }
142
-
143
- dialog > article {
144
- transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;
145
- }
146
-
147
- @starting-style {
148
- dialog {
149
- backdrop-filter: none;
150
- background-color: transparent;
151
- }
152
-
153
- dialog > article {
154
- opacity: 0;
155
- transform: translateY(-20px);
156
- }
157
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Footer
3
- */
4
- footer {
5
- --typography-spacing-vertical: 0;
6
- --typography-headings-top: 0;
7
- --block-spacing-vertical: calc(var(--spacing) * var(--responsive-multiplier));
8
- --block-spacing-horizontal: calc(var(--spacing) * var(--responsive-multiplier));
9
-
10
- width: 100%;
11
- padding-block: var(--block-spacing-vertical);
12
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Header
3
- */
4
- header {
5
- --typography-spacing-vertical: 0;
6
- --typography-headings-top: 0;
7
- --block-spacing-vertical: calc(var(--spacing) * var(--responsive-multiplier));
8
- --block-spacing-horizontal: calc(var(--spacing) * var(--responsive-multiplier));
9
-
10
- width: 100%;
11
- padding-block: var(--block-spacing-vertical);
12
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Main fills up the available width, and has a height defined by its content.
3
- * Stacks its children vertically.
4
- */
5
- main {
6
- --block-spacing-vertical: calc(var(--spacing) * var(--responsive-multiplier));
7
- --block-spacing-horizontal: calc(var(--spacing) * var(--responsive-multiplier));
8
-
9
- width: 100%;
10
- }