@import "./globals.scss"; html.force-safe-area-margins { --ion-safe-area-left: 40px; --ion-safe-area-right: 40px; --ion-safe-area-top: 40px; --ion-safe-area-bottom: 40px; } // @todo MOBILE-3790 non-standard property, doesn't work everywhere. html { zoom: var(--zoom-level); } body { -webkit-text-size-adjust: var(--zoom-level); } // Common styles. .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .clearfix { &:after { content: ""; display: table; clear: both; } } .core-bold { font-weight: bold; } .img-responsive { display: block; max-width: 100%; &[height] { height: auto; } } .opacity-hide { opacity: 0; } .core-big { font-size: 115%; } .invisible { visibility: hidden; } .button-no-uppercase { text-transform: none; } .flex { display: flex; } .inline-block { display: inline-block; } .block { display: block; } .flex-row { display: flex; flex-direction: row; } .margin-bottom-sm { margin-bottom: 8px; } .margin-bottom-md { margin-bottom: 12px; } .font-bold { font-weight: bold; } .font-italic { font-style: italic; } .font-lg { font-size: 1.7rem; } .font-sm { font-size: 1.2rem; } // Headings. // Some styles taken from ion-label .md ion-label .item-heading, .ios ion-label .item-heading { text-overflow: inherit; overflow: inherit; --color: initial; color: var(--color); line-height: 20px; &.item-heading-secondary { --color: var(--subdued-text-color); } } .ios ion-label > p, .md ion-label > p { --color: var(--subdued-text-color); color: var(--color); } .md ion-label .item-heading { @include margin(2px, 0); font-size: 16px; font-weight: normal; &.item-heading-secondary { @include margin(2px, 0); font-size: 14px; font-weight: normal; line-height: normal; } } .ios ion-label .item-heading { @include margin(0, 0, 2px); font-size: 17px; font-weight: normal; &.item-heading-secondary { @include margin(0, 0, 3px); font-size: 14px; font-weight: normal; line-height: normal; } } // Correctly inherit ion-text-wrap onto labels. .item ion-label core-format-text .core-format-text-content > *, .fake-ion-item core-format-text .core-format-text-content > * { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .item.ion-text-wrap > ion-label core-format-text .core-format-text-content > *, .fake-ion-item.ion-text-wrap core-format-text .core-format-text-content > * { white-space: normal; overflow: inherit; } .item.ion-text-wrap > ion-label { white-space: normal !important; } @each $color-name, $unused in $colors { .text-#{$color-name}, p.text-#{$color-name} { color: var(--ion-color-#{$color-name}) !important; } } // Ionic toolbar on header. ion-toolbar { --min-height: var(--core-header-toolbar-height); } // Header. ion-header { z-index: 12; // To hide ion-slides on scroll. ion-toolbar { ion-spinner { margin: 10px; } ion-back-button, .in-toolbar.button-clear { --color: var(--core-header-toolbar-color); --ion-toolbar-color: var(--core-header-toolbar-color); --border-radius: var(--huge-radius); } ion-back-button::part(text) { display: none; } .button.button-clear, .button.button-solid { --background: transparent; --color: var(--core-header-toolbar-color); --primary: var(--core-header-toolbar-color); } .button.button-clear.button-has-icon-only, .button.button-solid.button-has-icon-only { --border-radius: var(--huge-radius); width: var(--a11y-min-target-size); height: var(--a11y-min-target-size); ion-icon { font-size: 24px; } } .core-navbar-button-hidden { display: none !important; } } ion-title { @include padding(0, 16px); h1, h2, .subheading { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; margin: 0; } .filter_mathjaxloader_equation div { display: inline !important; } h1 { .core-header-logo { max-height: var(--core-mainpage-headerlogo-maxheight); display: var( --core-mainpage-headerlogo-display); } .core-header-sitename { display: var(--core-mainpage-sitename-display); } } h1, h2, .subheading { font-size: 20px; font-weight: 500; letter-spacing: .0125em; text-align: start; padding: 0; } h1 + h2, h1 + .subheading { font-size: 14px; font-weight: 400; } &.ios { position: static; width: auto; height: auto; left: auto; right: auto; top: auto; text-align: start; h1, h2, .subheading { font-size: 17px; font-weight: 600; } h1 + h2, h1 + .subheading { font-size: 14px; font-weight: 400; } } } } ion-tabs.hide-header ion-header { display: none; } ion-footer ion-toolbar.ion-color-contrast { background-color: var(--contrast-background); } // Ionic icon. ion-icon { position: relative; &.icon-slash::after, &.icon-backslash::after { content: " "; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: var(--danger); -webkit-mask: url("/assets/fonts/font-awesome/solid/slash.svg") no-repeat 50% 50%; mask: url("/assets/fonts/font-awesome/solid/slash.svg") no-repeat 50% 50%; } &.icon-slash::after { -webkit-transform: scale(-1, 1); transform: scale(-1, 1); } &.fa-fw { text-align: center; width: 1.25em; } } // Buttons. ion-button, ion-fab-button, button, [role="button"] { min-height: var(--a11y-min-target-size); min-width: var(--a11y-min-target-size); } ion-button { margin: 4px 8px; ion-spinner[slot=start], img[slot=start] { @include margin-horizontal(-0.3em, 0.3em); } ion-spinner[slot=end], img[slot=end] { @include margin-horizontal(-0.3em, 0.3em); } ion-spinner[slot] { width: 20px; color: inherit; } } ion-button.button-outline { --border-width: var(--core-input-border-width); --border-color: var(--core-input-stroke); --background: var(--core-input-background); --color: var(--text-color); } ion-button.button-solid { --box-shadow: none; } ion-button core-format-text .core-format-text-content { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; line-height: 1.2; } ion-button > * { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } ion-button.ion-text-wrap { white-space: normal; core-format-text .core-format-text-content { white-space: normal; display: contents; } & > * { white-space: normal; } } ion-button ion-spinner { --color: inherit !important; } ion-button.button-has-icon-only { margin: 2px; } ion-button:not(.button-has-icon-only):not(.button-small) > ion-icon { min-width: 20px; } ion-button.button.button-clear.button-has-icon-only { --border-radius: var(--huge-radius); } ion-button.button.button-solid, ion-button.button.button-outline { --border-radius: var(--core-input-radius); } [role="button"], .clickable { cursor: pointer; [disabled], [aria-disabled="true"] { cursor: default; opacity: .4; pointer-events: none; } } button[disabled] { cursor: default; opacity: .4; pointer-events: none; } ion-button.core-button-as-link { text-transform: none; text-decoration: underline; font-size: inherit; font-weight: normal; letter-spacing: normal; white-space: break-spaces; } button.as-link { display: inline; min-height: auto; min-width: auto; color: var(--core-link-color); background: none; border: 0; line-height: inherit; margin: 0; padding: 0; text-align: start; font-size: inherit; } // Ionic alert. ion-alert.core-alert-network-error .alert-head, div.core-iframe-network-error { position: relative; content: " "; background: url("/assets/fonts/font-awesome/solid/wifi.svg") no-repeat 50% 50%; margin: 25px auto; &::after { content: " "; position: absolute; top: -20%; right: -15%; width: 50%; height: 50%; background-color: var(--danger); -webkit-mask: url("/assets/fonts/font-awesome/solid/exclamation-triangle.svg") no-repeat 50% 50%; mask: url("/assets/fonts/font-awesome/solid/exclamation-triangle.svg") no-repeat 50% 50%; } } [dir=rtl] ion-alert.core-alert-network-error .alert-head::after, [dir=rtl] div.core-iframe-network-error::after { right: unset; left: -15%; } ion-alert.core-nohead { .alert-head { padding-bottom: 0; } } ion-alert { --border-radius: var(--huge-radius); &.md, &.ios { --max-width: 80%; @include media-breakpoint-up(md) { --max-width: 384px; } } .alert-wrapper { overflow: auto; border-radius: var(--border-radius) !important; button.alert-button.alert-button-role-destructive { color: var(--danger); } } .alert-message { user-select: text; flex-shrink: 0; } } ion-loading { --border-radius: var(--huge-radius); .loading-wrapper { border-radius: var(--border-radius) !important; } } // Toasts. ion-toast { --button-color: var(--primary-tint); @include media-breakpoint-down(sm) { &::part(container) { flex-direction: column; } } } // Ionic list. ion-list { padding: 0 !important; --ion-item-background: transparent; } // Safe areas .safe-area-padding, .safe-area-padding-horizontal { @include padding-horizontal(var(--ion-safe-area-left), var(--ion-safe-area-right)); } .safe-area-margin, .safe-margin-horizontal { @include margin-horizontal(var(--ion-safe-area-left), var(--ion-safe-area-right)); } .ion-padding.safe-area-padding-horizontal { @include safe-area-padding-horizontal(16px, 16px); } .ion-margin.safe-margin-horizontal { @include safe-area-margin-horizontal(16px, 16px); } ion-tabs.placement-side .tabs-inner { --ion-safe-area-left: 0px; } ion-tabs.placement-bottom .tabs-inner { --ion-safe-area-bottom: 0px; } core-split-view.menu-and-content { .menu { --ion-safe-area-right: 0px; } .content-outlet { --ion-safe-area-left: 0px; } } // Iframe fullscreen manage. // Using router outlet to avoid changing styles on modals. body.core-iframe-fullscreen ion-router-outlet { ion-tab-bar.mainmenu-tabs { display: none; // Restore original safe area. .tabs-inner { @supports (padding-left: constant(safe-area-inset-left)) { --ion-safe-area-left: constant(safe-area-inset-left); } @supports (padding-left: env(safe-area-inset-left)) { --ion-safe-area-left: env(safe-area-inset-left); } } } --core-header-toolbar-height: 48px; --core-header-toolbar-color: white; --core-header-toolbar-background: black; --core-header-toolbar-border-width: 0px; ion-header ion-toolbar { h1, ion-back-button { display: none; } } @media screen and (orientation: landscape) { // Place ion-header on the side and hide text .ion-page { flex-direction: row-reverse; ion-header { width: calc(var(--core-header-toolbar-height), var(--ion-safe-area-right)); @include safe-area-padding-horizontal(null, 0px); background: var(--core-header-toolbar-background); ion-toolbar { padding: 0; height: 100%; --padding-start: 0px; --padding-end: 0px; } ion-buttons { flex-direction: column-reverse; } } } } } // Modals. .core-modal-fullscreen .modal-wrapper { position: absolute; @include position(0 !important, null, null, 0 !important); display: block; width: 100% !important; height: 100% !important; } .core-modal-transparent { ion-backdrop { backdrop-filter: blur(8px); } .modal-wrapper { backdrop-filter: blur(12px); --background: rgba(10, 10, 10, 0.2); ion-content { --background: transparent !important; } position: absolute; @include position(0 !important, null, null, 0 !important); display: block; width: 100% !important; height: 100% !important; } } .core-modal-force-on-top { z-index: 100000 !important; } .core-modal-lateral .modal-wrapper { @include margin-horizontal(16px, null); } @media only screen and (min-height: 400px) and (min-width: #{$modal-lateral-width}) { .core-modal-lateral { --ion-safe-area-left: 0px; --ion-safe-area-right: 0px; .modal-wrapper { position: absolute; @include position(0 !important, 0 !important, 0 !important, unset !important); display: block; height: 100% !important; width: auto; min-width: calc(#{$modal-lateral-width} - 16px); box-shadow: 0 28px 48px rgba(0, 0, 0, 0.4); } ion-backdrop { visibility: visible; } } } @each $breakpoint, $width in $screen-breakpoints { .core-modal-lateral-#{$breakpoint} .modal-wrapper { @include margin-horizontal(16px, null); } @media only screen and (min-height: 400px) and (min-width: #{$width}) { .core-modal-lateral-#{$breakpoint} { --ion-safe-area-left: 0px; --ion-safe-area-right: 0px; .modal-wrapper { position: absolute; @include position(0 !important, 0 !important, 0 !important, unset !important); display: block; height: 100% !important; width: auto; min-width: #{$width}; box-shadow: 0 28px 48px rgba(0, 0, 0, 0.4); } ion-backdrop { visibility: visible; } } } } // Hidden submit button. .core-submit-hidden-enter { position: absolute; visibility: hidden; left: -1000px; } // Note on foot of ion-input. .item .core-input-footnote { width: 100%; font-style: italic; margin-top: 0; margin-bottom: 10px; font-size: 14px; } // Item styles [aria-current="page"], .item.item-current { @include safe-area-border-start(var(--selected-item-border-width), solid, var(--selected-item-color)); > * { --ion-safe-area-left: 0px; } &::part(native) { --ion-safe-area-left: 0px; } } .item.item-file { ion-thumbnail { --size: 32px; width: var(--size); height: var(--size); } } .item-dimmed { opacity: 0.7; --background: var(--light); } // Extra text colors. .text-gray { color: var(--gray-500); } // Card styles @each $color-name, $unused in $colors { // Message cards. ion-card.core-#{$color-name}-card { --color-tint: var(--ion-color-#{$color-name}-tint); --color-shade: var(--ion-color-#{$color-name}-shade); --border-width: 0; --border-color: var(--color-tint); --background: var(--color-tint); --color: var(--color-shade); ion-item { --background: var(--color-tint); --color: var(--color-shade); --inner-border-width: 0px; --border-width: 0px; ion-label, ion-label > p { --color: var(--color-shade); } } ion-label { white-space: normal !important; } ion-item > ion-icon { color: var(--color-shade); @include margin-horizontal(null, 16px); } } .item.core-#{$color-name}-item { --color-base: var(--ion-color-#{$color-name}); --color-shade: var(--ion-color-#{$color-name}-shade); --border-width: 0 0 3px 0; --border-color: var(--color-base); --inner-border-width: 0px; ion-icon { color: var(--color-base); } } ion-icon.ion-color-#{$color-name} { --ion-color-base: var(--ion-color-#{$color-name}); color: var(--ion-color-base); } } // Avatar // ------------------------- // Large centered avatar img.large-avatar, .large-avatar img { display: block; margin: 8px auto; width: var(--core-large-avatar-size); height: var(--core-large-avatar-size); max-width: var(--core-large-avatar-size); max-height: var(--core-large-avatar-size); margin-bottom: 10px; border-radius : 50%; padding: 4px; border: 1px solid var(--stroke); background-color: transparent; } ion-avatar.large-avatar { width: var(--core-large-avatar-size); height: var(--core-large-avatar-size); } ion-avatar ion-img, ion-avatar img { text-indent: -99999px; background-color: var(--gray-200); } // Wait to load before showing the image. img[core-external-content]:not([src]) { visibility: hidden; } ion-card { border-width: var(--border-width); border-style: var(--border-style); border-color: var(--border-color); box-shadow: var(--box-shadow); border-radius: var(--border-radius); margin: var(--ion-card-vertical-margin) var(--ion-card-horizontal-margin); ion-item:only-child { --inner-border-width: 0px; } } .core-course-module-handler:not(.addon-mod-label-handler) .item-heading .filter_mathjaxloader_equation div { display: inline !important; } ion-list.core-course-module-list-wrapper, .list-item-limited-width, .core-course-module-list-wrapper { max-width: var(--list-item-max-width); margin-left: auto !important; margin-right: auto !important; } ion-toolbar h1 img.core-bar-button-image, ion-toolbar h1 .core-bar-button-image img { padding: 4px; width: var(--core-header-toolbar-button-image-size); height: var(--core-header-toolbar-button-image-size); max-width: var(--core-header-toolbar-button-image-size); max-height: var(--core-header-toolbar-button-image-size); border-radius: 50%; display: block; } // Action sheet. .md ion-action-sheet { .action-sheet-group-cancel { -webkit-filter: drop-shadow(0px 3px 6px rgba(var(--drop-shadow))); filter: drop-shadow(0px 3px 6px rgba(var(--drop-shadow))); } .action-sheet-title { border-bottom: 2px solid var(--title-border-color); } } .ios ion-action-sheet { .action-sheet-title { font-size: 16px; } .action-sheet-title { border-bottom: 2px solid var(--title-border-color); } } // Radio. ion-radio, input[type=radio] { --color: var(--text-color); --color-checked: var(--color); --border-radius: 50%; --border-width: 2px; --outer-border-width: 2px; --border-style: solid; --inner-border-radius: 50%; --size: 20px; } .ios ion-radio, .ios input[type=radio] { --border-width: 1px; --outer-border-width: 1px; } .ios ion-radio { width: var(--size); height: var(--size); &::part(container) { margin: 0px; border-radius: var(--border-radius); border-width: var(--outer-border-width); border-style: var(--border-style); border-color: var(--color); } &::part(mark) { border-radius: var(--inner-border-radius); width: calc(50% + var(--outer-border-width)); height: calc(50% + var(--outer-border-width)); transform: scale3d(0, 0, 0); transition: transform 280ms cubic-bezier(.4, 0, .2, 1); background: var(--contrast-background); border: 0 !important; } &.radio-checked { &::part(container) { border-color: var(--color-checked); background: var(--color-checked); } &::part(mark) { transform: scale3d(1, 1, 1); } } } // Checkbox. ion-checkbox, input[type=checkbox] { --border-radius: 2px; --border-color-checked: var(--text-color); --background-checked: var(--text-color); --checkmark-color: var(--contrast-background); --border-width: 2px; --outer-border-width: 2px; --border-style: solid; --size: 20px; } .ios input[type=checkbox] { --outer-border-width: 1px; } // Select. ion-select::part(text) { white-space: normal; } ion-select::part(icon) { opacity: 1; } ion-select-popover ion-item.core-select-option-title { cursor: pointer; ion-radio { display: none; } } ion-badge { line-height: 1.1; padding: 4px 8px; border-radius: var(--big-radius); } ion-chip, ion-button.chip { line-height: 1.1; font-size: 12px; min-height: 24px; text-transform: none; margin: 4px; font-weight: normal; ion-icon { font-size: 16px; min-width: 16px; @include margin(0, 8px, 0, 0); } ion-label { white-space: normal !important; } } ion-chip { line-height: 1.1; font-size: 12px; padding: 4px 8px; min-height: 24px; height: auto; // Chips are not currently clickable. &.ion-activatable { cursor: auto; pointer-events: none; } &.ion-color { background: var(--ion-color-tint); &.chip-outline { background-color: transparent; border-color: var(--ion-color-base); color: var(--ion-color-base); } } } ion-searchbar { .searchbar-search-icon.ios { top: 4px; } .searchbar-search-icon.md { } .searchbar-input, .sc-ion-searchbar-md.searchbar-input, .sc-ion-searchbar-ios.searchbar-input { @include padding-horizontal(48px); } .searchbar-input { @include padding-horizontal(48px); } } // File uploader. .action-sheet-button input.core-fileuploader-file-handler-input { position: absolute; top: 0; bottom: 0; left: 0; right: 0; min-width: 100%; opacity: 0; z-index: 100; cursor: pointer; } .core-anchor, core-format-text a { color: var(--core-link-color); cursor: pointer; text-decoration: underline; } core-block ion-item-divider .core-button-spinner { display: flex; align-items: center; @include margin-horizontal(10px); ion-badge.core-course-download-courses-progress { @include margin(null, 12px, null, null); } } // Horizontal scrolling elements .core-horizontal-scroll { display: block; overflow-x: scroll; .safe-area-pseudo-padding-start { @include padding-horizontal(var(--ion-safe-area-left), 0px); } .safe-area-pseudo-padding-end { @include padding-horizontal(0px, var(--ion-safe-area-right)); } } // Text formats. // Highlight text. mark, .matchtext { background-color: var(--text-hightlight-background-color); } // Monospaced font. .core-monospaced { font-family: Andale Mono,Monaco,Courier New,DejaVu Sans Mono,monospace; } .core-iframe-offline-disabled { display: none !important; } .core-scanning-qr { .ion-page, .modal-wrapper { background-color: transparent !important; --background: transparent; } ion-content, ion-backdrop, ion-modal:not(.core-modal-fullscreen), ion-tabs { display: none !important; } } // Hide virtual utilities. .core-browser-copy-area { display: none; } // Different levels of padding. @for $i from 0 through 15 { .core-padding-#{$i} { @include padding(null, null, null, 15px * $i + 16px); } } details summary { pointer-events: auto; cursor: pointer; } textarea { min-height: var(--a11y-min-target-size); } textarea:not([core-auto-rows]) { height: 200px; } ion-back-button.md::part(text) { display: none; } // Hide close button because when present is read on voice over. ion-fab[core-fab] { ion-fab-button::part(close-icon) { display: none; } } ion-content.has-collapsible-footer ion-fab { bottom: calc(var(--core-navigation-height, 0px) + 10px); @include core-transition(all, 200ms); } .core-media-adapt-width { max-width: 100%; } img.core-media-adapt-width { height: auto; } audio.core-media-adapt-width { width: 100%; } ion-item { --inner-border-width: 0px; } ion-item.item-lines-full { --inner-border-width: 0px; --border-width: 0 0 1px 0; } ion-item.item-lines-inset { --inner-border-width: 1px; --border-width: 0px; } ion-item.item-input.ios { --inner-border-width: 0 0 1px 0; } // Fake item. div.fake-ion-item { position: relative; align-items: center; justify-content: space-between; outline: none; color: var(--ion-text-color); background: var(--ion-item-background); text-align: initial; text-decoration: none; overflow: hidden; box-sizing: border-box; } html.md div.fake-ion-item { font-size: 16px; font-weight: normal; text-transform: none; @include padding(null, 16px, null, 16px); @include margin(11px, null, 10px, null); h1 { @include margin(0, 0, 2px); font-size: 24px; font-weight: normal; } h2 { @include margin(2px, 0); font-size: 16px; font-weight: normal; } h3, h4, h5, h6 { @include margin(2px, 0); font-size: 14px; font-weight: normal; line-height: normal; } p { @include margin(0, 0, 2px); font-size: 14px; line-height: 20px; text-overflow: inherit; overflow: inherit; } } html.ios div.fake-ion-item { font-size: 14px; @include padding(null, 10px, null, 20px); @include margin(10px, 8px, 10px, null); h1 { @include margin(3px, 0, 2px); font-size: 22px; font-weight: normal; } h2 { @include margin(0, 0, 2px); font-size: 17px; font-weight: normal; } h3, h4, h5, h6 { @include margin(0, 0, 3px); font-size: 14px; font-weight: normal; line-height: normal; } p { @include margin(0, 0, 2px 0); font-size: 14px; line-height: normal; text-overflow: inherit; overflow: inherit; } } // Disabled items. ion-item.item-disabled, ion-item.item-interactive-disabled:not(.item-multiple-inputs) ion-label, ion-datetime.datetime-disabled { opacity: .8 !important; } // Make links clickable when inside radio or checkbox items. Style part. @media (hover: hover) { ion-item.item-multiple-inputs:hover::part(native) { color: var(--color-hover); &::after { background: var(--background-hover); opacity: var(--background-hover-opacity); } } ion-item.ion-color.item-multiple-inputs:hover::part(native) { color: #{current-color(contrast)}; &::after { background: #{current-color(contrast)}; } } } // It fixes the click on links where ion-ripple-effect is present. // Make links clickable when inside radio or checkbox items. Pointer and cursor part. ion-item.item-multiple-inputs:not(.only-links), ion-item.ion-activatable:not(.only-links) { cursor: pointer; ion-label { z-index: 3; pointer-events: none; ion-anchor, a, ion-button, button, audio, video, select, input, iframe { pointer-events: visible; } } ion-checkbox, ion-datetime, ion-radio, ion-select{ position: static; } } ion-item.item-multiple-inputs.only-links { a { cursor: pointer; } } a { cursor: pointer; } // Case with ion-input + ion-select inside. ion-item.item-input.item-multiple-inputs { .flex-row { width: 100%; ion-select { position: relative; } } } // Focus highlight for accessibility. ion-item.item-input.ion-focused:not(:focus), .ion-focused, ion-item.ion-activatable.ion-focused:not(:focus), ion-input.has-focus, .ion-focused ion-toggle:focus-within, .ion-focused ion-select:focus-within, .ion-focused ion-checkbox:focus-within, .ion-focused ion-radio:focus-within { @include core-focus(); } // Treat cases where there's a focusable element inside an item, like a button. ion-item.ion-focused:not(:focus), ion-item.item-input ion-input.has-focus { position: relative; &::after { box-shadow: revert; opacity: revert; z-index: revert; } .item-highlight, .item-inner-highlight { position: unset; } } ion-item-divider.item, ion-item.item.divider { min-height: var(--min-height); border-bottom-width: var(--item-divider-border-width); --border-width: var(--item-divider-border-width); --inner-border-width: 0 0 var(--item-divider-border-width) 0; ion-label h2, ion-label p.item-heading { font-size: var(--item-divider-font-size); font-weight: 500; line-height: 1.5; } ion-label h2.big { font-size: var(--item-divider-font-size-big); } .expandable-status-icon { font-size: 18px; @include core-transition(transform, 200ms); @include margin-horizontal(null, 16px); &.expandable-status-icon-expanded { transform: var(--rotate-expandable); } } } // Change default outline. :focus-visible { @include core-focus-style(); outline: none; } textarea, button, select, input, a { &:focus { @include core-focus-style(); outline: none; } } ion-loading:focus-visible, ion-alert:focus-visible, ion-popover:focus-visible, ion-modal:focus-visible { box-shadow: none; } ion-input .native-input { &:focus, &:focus-visible { box-shadow: none; outline: none; } } // Disable scroll on parent ion contents to enabled PTR on the ones inside the splitview. See split-view component for more info. ion-content.disable-scroll-y::part(scroll) { touch-action: auto; overflow-y: hidden; overscroll-behavior-y: auto; z-index: auto; will-change: auto; } iframe { border: 0; display: block; max-width: 100%; background-color: var(--ion-background-color); } @if ($core-login-hide-need-help) { .core-login-need-help { display: none !important; } } ion-grid.core-no-grid > ion-row { display: block; } .core-underheader { position: absolute; top: 0; left: 0; right: 0; } [collapsible-item] { @include collapsible-item(); } [collapsible-footer] { &.footer-collapsed { --core-collapsible-footer-height: 0; opacity: 0; } &.footer-expanded { --core-collapsible-footer-height: auto; } .ion-margin { margin-top: 8px; margin-bottom: 8px; } filter: var(--scroll-shadow-top, none); -webkit-filter: var(--scroll-shadow-top, none); width: 100%; bottom: 0; z-index: 3; height: var(--core-collapsible-footer-height, auto); background-color: var(--core-collapsible-footer-background); display: block; @include core-transition(all, 200ms); } .core-iframe-fullscreen [collapsible-footer] { opacity: 0 !important; height: 0 !important; } @include media-breakpoint-up(md) { .adaptable-buttons-row { display: flex; flex-direction: row; ion-button { flex: 1; } } } ion-header.no-title { --core-header-toolbar-border-width: 0; --core-header-toolbar-background: transparent; ion-toolbar .button.button-clear, ion-toolbar .button.button-solid { --background: var(--ion-background-color); } } ion-header[collapsible] { @include core-transition(all, 500ms); ion-title { @include core-transition(opacity, 0ms); } } // Only hide header when not in fullscreen. body:not(.core-iframe-fullscreen) ion-header[collapsible]:not(.core-header-collapsed) { ion-toolbar { --core-header-toolbar-background: rgba(255, 255, 255, 0); --core-header-toolbar-border-width: 0; } ion-title, &::after { opacity: 0; z-index: 0; } } .collapsible-title { overflow: visible; --inner-padding-top: 0px; --padding-top: 0px; ion-label { margin-top: 0px; } *, h1 { @include core-transition(all, 200ms, linear); } ion-label { overflow: visible !important; } h1 { --max-width: none; } h1.cloned { opacity: 0 !important; } } ion-app.ios .collapsible-title h1 { font-weight: 600; // Default heading weight. } ion-app.md .collapsible-title h1 { font-weight: 500; // Default heading weight. letter-spacing: .0125em; } .collapsible-title.collapsible-title-collapsed { ion-label, h1, ion-row, ion-col { opacity: 0; } } .collapsible-title.collapsible-title-collapse-started { * { opacity: var(--collapse-opacity, 0); } ion-label, h1, ion-row, ion-col, .subheading { opacity: 1; } } .collapsible-title.collapsible-title-collapse-nowrap { h1:not(.cloned) { max-width: var(--max-width); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } } // In fullscreen, disable the offset-top added by collapsible header. body.core-iframe-fullscreen ion-content { --offset-top: 0px !important; } // To make core-swipe-slides fill the remaining height. .core-swipe-slides-container { display: flex; flex-direction: column; flex-grow: 1; min-height: 100%; core-swipe-slides { display: flex; flex-direction: column; flex-grow: 1; ion-slides { flex-grow: 1; max-width: 100%; } } } .has-spacer { display: flex; flex-direction: column; min-height: 100%; flex-grow: 1; .spacer-top { flex-grow: 1; align-content: flex-end; } .spacer { flex-grow: 1; } }