UNPKG

12.3 kBCSSView Raw
1html.ios {
2 --ion-default-font: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Roboto", sans-serif;
3}
4
5html.md {
6 --ion-default-font: "Roboto", "Helvetica Neue", sans-serif;
7}
8
9html {
10 --ion-font-family: var(--ion-default-font);
11}
12
13body {
14 background: var(--ion-background-color);
15}
16
17body.backdrop-no-scroll {
18 overflow: hidden;
19}
20
21/**
22 * Card style modal needs additional padding on the
23 * top of the header. We accomplish this by targeting
24 * the first toolbar in the header.
25 * Footer also needs this. We do not adjust the bottom
26 * padding though because of the safe area.
27 */
28html.ios ion-modal.modal-card ion-header ion-toolbar:first-of-type,
29html.ios ion-modal.modal-sheet ion-header ion-toolbar:first-of-type,
30html.ios ion-modal ion-footer ion-toolbar:first-of-type {
31 padding-top: 6px;
32}
33
34/**
35* Card style modal needs additional padding on the
36* bottom of the header. We accomplish this by targeting
37* the last toolbar in the header.
38*/
39html.ios ion-modal.modal-card ion-header ion-toolbar:last-of-type,
40html.ios ion-modal.modal-sheet ion-header ion-toolbar:last-of-type {
41 padding-bottom: 6px;
42}
43
44/**
45* Add padding on the left and right
46* of toolbars while accounting for
47* safe area values when in landscape.
48*/
49html.ios ion-modal ion-toolbar {
50 padding-right: calc(var(--ion-safe-area-right) + 8px);
51 padding-left: calc(var(--ion-safe-area-left) + 8px);
52}
53
54/**
55 * Card style modal on iPadOS
56 * should only have backdrop on first instance.
57 */
58@media screen and (min-width: 768px) {
59 html.ios ion-modal.modal-card:first-of-type {
60 --backdrop-opacity: 0.18;
61 }
62}
63/**
64 * Subsequent modals should not have a backdrop/box shadow
65 * as it will cause the screen to appear to get progressively
66 * darker. With Ionic 6, declarative modals made it
67 * possible to have multiple non-presented modals in the DOM,
68 * so we could no longer rely on ion-modal:first-of-type.
69 * Here we disable the opacity/box-shadow for every modal
70 * that comes after the first presented modal.
71 *
72 * Note: ion-modal:not(.overlay-hidden):first-of-type
73 * does not match the first modal to not have
74 * the .overlay-hidden class, it will match the
75 * first modal in general only if it does not
76 * have the .overlay-hidden class.
77 * The :nth-child() pseudo-class has support
78 * for selectors which would help us here. At the
79 * time of writing it does not have great cross browser
80 * support.
81 *
82 * Note 2: This should only apply to non-card and
83 * non-sheet modals. Card and sheet modals have their
84 * own criteria for displaying backdrops/box shadows.
85 */
86ion-modal.modal-default:not(.overlay-hidden) ~ ion-modal.modal-default {
87 --backdrop-opacity: 0;
88 --box-shadow: none;
89}
90
91/**
92 * This works around a bug in WebKit where the
93 * content will overflow outside of the bottom border
94 * radius when re-painting. As long as a single
95 * border radius value is set on .ion-page, this
96 * issue does not happen. We set the top left radius
97 * here because the top left corner will always have a
98 * radius no matter the platform.
99 * This behavior only applies to card modals.
100 */
101html.ios ion-modal.modal-card .ion-page {
102 border-top-left-radius: var(--border-radius);
103}
104
105.ion-color-primary {
106 --ion-color-base: var(--ion-color-primary, #3880ff) !important;
107 --ion-color-base-rgb: var(--ion-color-primary-rgb, 56, 128, 255) !important;
108 --ion-color-contrast: var(--ion-color-primary-contrast, #fff) !important;
109 --ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, 255, 255, 255) !important;
110 --ion-color-shade: var(--ion-color-primary-shade, #3171e0) !important;
111 --ion-color-tint: var(--ion-color-primary-tint, #4c8dff) !important;
112}
113
114.ion-color-secondary {
115 --ion-color-base: var(--ion-color-secondary, #3dc2ff) !important;
116 --ion-color-base-rgb: var(--ion-color-secondary-rgb, 61, 194, 255) !important;
117 --ion-color-contrast: var(--ion-color-secondary-contrast, #fff) !important;
118 --ion-color-contrast-rgb: var(--ion-color-secondary-contrast-rgb, 255, 255, 255) !important;
119 --ion-color-shade: var(--ion-color-secondary-shade, #36abe0) !important;
120 --ion-color-tint: var(--ion-color-secondary-tint, #50c8ff) !important;
121}
122
123.ion-color-tertiary {
124 --ion-color-base: var(--ion-color-tertiary, #5260ff) !important;
125 --ion-color-base-rgb: var(--ion-color-tertiary-rgb, 82, 96, 255) !important;
126 --ion-color-contrast: var(--ion-color-tertiary-contrast, #fff) !important;
127 --ion-color-contrast-rgb: var(--ion-color-tertiary-contrast-rgb, 255, 255, 255) !important;
128 --ion-color-shade: var(--ion-color-tertiary-shade, #4854e0) !important;
129 --ion-color-tint: var(--ion-color-tertiary-tint, #6370ff) !important;
130}
131
132.ion-color-success {
133 --ion-color-base: var(--ion-color-success, #2dd36f) !important;
134 --ion-color-base-rgb: var(--ion-color-success-rgb, 45, 211, 111) !important;
135 --ion-color-contrast: var(--ion-color-success-contrast, #fff) !important;
136 --ion-color-contrast-rgb: var(--ion-color-success-contrast-rgb, 255, 255, 255) !important;
137 --ion-color-shade: var(--ion-color-success-shade, #28ba62) !important;
138 --ion-color-tint: var(--ion-color-success-tint, #42d77d) !important;
139}
140
141.ion-color-warning {
142 --ion-color-base: var(--ion-color-warning, #ffc409) !important;
143 --ion-color-base-rgb: var(--ion-color-warning-rgb, 255, 196, 9) !important;
144 --ion-color-contrast: var(--ion-color-warning-contrast, #000) !important;
145 --ion-color-contrast-rgb: var(--ion-color-warning-contrast-rgb, 0, 0, 0) !important;
146 --ion-color-shade: var(--ion-color-warning-shade, #e0ac08) !important;
147 --ion-color-tint: var(--ion-color-warning-tint, #ffca22) !important;
148}
149
150.ion-color-danger {
151 --ion-color-base: var(--ion-color-danger, #eb445a) !important;
152 --ion-color-base-rgb: var(--ion-color-danger-rgb, 235, 68, 90) !important;
153 --ion-color-contrast: var(--ion-color-danger-contrast, #fff) !important;
154 --ion-color-contrast-rgb: var(--ion-color-danger-contrast-rgb, 255, 255, 255) !important;
155 --ion-color-shade: var(--ion-color-danger-shade, #cf3c4f) !important;
156 --ion-color-tint: var(--ion-color-danger-tint, #ed576b) !important;
157}
158
159.ion-color-light {
160 --ion-color-base: var(--ion-color-light, #f4f5f8) !important;
161 --ion-color-base-rgb: var(--ion-color-light-rgb, 244, 245, 248) !important;
162 --ion-color-contrast: var(--ion-color-light-contrast, #000) !important;
163 --ion-color-contrast-rgb: var(--ion-color-light-contrast-rgb, 0, 0, 0) !important;
164 --ion-color-shade: var(--ion-color-light-shade, #d7d8da) !important;
165 --ion-color-tint: var(--ion-color-light-tint, #f5f6f9) !important;
166}
167
168.ion-color-medium {
169 --ion-color-base: var(--ion-color-medium, #92949c) !important;
170 --ion-color-base-rgb: var(--ion-color-medium-rgb, 146, 148, 156) !important;
171 --ion-color-contrast: var(--ion-color-medium-contrast, #fff) !important;
172 --ion-color-contrast-rgb: var(--ion-color-medium-contrast-rgb, 255, 255, 255) !important;
173 --ion-color-shade: var(--ion-color-medium-shade, #808289) !important;
174 --ion-color-tint: var(--ion-color-medium-tint, #9d9fa6) !important;
175}
176
177.ion-color-dark {
178 --ion-color-base: var(--ion-color-dark, #222428) !important;
179 --ion-color-base-rgb: var(--ion-color-dark-rgb, 34, 36, 40) !important;
180 --ion-color-contrast: var(--ion-color-dark-contrast, #fff) !important;
181 --ion-color-contrast-rgb: var(--ion-color-dark-contrast-rgb, 255, 255, 255) !important;
182 --ion-color-shade: var(--ion-color-dark-shade, #1e2023) !important;
183 --ion-color-tint: var(--ion-color-dark-tint, #383a3e) !important;
184}
185
186.ion-page {
187 left: 0;
188 right: 0;
189 top: 0;
190 bottom: 0;
191 display: flex;
192 position: absolute;
193 flex-direction: column;
194 justify-content: space-between;
195 contain: layout size style;
196 overflow: hidden;
197 z-index: 0;
198}
199
200/**
201 * When making custom dialogs, using
202 * ion-content is not required. As a result,
203 * some developers may wish to have dialogs
204 * that are automatically sized by the browser.
205 * These changes allow certain dimension values
206 * such as fit-content to work correctly.
207 */
208ion-modal .ion-page:not(ion-nav .ion-page) {
209 position: relative;
210 contain: layout style;
211 height: 100%;
212}
213
214.split-pane-visible > .ion-page.split-pane-main {
215 position: relative;
216}
217
218ion-route,
219ion-route-redirect,
220ion-router,
221ion-select-option,
222ion-nav-controller,
223ion-menu-controller,
224ion-action-sheet-controller,
225ion-alert-controller,
226ion-loading-controller,
227ion-modal-controller,
228ion-picker-controller,
229ion-popover-controller,
230ion-toast-controller,
231.ion-page-hidden,
232[hidden] {
233 /* stylelint-disable-next-line declaration-no-important */
234 display: none !important;
235}
236
237.ion-page-invisible {
238 opacity: 0;
239}
240
241.can-go-back > ion-header ion-back-button {
242 display: block;
243}
244
245html.plt-ios.plt-hybrid, html.plt-ios.plt-pwa {
246 --ion-statusbar-padding: 20px;
247}
248
249@supports (padding-top: 20px) {
250 html {
251 --ion-safe-area-top: var(--ion-statusbar-padding);
252 }
253}
254@supports (padding-top: constant(safe-area-inset-top)) {
255 html {
256 --ion-safe-area-top: constant(safe-area-inset-top);
257 --ion-safe-area-bottom: constant(safe-area-inset-bottom);
258 --ion-safe-area-left: constant(safe-area-inset-left);
259 --ion-safe-area-right: constant(safe-area-inset-right);
260 }
261}
262@supports (padding-top: env(safe-area-inset-top)) {
263 html {
264 --ion-safe-area-top: env(safe-area-inset-top);
265 --ion-safe-area-bottom: env(safe-area-inset-bottom);
266 --ion-safe-area-left: env(safe-area-inset-left);
267 --ion-safe-area-right: env(safe-area-inset-right);
268 }
269}
270ion-card.ion-color .ion-inherit-color,
271ion-card-header.ion-color .ion-inherit-color {
272 color: inherit;
273}
274
275.menu-content {
276 transform: translate3d(0, 0, 0);
277}
278
279.menu-content-open {
280 cursor: pointer;
281 touch-action: manipulation;
282 pointer-events: none;
283}
284
285.ios .menu-content-reveal {
286 box-shadow: -8px 0 42px rgba(0, 0, 0, 0.08);
287}
288
289[dir=rtl].ios .menu-content-reveal {
290 box-shadow: 8px 0 42px rgba(0, 0, 0, 0.08);
291}
292
293.md .menu-content-reveal {
294 box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);
295}
296
297.md .menu-content-push {
298 box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);
299}
300
301ion-accordion-group.accordion-group-expand-inset > ion-accordion:first-of-type {
302 border-top-left-radius: 8px;
303 border-top-right-radius: 8px;
304}
305
306ion-accordion-group.accordion-group-expand-inset > ion-accordion:last-of-type {
307 border-bottom-left-radius: 8px;
308 border-bottom-right-radius: 8px;
309}
310
311ion-accordion-group > ion-accordion:last-of-type ion-item[slot=header] {
312 --border-width: 0px;
313}
314
315ion-accordion.accordion-animated > [slot=header] .ion-accordion-toggle-icon {
316 transition: 300ms transform cubic-bezier(0.25, 0.8, 0.5, 1);
317}
318
319@media (prefers-reduced-motion: reduce) {
320 ion-accordion .ion-accordion-toggle-icon {
321 /* stylelint-disable declaration-no-important */
322 transition: none !important;
323 }
324}
325/**
326 * The > [slot="header"] selector ensures that we do
327 * not modify toggle icons for any nested accordions. The state
328 * of one accordion should not affect any accordions inside
329 * of a nested accordion group.
330 */
331ion-accordion.accordion-expanding > [slot=header] .ion-accordion-toggle-icon,
332ion-accordion.accordion-expanded > [slot=header] .ion-accordion-toggle-icon {
333 transform: rotate(180deg);
334}
335
336ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-previous ion-item[slot=header] {
337 --border-width: 0px;
338 --inner-border-width: 0px;
339}
340
341ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-expanding:first-of-type,
342ion-accordion-group.accordion-group-expand-inset.md > ion-accordion.accordion-expanded:first-of-type {
343 margin-top: 0;
344}
345
346ion-input input::-webkit-date-and-time-value {
347 text-align: start;
348}
349
350/**
351 * The .ion-datetime-button-overlay class contains
352 * styles that allow any modal/popover to be
353 * sized according to the dimensions of the datetime
354 * when used with ion-datetime-button.
355 */
356.ion-datetime-button-overlay {
357 --width: fit-content;
358 --height: fit-content;
359}
360
361/**
362 * The grid variant can scale down when inline.
363 * When used in a `fit-content` overlay, this causes
364 * the overlay to shrink when the month/year picker is open.
365 * Explicitly setting the dimensions lets us have a consistently
366 * sized grid interface.
367 */
368.ion-datetime-button-overlay ion-datetime.datetime-grid {
369 width: 320px;
370 min-height: 320px;
371}
372
373/*# sourceMappingURL=core.css.map */