193 lines
4.4 KiB
CSS
193 lines
4.4 KiB
CSS
/* ============================================================
|
|
BASE PAGE
|
|
============================================================ */
|
|
|
|
html, body {
|
|
margin: 0;
|
|
padding: 0;
|
|
overflow-x: hidden; /* impedisce pan orizzontale */
|
|
max-width: 100%;
|
|
touch-action: pan-y; /* solo scroll verticale */
|
|
background: #ffffff;
|
|
font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
|
color: #1a1a1a;
|
|
min-height: 100vh; /* evita scroll inutile se poche icone */
|
|
}
|
|
|
|
/* Impedisce selezione testo e highlight blu Android */
|
|
* {
|
|
-webkit-user-select: none;
|
|
user-select: none;
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
|
|
/* Variabile di zoom globale */
|
|
:root {
|
|
--zoom: 1;
|
|
}
|
|
|
|
/* ============================================================
|
|
GRIGLIA ICONE
|
|
============================================================ */
|
|
|
|
.folder {
|
|
display: grid;
|
|
grid-template-columns: repeat(
|
|
auto-fill,
|
|
minmax(calc(85px * var(--zoom)), 1fr)
|
|
);
|
|
gap: calc(16px * var(--zoom));
|
|
padding-top: 24px;
|
|
padding-left: 24px;
|
|
padding-right: 24px;
|
|
padding-bottom: 0; /* evita scroll verticale inutile */
|
|
justify-items: center;
|
|
width: 100%;
|
|
max-width: 100%;
|
|
box-sizing: border-box;
|
|
|
|
transition: grid-template-columns 0.15s ease-out,
|
|
gap 0.15s ease-out;
|
|
}
|
|
|
|
/* Contenitore icona */
|
|
.app-icon {
|
|
text-align: center;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
transition: transform 0.18s ease, filter 0.18s ease;
|
|
touch-action: manipulation;
|
|
}
|
|
|
|
/* Icona */
|
|
.app-icon img {
|
|
width: calc(70px * var(--zoom));
|
|
height: calc(70px * var(--zoom));
|
|
border-radius: calc(20px * var(--zoom));
|
|
background: #ffffff;
|
|
box-shadow:
|
|
0 4px 10px rgba(0, 0, 0, 0.12),
|
|
0 8px 24px rgba(0, 0, 0, 0.08);
|
|
display: block;
|
|
|
|
transition: width 0.18s ease-out,
|
|
height 0.18s ease-out,
|
|
border-radius 0.18s ease-out,
|
|
transform 0.18s ease-out;
|
|
}
|
|
|
|
/* Etichetta */
|
|
.app-icon span {
|
|
display: block;
|
|
margin-top: calc(6px * var(--zoom));
|
|
font-size: calc(11px * var(--zoom));
|
|
color: #3a3a3a;
|
|
font-weight: 500;
|
|
letter-spacing: -0.2px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
|
|
transition: font-size 0.18s ease-out,
|
|
margin-top 0.18s ease-out;
|
|
}
|
|
|
|
/* ============================================================
|
|
WIGGLE MODE
|
|
============================================================ */
|
|
|
|
@keyframes wiggle {
|
|
0% { transform: rotate(-2deg) scale(1.02); }
|
|
50% { transform: rotate( 2deg) scale(0.98); }
|
|
100% { transform: rotate(-2deg) scale(1.02); }
|
|
}
|
|
|
|
.edit-mode .app-icon:not(.dragging) img {
|
|
animation: wiggle 0.25s ease-in-out infinite;
|
|
}
|
|
|
|
/* Icona trascinata */
|
|
.app-icon.dragging {
|
|
opacity: 0.9;
|
|
z-index: 1000;
|
|
}
|
|
|
|
/* Placeholder invisibile */
|
|
.app-icon.placeholder {
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
}
|
|
|
|
/* ============================================================
|
|
MENU CONTESTUALE — ANDROID MATERIAL + RESPONSIVE ALLO ZOOM
|
|
============================================================ */
|
|
|
|
#context-menu {
|
|
position: fixed;
|
|
background: #ffffff;
|
|
border-radius: calc(14px * var(--zoom));
|
|
min-width: calc(180px * var(--zoom));
|
|
padding: calc(8px * var(--zoom)) 0;
|
|
z-index: 2000;
|
|
|
|
/* Ombra Material */
|
|
box-shadow:
|
|
0 calc(6px * var(--zoom)) calc(20px * var(--zoom)) rgba(0,0,0,0.18),
|
|
0 calc(2px * var(--zoom)) calc(6px * var(--zoom)) rgba(0,0,0,0.12);
|
|
|
|
/* Animazione apertura */
|
|
opacity: 0;
|
|
transform: scale(0.85);
|
|
transform-origin: top center;
|
|
transition: opacity 120ms ease, transform 120ms ease;
|
|
}
|
|
|
|
#context-menu:not(.hidden) {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
|
|
#context-menu.hidden {
|
|
display: block;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Pulsanti del menù */
|
|
#context-menu button {
|
|
all: unset;
|
|
width: 100%;
|
|
padding: calc(14px * var(--zoom)) calc(18px * var(--zoom));
|
|
font-size: calc(15px * var(--zoom));
|
|
color: #222;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: calc(12px * var(--zoom));
|
|
cursor: pointer;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Ripple effect */
|
|
#context-menu button::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
background: rgba(0,0,0,0.08);
|
|
opacity: 0;
|
|
transition: opacity 150ms;
|
|
}
|
|
|
|
#context-menu button:active::after {
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Separatore tra voci */
|
|
#context-menu button + button {
|
|
border-top: 1px solid rgba(0,0,0,0.08);
|
|
}
|
|
|
|
/* Voce "Rimuovi" in rosso */
|
|
#context-menu button:last-child {
|
|
color: #d11a2a;
|
|
}
|