Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
409 lines
8 KiB
CSS
Executable file
409 lines
8 KiB
CSS
Executable file
.icon[data-app-state="loading"]:after {
|
|
content: "";
|
|
background: no-repeat top center url('images/app_install_spinner.png');
|
|
background-size: contain;
|
|
height: 8.4rem;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
/**
|
|
Keyframe must be defined outside of the web component.
|
|
See bug 1018269
|
|
*/
|
|
|
|
animation: rotate 2.25s linear infinite;
|
|
}
|
|
|
|
.icon[data-app-state="loading"] {
|
|
/**
|
|
We must align this value with the value of [data-app-state]:after height the background size
|
|
here is overridden at the element level elsewhere which causes the spinner to be aligned too
|
|
low.
|
|
*/
|
|
background-size: 8.4rem !important;
|
|
background-image: url('images/app_installing.png') !important;
|
|
}
|
|
|
|
.icon[data-app-state="unrecoverable"] {
|
|
background-image: url('images/app_install_unrecoverable.png') !important;
|
|
}
|
|
|
|
.icon[data-app-state="error"] {
|
|
background-image: url('images/app_install_failed.png') !important;
|
|
}
|
|
|
|
.icon[data-app-state="paused"] {
|
|
background-image: url('images/app_install_canceled.png') !important;
|
|
}
|
|
|
|
.icon {
|
|
position: absolute;
|
|
transform-origin: 0 0;
|
|
display: inline-block;
|
|
text-align: center;
|
|
background: no-repeat top center;
|
|
z-index: 3;
|
|
outline: 0;
|
|
}
|
|
|
|
.icon.launching {
|
|
opacity: .65;
|
|
}
|
|
|
|
/* XXX: Override the .remove element */
|
|
.edit-mode .collection.hovered .remove {
|
|
background: url(images/add.png) no-repeat;
|
|
background-size: 2rem;
|
|
}
|
|
|
|
.icon p {
|
|
pointer-events: none;
|
|
height: 3.2rem;
|
|
width: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.icon .title {
|
|
display: inline-block;
|
|
margin-top: 0.1rem;
|
|
/* We need this rule in order not to hide the drop shadow */
|
|
padding: 0 0.2rem 1rem;
|
|
text-shadow: 0.1rem 0.1rem 0.3rem rgba(0, 0, 0, 0.3),
|
|
0.2rem 0.4rem 1rem rgba(0, 0, 0, 0.4);
|
|
font-size: 1.4rem;
|
|
color: #fff;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
width: calc(100% - 0.4rem);
|
|
box-sizing: border-box;
|
|
vertical-align: top;
|
|
transition: opacity var(--transition-duration);
|
|
}
|
|
|
|
/* We allow more space for text in the search app by hooking into the text-rows attribute on gaia-grid. */
|
|
[text-rows="3"] .icon .title {
|
|
height: 5.8rem;
|
|
}
|
|
|
|
[cols="4"] .icon .title {
|
|
/* Font size is the same independent on grid configuration */
|
|
font-size: calc(1.2rem * 1.333);
|
|
margin-top: 0.5rem;
|
|
line-height: 1.94rem;
|
|
}
|
|
|
|
.edit-mode .icon.collapsed {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.icon.collapsed .title {
|
|
opacity: 0;
|
|
}
|
|
|
|
.icon.hidden {
|
|
pointer-events: none;
|
|
opacity: 0;
|
|
}
|
|
|
|
.divider {
|
|
position: absolute;
|
|
width: 100%;
|
|
padding-top: 2.3rem;
|
|
border-left: 0.6rem solid transparent;
|
|
border-right: 0.6rem solid transparent;
|
|
box-sizing: border-box;
|
|
z-index: 2;
|
|
}
|
|
|
|
[cols="4"] .divider {
|
|
padding-top: 1.6rem;
|
|
}
|
|
|
|
.divider span.spacer {
|
|
position: absolute;
|
|
bottom: 0;
|
|
display: block;
|
|
background: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.5));
|
|
margin: 0 25%;
|
|
width: 50%;
|
|
height: 0.2rem;
|
|
transition: opacity var(--transition-duration);
|
|
}
|
|
|
|
.dragging .icon.active:not(.hidden) {
|
|
z-index: 6;
|
|
opacity: 0.65;
|
|
}
|
|
|
|
.dragging .divider:not(.group),
|
|
.icon:not(.active),
|
|
.dropped {
|
|
transition: transform var(--transition-duration),
|
|
opacity var(--transition-duration);
|
|
}
|
|
|
|
.icon.active {
|
|
will-change: transform;
|
|
}
|
|
|
|
.edit-mode .icon .remove {
|
|
display: block;
|
|
position: absolute;
|
|
top: 0.1rem;
|
|
left: 0.5rem;
|
|
width: 2.6rem;
|
|
height: 2.6rem;
|
|
background: url(images/remove.png) no-repeat;
|
|
background-size: 2rem;
|
|
/*
|
|
Ensure that remove is on top of the icon and has some extra
|
|
padding so it is easy to click.
|
|
*/
|
|
z-index: 200;
|
|
padding: 0.5rem;
|
|
}
|
|
|
|
.icon .remove,
|
|
.icon.collapsed .remove,
|
|
.edit-mode .icon.active .remove {
|
|
display: none;
|
|
}
|
|
|
|
.edit-mode .icon.editable .title {
|
|
background-color: rgba(132, 132, 132, 0.7);
|
|
border-radius: 2rem;
|
|
margin-top: .4rem;
|
|
padding: 0 1rem;
|
|
width: auto;
|
|
max-width: 100%;
|
|
}
|
|
|
|
/*
|
|
Disable events for placeholders, so we don't trigger touch events in edit mode.
|
|
We only do this in edit-mode, otherwise we might trigger entering edit mode
|
|
instead of the context menu.
|
|
*/
|
|
.edit-mode .placeholder {
|
|
pointer-events: none;
|
|
}
|
|
|
|
#confirm-message {
|
|
z-index: 100;
|
|
}
|
|
|
|
.dragging .group.active {
|
|
z-index: 5;
|
|
}
|
|
|
|
.divider.group {
|
|
border: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.group > span {
|
|
display: block;
|
|
position: absolute;
|
|
width: 100%;
|
|
transition: background-color var(--transition-duration),
|
|
opacity var(--transition-duration);
|
|
}
|
|
|
|
.group:not(.active):not(.newly-created) > span {
|
|
transition: background-color var(--transition-duration),
|
|
opacity var(--transition-duration),
|
|
transform var(--transition-duration);
|
|
}
|
|
|
|
.group.active > span {
|
|
will-change: transform;
|
|
}
|
|
|
|
.group .header {
|
|
height: 4rem;
|
|
z-index: 4;
|
|
}
|
|
|
|
.group .header span,
|
|
.group .header button {
|
|
position: absolute;
|
|
height: 4rem;
|
|
top: 0;
|
|
|
|
background-position: center top;
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 2rem;
|
|
|
|
transition: transform 0.25s, opacity 0.25s;
|
|
}
|
|
|
|
.group .header .gripper {
|
|
left: calc(50% - 4.2rem);
|
|
width: 8.4rem;
|
|
background-image: url('images/move_gripper.png');
|
|
opacity: 0;
|
|
transform: translate(0, -100%);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.edit-mode .group:not(.collapsed) .header .gripper {
|
|
opacity: 1;
|
|
transform: translate(0, 0);
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.group .header .toggle {
|
|
width: 5.34rem;
|
|
right: 0;
|
|
|
|
border: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
|
|
background-color: transparent;
|
|
background-image: url('images/collapse_arrow.png');
|
|
transform-origin: 50% 1.6rem;
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.group .header .toggle.toggling {
|
|
opacity: 0.5;
|
|
transition: transform 0.25s;
|
|
}
|
|
|
|
.group.collapsed .header .toggle {
|
|
transform: translateY(2rem) rotateZ(180deg);
|
|
}
|
|
|
|
.group.active .header .toggle {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.group .background {
|
|
background-color: rgba(255, 255, 255, 0.15);
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
height: 0.1rem;
|
|
transform-origin: 0 0;
|
|
}
|
|
|
|
.group.odd:not(.newly-created) .background,
|
|
.edit-mode .group:not(.newly-created) .background {
|
|
opacity: 1;
|
|
}
|
|
|
|
.group.active .background {
|
|
background-color: rgba(51, 51, 51, 0.9);
|
|
}
|
|
|
|
.group.hovering .background,
|
|
.group.drop-target .background {
|
|
background-color: rgba(27, 185, 225, 0.5);
|
|
}
|
|
|
|
.group .shadow {
|
|
background-color: rgba(255, 255, 255, 0.15);
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.edit-mode .group.active .shadow {
|
|
background-color: transparent;
|
|
box-shadow: 0 0.9rem 1.2rem rgba(0, 0, 0, 0.63);
|
|
opacity: 1;
|
|
}
|
|
|
|
.group .separator {
|
|
margin: 0;
|
|
height: 0.8rem;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.group .separator > span {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
transition: transform 0.25s, opacity 0.25s;
|
|
opacity: 0;
|
|
}
|
|
|
|
.group.odd .separator {
|
|
opacity: 1;
|
|
}
|
|
|
|
.group.odd .separator > span {
|
|
background-color: rgba(255, 255, 255, 0.15);
|
|
opacity: 1;
|
|
}
|
|
|
|
.edit-mode .group .separator,
|
|
.edit-mode .group .separator > span {
|
|
opacity: 0;
|
|
}
|
|
|
|
/* For preventing entering edit mode when long-pressing on a placeholder */
|
|
.edit-mode .group .background,
|
|
.edit-mode .group .shadow,
|
|
|
|
.group.collapsed .header,
|
|
.group.collapsed .background,
|
|
.group.collapsed .shadow {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.edit-mode .group.collapsed .background {
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.dragging .group:not(.active) .separator {
|
|
opacity: 1;
|
|
}
|
|
|
|
.dragging .group:not(.active):not(.invalid-drop) .separator > span {
|
|
background-color: #0095dd;
|
|
transform: scaleY(0.325);
|
|
opacity: 0.4;
|
|
}
|
|
|
|
.dragging .group.hovered:not(.active) .separator > span {
|
|
transform: scaleY(1);
|
|
opacity: 1;
|
|
}
|
|
|
|
/* A hint element for dragging items to the top of the group */
|
|
.edit-mode::after {
|
|
content: ' ';
|
|
display: block;
|
|
width: 100%;
|
|
height: 0.8rem;
|
|
z-index: 2;
|
|
opacity: 0;
|
|
background-color: #0095dd;
|
|
|
|
position: relative;
|
|
top: -0.8rem;
|
|
transition: opacity 0.25s;
|
|
}
|
|
|
|
.edit-mode.hover-over-top::after {
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Shift container downwards when hovering over the top to reveal the group
|
|
* creation hint.
|
|
*/
|
|
.edit-mode {
|
|
transition: transform 0.25s;
|
|
}
|
|
|
|
.edit-mode.hover-over-top {
|
|
transform: translateY(0.8rem);
|
|
}
|
|
|
|
/* RTL View */
|
|
:-moz-dir(rtl) .group .header .toggle {
|
|
left: 0;
|
|
right: unset;
|
|
}
|