@rdlabo/ionic-theme-ios27 0.1.0-beta.pr153.sha1c3caf4dc12b → 0.1.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 (95) hide show
  1. package/README.md +3 -3
  2. package/dist/css/components/ion-action-sheet.css +1 -1
  3. package/dist/css/components/ion-alert.css +1 -1
  4. package/dist/css/components/ion-button.css +1 -1
  5. package/dist/css/components/ion-card.css +1 -1
  6. package/dist/css/components/ion-fab.css +1 -1
  7. package/dist/css/components/ion-list.css +1 -1
  8. package/dist/css/components/ion-menu.css +1 -1
  9. package/dist/css/components/ion-modal.css +1 -1
  10. package/dist/css/components/ion-popover.css +1 -1
  11. package/dist/css/components/ion-range.css +1 -1
  12. package/dist/css/components/ion-segment.css +1 -1
  13. package/dist/css/components/ion-tabs.css +1 -1
  14. package/dist/css/components/ion-toast.css +1 -1
  15. package/dist/css/components/ion-toolbar.css +1 -1
  16. package/dist/css/default-variables.css +1 -1
  17. package/dist/css/ionic-theme-ios27-dark-always.css +1 -1
  18. package/dist/css/ionic-theme-ios27-dark-class.css +1 -1
  19. package/dist/css/ionic-theme-ios27-dark-system.css +1 -1
  20. package/dist/css/ionic-theme-ios27.css +1 -1
  21. package/dist/css/md-ion-list-inset.css +1 -1
  22. package/dist/css/utils/dark/ion-list.css +1 -0
  23. package/dist/css/utils/group-heading.css +1 -0
  24. package/dist/native/components/searchable-tabs.d.ts.map +1 -1
  25. package/dist/native/components/searchable-tabs.js +9 -1
  26. package/dist/native/definitions.d.ts +4 -0
  27. package/dist/native/definitions.d.ts.map +1 -1
  28. package/dist/native/runtime.d.ts.map +1 -1
  29. package/dist/native/runtime.js +51 -27
  30. package/dist/native/shared/candidate.d.ts.map +1 -1
  31. package/dist/native/shared/candidate.js +17 -0
  32. package/dist/native/shared/crossfade.d.ts +8 -0
  33. package/dist/native/shared/crossfade.d.ts.map +1 -0
  34. package/dist/native/shared/crossfade.js +46 -0
  35. package/dist/native/shared/dom.d.ts.map +1 -1
  36. package/dist/native/shared/dom.js +2 -1
  37. package/dist/popover/animations/ios.enter.d.ts.map +1 -1
  38. package/dist/popover/animations/ios.enter.js +105 -9
  39. package/dist/popover/animations/ios.leave.d.ts.map +1 -1
  40. package/dist/popover/animations/ios.leave.js +15 -1
  41. package/dist/popover/callout-surface.d.ts +2 -0
  42. package/dist/popover/callout-surface.d.ts.map +1 -0
  43. package/dist/popover/callout-surface.js +44 -0
  44. package/dist/sheets-of-glass/index.js +2 -1
  45. package/dist/transition/ios.transition.d.ts.map +1 -1
  46. package/dist/transition/ios.transition.js +0 -223
  47. package/docs/experimental-animation.md +3 -3
  48. package/docs/features.md +7 -2
  49. package/docs/native-ui-shell.md +14 -5
  50. package/docs/special-markup.md +17 -0
  51. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellButton.swift +7 -2
  52. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellSearchController.swift +10 -0
  53. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellSegment.swift +47 -15
  54. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellTabBar.swift +42 -7
  55. package/ios/Sources/IonicNativeUIShellPlugin/IonicNativeUIShellPlugin.swift +13 -6
  56. package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellCrossfade.swift +35 -0
  57. package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellSnapshot.swift +6 -1
  58. package/ios/Tests/IonicNativeUIShellPluginTests/ShellSnapshotTests.swift +59 -0
  59. package/package.json +1 -1
  60. package/src/native/components/searchable-tabs.ts +12 -1
  61. package/src/native/definitions.ts +4 -0
  62. package/src/native/runtime.ts +54 -31
  63. package/src/native/shared/candidate.ts +19 -0
  64. package/src/native/shared/crossfade.ts +49 -0
  65. package/src/native/shared/dom.ts +4 -1
  66. package/src/popover/animations/ios.enter.ts +123 -10
  67. package/src/popover/animations/ios.leave.ts +15 -1
  68. package/src/popover/callout-surface.ts +54 -0
  69. package/src/sheets-of-glass/index.ts +2 -2
  70. package/src/styles/components/ion-action-sheet.scss +35 -17
  71. package/src/styles/components/ion-alert.scss +51 -31
  72. package/src/styles/components/ion-button.scss +4 -7
  73. package/src/styles/components/ion-card.scss +64 -3
  74. package/src/styles/components/ion-fab.scss +3 -5
  75. package/src/styles/components/ion-list.scss +14 -1
  76. package/src/styles/components/ion-menu.scss +19 -7
  77. package/src/styles/components/ion-modal.scss +63 -14
  78. package/src/styles/components/ion-popover.scss +52 -9
  79. package/src/styles/components/ion-range.scss +49 -50
  80. package/src/styles/components/ion-segment.scss +15 -16
  81. package/src/styles/components/ion-tabs.scss +73 -13
  82. package/src/styles/components/ion-toast.scss +16 -25
  83. package/src/styles/components/ion-toolbar.scss +17 -1
  84. package/src/styles/default-variables.scss +4 -0
  85. package/src/styles/utils/_glass.scss +96 -0
  86. package/src/styles/utils/api.scss +46 -4
  87. package/src/styles/utils/dark/ion-button.scss +13 -0
  88. package/src/styles/utils/dark/ion-fab.scss +9 -0
  89. package/src/styles/utils/dark/ion-list.scss +7 -0
  90. package/src/styles/utils/dark/ion-segment.scss +8 -3
  91. package/src/styles/utils/dark/ion-tabs.scss +20 -0
  92. package/src/styles/utils/group-heading.scss +5 -0
  93. package/src/styles/utils/structured-list.scss +68 -15
  94. package/src/styles/utils/theme-dark.scss +23 -0
  95. package/src/transition/ios.transition.ts +0 -487
@@ -12,6 +12,8 @@
12
12
  :root {
13
13
  // Internal native appearance signal; follows the same cascade as the theme.
14
14
  --ios27-color-scheme: light;
15
+ // Destructive overlay actions, independent of the application danger palette.
16
+ --ios-theme-destructive-color: #ea292d;
15
17
  --ios26-floating-safe-area-top: max(10px, var(--ion-safe-area-top, 0px));
16
18
  --ios26-floating-safe-area-bottom: max(10px, calc(var(--ion-safe-area-bottom, 0px) - 12px));
17
19
 
@@ -24,6 +26,8 @@
24
26
  --ios27-button-color-selected-default-rgb: 16, 16, 16;
25
27
 
26
28
  --ios26-menu-width: 360px;
29
+ // iPadOS 27 sidebar tint, composited at 96% over the page background.
30
+ --ios-theme-menu-background-rgb: 225, 230, 240;
27
31
 
28
32
  /**
29
33
  * `--ios26-color-background-rgb` is deprecated.
@@ -1,3 +1,63 @@
1
+ $_control-surface: linear-gradient(
2
+ 180deg,
3
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0) 4%,
4
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.01) 8%,
5
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.024) 16%,
6
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.027) 22%,
7
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.026) 28%,
8
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.018) 36%,
9
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.024) 44%,
10
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.024) 50%,
11
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.024) 58%,
12
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.008) 80%,
13
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.006) 88%,
14
+ rgba(var(--ion-text-color-rgb, 0, 0, 0), 0) 94%
15
+ );
16
+
17
+ // Shared defaults can be assigned to Ionic's public --box-shadow property.
18
+ @mixin light-shadow($property: box-shadow) {
19
+ $light: var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb));
20
+ $shade: var(--ion-text-color-rgb, 0, 0, 0);
21
+ #{$property}:
22
+ inset 0 1px 2px rgba($light, 0.25),
23
+ inset 0 -1px 2px rgba($light, 0.3),
24
+ 0 -0.5px 0 rgba($light, 0.65),
25
+ 0 0.5px 0 rgba($light, 0.65),
26
+ 0 0 0 0.5px rgba($shade, 0.22),
27
+ 0 0.5px 1px rgba($shade, 0.08);
28
+ }
29
+
30
+ @mixin dark-shadow($property: box-shadow) {
31
+ $light: var(--ion-text-color-rgb, 255, 255, 255);
32
+ #{$property}:
33
+ inset 0 0.5px 1px rgba($light, 0.2),
34
+ inset 0 -0.5px 1px rgba($light, 0.2);
35
+ @supports (background-clip: border-area) {
36
+ #{$property}: none;
37
+ }
38
+ }
39
+
40
+ @mixin light-rim($shadow: null) {
41
+ $light: var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb));
42
+ @if $shadow == null {
43
+ @include light-shadow;
44
+ } @else {
45
+ box-shadow: $shadow;
46
+ }
47
+ border: 0.5px solid rgb($light);
48
+ background-image: $_control-surface;
49
+ background-origin: padding-box;
50
+ background-clip: border-box;
51
+ border-inline-color: transparent;
52
+ @supports (background-clip: border-area) {
53
+ border-color: transparent;
54
+ background-image:
55
+ linear-gradient(180deg, rgb($light), transparent 50%, rgb($light)), $_control-surface, linear-gradient(transparent, transparent);
56
+ background-origin: border-box, padding-box, border-box;
57
+ background-clip: border-area, padding-box, border-box;
58
+ }
59
+ }
60
+
1
61
  // Shared pressed-surface declarations used by the button and legacy FAB recipes.
2
62
  @mixin pressed-surface($border-colors, $shadow: null, $blur: 7px, $saturate: 180%) {
3
63
  backdrop-filter: blur($blur) saturate($saturate);
@@ -13,3 +73,39 @@
13
73
  -webkit-backface-visibility: hidden;
14
74
  backface-visibility: hidden;
15
75
  }
76
+
77
+ // iPadOS dark Glass: a vertical light source, with no illuminated side rim.
78
+ // Keep the material under the border so transparent side edges do not cut it out.
79
+ @mixin dark-rim($shadow: null) {
80
+ $light: var(--ion-text-color-rgb, 255, 255, 255);
81
+ $inner: linear-gradient(
82
+ 180deg,
83
+ rgba($light, 0.14),
84
+ rgba($light, 0.04) 1px,
85
+ transparent 6px,
86
+ transparent calc(100% - 6px),
87
+ rgba($light, 0.04) calc(100% - 1px),
88
+ rgba($light, 0.14)
89
+ );
90
+ border-color: transparent;
91
+ background-image: $inner;
92
+ background-origin: padding-box;
93
+ background-clip: border-box;
94
+ @if $shadow == null {
95
+ @include dark-shadow;
96
+ } @else {
97
+ box-shadow: $shadow;
98
+ }
99
+ @supports (background-clip: border-area) {
100
+ background-image:
101
+ linear-gradient(180deg, rgba($light, 0.24), transparent 35%, transparent 65%, rgba($light, 0.24)), $inner,
102
+ linear-gradient(transparent, transparent);
103
+ background-origin: border-box, padding-box, border-box;
104
+ background-clip: border-area, padding-box, border-box;
105
+ }
106
+ }
107
+
108
+ // One resting dark material for hosts and Shadow DOM background properties.
109
+ @mixin dark-fill($property: background-color) {
110
+ #{$property}: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.5);
111
+ }
@@ -85,6 +85,16 @@ $_glass-surface: linear-gradient(
85
85
  backface-visibility: hidden;
86
86
  }
87
87
 
88
+ // Resting Glass controls use one material; lenses and existing Sass callers
89
+ // retain glass-background's original options and rendering.
90
+ @mixin glass-control-background($include-background: true, $shadow: null) {
91
+ @include glass-background($include-background: false, $include-border: false, $include-box-shadow: false);
92
+ @if $include-background {
93
+ background-color: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.72);
94
+ }
95
+ @include glass.light-rim($shadow);
96
+ }
97
+
88
98
  @mixin glass-background-button-activated {
89
99
  background-color: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.96);
90
100
  border-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.12) rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.32)
@@ -156,15 +166,47 @@ $_glass-surface: linear-gradient(
156
166
 
157
167
  @mixin glass-background-overlay-button {
158
168
  transition: background 0.2s ease;
159
- background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.1);
169
+ background: var(--ion-background-color-step-200, var(--ion-color-step-200, #cccccc));
160
170
  &.ion-activated {
161
- background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.022);
171
+ background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.06);
162
172
  }
163
173
  }
164
174
 
165
175
  @mixin glass-background-overlay-button-variable {
166
- --button-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.1);
176
+ --button-background: var(--ion-background-color-step-200, var(--ion-color-step-200, #cccccc));
177
+ &.ion-activated {
178
+ --button-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.06);
179
+ }
180
+ }
181
+
182
+ // Filled emphasis for the recommended action in presented overlays.
183
+ @mixin glass-overlay-preferred-button($background-property: background, $color-property: color) {
184
+ #{$background-property}: var(--ion-color-primary, #0054e9);
185
+ #{$color-property}: var(--ion-color-primary-contrast, #fff);
167
186
  &.ion-activated {
168
- --button-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.022);
187
+ #{$background-property}: var(--ion-color-primary-shade, #004acd);
188
+ }
189
+ }
190
+
191
+ // Shared material for presented surfaces. Keep transforms owned by Ionic animations.
192
+ @mixin glass-overlay-variables($shadow-opacity: 0.15) {
193
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.67);
194
+ --border-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.18);
195
+ --border-style: solid;
196
+ --border-width: 0.5px;
197
+ --box-shadow:
198
+ inset 0 0.5px 1px rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.6),
199
+ 0 12px 32px color-mix(in srgb, var(--ion-box-shadow-color, #000) #{$shadow-opacity * 100%}, transparent);
200
+ }
201
+
202
+ @mixin glass-overlay-surface($include-background: true, $include-frame: true) {
203
+ @if $include-background {
204
+ background: var(--background);
205
+ }
206
+ @if $include-frame {
207
+ border: var(--border-width) var(--border-style) var(--border-color);
208
+ box-shadow: var(--box-shadow);
169
209
  }
210
+ backdrop-filter: blur(20px) saturate(180%);
211
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
170
212
  }
@@ -14,6 +14,11 @@
14
14
  }
15
15
 
16
16
  @mixin theme-dark-buttons {
17
+ &:not(:has(.ion-activated)) {
18
+ @include glass.dark-fill;
19
+ @include glass.dark-rim;
20
+ }
21
+
17
22
  &:has(.ion-activated) {
18
23
  @include pressed-glass;
19
24
  }
@@ -40,6 +45,14 @@
40
45
  }
41
46
 
42
47
  @mixin theme-dark-button {
48
+ &:not(.ion-activated):not(.button-solid):not(.button-outline):not(.button-clear) {
49
+ @include glass.dark-fill('--background');
50
+ @include glass.dark-shadow('--box-shadow');
51
+ &::part(native) {
52
+ @include glass.dark-rim(var(--box-shadow));
53
+ }
54
+ }
55
+
43
56
  &.ion-activated:not(.button-solid):not(.button-outline):not(.button-clear) {
44
57
  --background: rgba(
45
58
  var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb, var(--ios27-button-color-selected-default-rgb))),
@@ -1,8 +1,17 @@
1
1
  @use '../api';
2
+ @use '../glass';
2
3
 
3
4
  @mixin ion-fab {
4
5
  ion-fab.ios:not(.ios-theme-disabled, .ios26-disabled) {
5
6
  ion-fab-button {
7
+ &:not(.ion-activated) {
8
+ @include glass.dark-fill('--background');
9
+ @include glass.dark-shadow('--box-shadow');
10
+ &::part(native) {
11
+ @include glass.dark-rim(var(--box-shadow));
12
+ }
13
+ }
14
+
6
15
  &.ion-activated {
7
16
  &::part(native) {
8
17
  @include api.glass-background-button-activated-dark($include-background: false);
@@ -0,0 +1,7 @@
1
+ @use '../structured-list';
2
+
3
+ @mixin ion-list {
4
+ ion-list.ios:not(.ios-theme-disabled, .ios26-disabled) {
5
+ @include structured-list.colors(0.93, 0.5);
6
+ }
7
+ }
@@ -2,12 +2,17 @@
2
2
 
3
3
  @mixin ion-segment {
4
4
  ion-segment.ios:not(.ios-theme-disabled, .ios26-disabled) {
5
- // Only the navigation glass uses a dark selection; content controls keep Ionic's surface.
6
- &.in-toolbar:not(.segment-expand, .ion-color) ion-segment-button:not(.ion-color, .ios-theme-disabled, .ios26-disabled) {
7
- --indicator-color: var(--ios27-segment-selected-background, rgba(0, 0, 0, 0.72));
5
+ ion-segment-button.segment-button-disabled {
6
+ opacity: 0.15;
8
7
  }
9
8
  .ios27-segment-edge {
10
9
  @include api.glass-lens-dark;
11
10
  }
12
11
  }
12
+ :where(ion-segment.ios:not(.ios-theme-disabled, .ios26-disabled)) {
13
+ --background: rgba(var(--ion-color-medium-rgb, 152, 154, 162), 0.19);
14
+ }
15
+ :where(ion-segment.ios:not(.ios-theme-disabled, .ios26-disabled, .ion-color) ion-segment-button:not(.ion-color, .in-segment-color)) {
16
+ --indicator-color: color-mix(in srgb, rgb(var(--ion-color-medium-rgb, 152, 154, 162)) 59%, var(--ion-background-color, #000));
17
+ }
13
18
  }
@@ -1,4 +1,24 @@
1
+ @use '../glass';
2
+
1
3
  @mixin ion-tabs {
4
+ ion-tab-bar.ios:not(.ios-theme-disabled, .ios26-disabled) {
5
+ --color: rgb(var(--ion-text-color-rgb, 255, 255, 255));
6
+ --background: color-mix(
7
+ in srgb,
8
+ color-mix(
9
+ in srgb,
10
+ rgb(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb))) 92%,
11
+ rgb(var(--ion-text-color-rgb, 255, 255, 255))
12
+ )
13
+ 40%,
14
+ transparent
15
+ );
16
+ &::before {
17
+ @include glass.dark-rim;
18
+ backdrop-filter: blur(6px) saturate(150%) brightness(1.23);
19
+ }
20
+ }
21
+
2
22
  ion-tab-button.ios:not(.ios-theme-disabled, .ios26-disabled) {
3
23
  --ios27-tab-selected-background: rgba(
4
24
  var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb, 0, 0, 0)),
@@ -0,0 +1,5 @@
1
+ @mixin typography {
2
+ font-size: 1.29rem;
3
+ font-weight: 700;
4
+ line-height: 1.53rem;
5
+ }
@@ -1,5 +1,26 @@
1
+ @use './group-heading';
2
+
1
3
  $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group;
2
4
 
5
+ // Derive neutral list colors from the application's Ionic medium palette.
6
+ @mixin colors($supporting-opacity, $detail-opacity) {
7
+ ion-item {
8
+ --detail-icon-color: rgb(var(--ion-color-medium-rgb));
9
+ --detail-icon-opacity: #{$detail-opacity};
10
+ }
11
+
12
+ &.list-inset {
13
+ ion-list-header ion-label:not(.ion-color) {
14
+ color: rgba(var(--ion-color-medium-rgb), $supporting-opacity);
15
+ }
16
+
17
+ ion-list-header ion-note:not(.ion-color),
18
+ > ion-note:not(.ion-color) {
19
+ --color: rgba(var(--ion-color-medium-rgb), #{$supporting-opacity});
20
+ }
21
+ }
22
+ }
23
+
3
24
  @mixin support-text() {
4
25
  ion-item {
5
26
  &:has(ion-input.input-fill-outline),
@@ -26,7 +47,9 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
26
47
  align-items: center;
27
48
 
28
49
  ion-label {
29
- font-size: 0.9rem;
50
+ font-size: 1rem;
51
+ line-height: 1.29rem;
52
+ font-weight: 600;
30
53
  margin: 8px 4px 4px;
31
54
 
32
55
  &:not(.ion-color) {
@@ -39,17 +62,35 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
39
62
  }
40
63
 
41
64
  ion-note {
42
- font-size: 0.9rem;
65
+ font-size: 0.76rem;
66
+ line-height: 1.06rem;
67
+ font-weight: 400;
43
68
  margin: 8px 16px 4px 0;
69
+
70
+ &:not(.ion-color) {
71
+ --color: var(--ion-color-medium-tint);
72
+ }
44
73
  }
45
74
  }
46
75
 
47
76
  ion-item-group.item-group-header {
77
+ border-radius: $group-border-radius;
78
+
79
+ > ion-item {
80
+ --inner-padding-end: 0;
81
+ --inner-border-width: 0;
82
+
83
+ &::part(native) {
84
+ padding-inline: 0;
85
+ }
86
+ }
87
+
48
88
  & > ion-item > ion-label {
49
89
  width: 100%;
50
- text-align: center;
51
- padding: 32px 16px 16px;
52
- transform: translateX(5px);
90
+ margin: 0;
91
+ text-align: start;
92
+ white-space: normal;
93
+ padding: 16px 20px;
53
94
 
54
95
  /**
55
96
  * ion-header.header-collapse-condenseを使って、スクロールによってHeaderを変化させるトリック
@@ -60,9 +101,10 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
60
101
  }
61
102
 
62
103
  ion-icon {
63
- font-size: 2.8rem;
104
+ font-size: 2.82rem;
64
105
  border-radius: 20%;
65
106
  padding: 6px;
107
+ vertical-align: top;
66
108
 
67
109
  &:not(.ion-color) {
68
110
  color: #ffffff;
@@ -70,13 +112,18 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
70
112
  }
71
113
 
72
114
  h2 {
73
- font-size: 1.2rem;
74
- font-weight: bold;
75
- margin-top: 8px;
115
+ @include group-heading.typography;
116
+ margin: 20px 0 8px;
76
117
  }
77
118
 
78
119
  ion-text {
79
- font-size: 0.9rem;
120
+ display: block;
121
+ font-size: 1rem;
122
+ line-height: 1.29rem;
123
+
124
+ &:not(.ion-color) {
125
+ color: var(--ion-color-step-500, var(--ion-text-color-step-500, #808080));
126
+ }
80
127
  }
81
128
  }
82
129
  }
@@ -128,11 +175,12 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
128
175
  & > ion-label {
129
176
  margin: 0;
130
177
  font-weight: 500;
131
- font-size: 1.15rem;
132
- line-height: 0.9rem;
178
+ font-size: 1rem;
179
+ line-height: 1.29rem;
133
180
  }
134
181
  & > ion-note {
135
- font-size: 0.85rem;
182
+ font-size: 0.88rem;
183
+ line-height: 1.18rem;
136
184
  }
137
185
  }
138
186
 
@@ -162,9 +210,14 @@ $groups: ion-item-group, ion-reorder-group, ion-accordion-group, ion-radio-group
162
210
  }
163
211
 
164
212
  & > ion-note {
165
- --color: var(--ion-color-medium-tint);
166
- font-size: 0.9rem;
213
+ font-size: 0.76rem;
214
+ line-height: 1.06rem;
215
+ font-weight: 400;
167
216
  display: block;
168
217
  margin: 8px calc(var(--ion-safe-area-right, 0) + $outer-note-inset) 8px calc(var(--ion-safe-area-left, 0) + $outer-note-inset);
218
+
219
+ &:not(.ion-color) {
220
+ --color: var(--ion-color-medium-tint);
221
+ }
169
222
  }
170
223
  }
@@ -6,9 +6,13 @@
6
6
  @use 'dark/ion-tabs' as *;
7
7
  @forward 'dark/ion-segment';
8
8
  @use 'dark/ion-segment' as *;
9
+ @forward 'dark/ion-list';
10
+ @use 'dark/ion-list' as *;
9
11
 
10
12
  @mixin default-variables {
11
13
  --ios27-color-scheme: dark;
14
+ --ios-theme-destructive-color: #ff686b;
15
+ --ios-theme-menu-background-rgb: 26, 31, 34;
12
16
  //--ios26-glass-background-rgb: 35, 35, 35;
13
17
  --ios26-glass-background-rgb: 62, 62, 62;
14
18
  --ios26-glass-box-shadow-color-rgb: 0, 0, 0 / 0;
@@ -19,6 +23,25 @@
19
23
  }
20
24
 
21
25
  @mixin theme-dark {
26
+ @include ion-list;
27
+
28
+ ion-alert.ios:not(.ios-theme-disabled, .ios26-disabled),
29
+ ion-action-sheet.ios:not(.ios-theme-disabled, .ios26-disabled),
30
+ ion-toast.ios:not(.ios-theme-disabled, .ios26-disabled) {
31
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.52);
32
+ }
33
+
34
+ ion-popover.ios:not(.ios-theme-disabled, .ios26-disabled) {
35
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.08);
36
+
37
+ &:not(.ios-theme-callout)::part(content),
38
+ &::part(callout-glass),
39
+ &::part(arrow)::after {
40
+ backdrop-filter: blur(12px) saturate(115%) brightness(0.9);
41
+ -webkit-backdrop-filter: blur(12px) saturate(115%) brightness(0.9);
42
+ }
43
+ }
44
+
22
45
  @include ion-button;
23
46
  @include ion-fab;
24
47
  @include ion-tabs;