diff --git a/shaarli-pro/css/style.css b/shaarli-pro/css/style.css index cdf74ed..bda2572 100644 --- a/shaarli-pro/css/style.css +++ b/shaarli-pro/css/style.css @@ -2280,25 +2280,170 @@ select:focus { } /* ===== Picture Wall ===== */ -.picwall-container { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 1rem; + +/* Picwall Controls */ +.picwall-controls { + margin-bottom: 1.5rem; + padding: 1rem 1.25rem; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 0.75rem; + box-shadow: var(--shadow-sm); } +.picwall-controls-inner { + display: flex; + align-items: center; + gap: 1.25rem; + flex-wrap: wrap; +} + +.picwall-controls-label { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.9rem; + font-weight: 600; + color: var(--text-main); +} + +.picwall-controls-label i { + font-size: 1.125rem; + color: var(--primary); +} + +.picwall-size-controls { + display: flex; + align-items: center; + gap: 0.75rem; + flex: 1; + max-width: 300px; +} + +.picwall-size-btn { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 0.5rem; + border: 1px solid var(--border); + background: var(--bg-body); + color: var(--text-main); + cursor: pointer; + transition: all 0.2s ease; + flex-shrink: 0; +} + +.picwall-size-btn:hover { + background: var(--primary); + border-color: var(--primary); + color: white; + transform: scale(1.05); +} + +.picwall-size-btn:active { + transform: scale(0.95); +} + +.picwall-size-btn i { + font-size: 1rem; +} + +.picwall-size-slider { + flex: 1; + -webkit-appearance: none; + appearance: none; + height: 6px; + background: var(--border); + border-radius: 3px; + outline: none; + cursor: pointer; +} + +.picwall-size-slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 18px; + height: 18px; + border-radius: 50%; + background: var(--primary); + cursor: pointer; + border: 3px solid white; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + transition: transform 0.15s ease, box-shadow 0.15s ease; +} + +.picwall-size-slider::-webkit-slider-thumb:hover { + transform: scale(1.15); + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.25); +} + +.picwall-size-slider::-moz-range-thumb { + width: 18px; + height: 18px; + border-radius: 50%; + background: var(--primary); + cursor: pointer; + border: 3px solid white; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); +} + +.picwall-size-value { + font-size: 0.85rem; + font-weight: 600; + color: var(--text-secondary); + background: var(--primary-light); + padding: 0.375rem 0.75rem; + border-radius: 9999px; + min-width: 60px; + text-align: center; +} + +/* Picwall Container with dynamic sizing */ +.picwall-container { + --picwall-item-size: 200px; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(var(--picwall-item-size), 1fr)); + gap: 1rem; + transition: grid-template-columns 0.3s ease; +} + +/* Picture Frame */ .picwall-pictureframe { position: relative; - border-radius: 0.5rem; + border-radius: 0.75rem; overflow: hidden; aspect-ratio: 16/10; background: var(--bg-card); border: 1px solid var(--border); + box-shadow: var(--shadow-sm); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), + box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.picwall-pictureframe:hover { + transform: translateY(-4px) scale(1.02); + box-shadow: var(--shadow-xl); + z-index: 10; +} + +/* Image Link Wrapper */ +.picwall-image-link { + display: block; + width: 100%; + height: 100%; } .picwall-pictureframe img { width: 100%; height: 100%; object-fit: cover; + transition: transform 0.4s ease; +} + +.picwall-pictureframe:hover img { + transform: scale(1.08); } .picwall-pictureframe .b-lazy { @@ -2307,6 +2452,136 @@ select:focus { object-fit: cover; } +/* Hover Overlay */ +.picwall-overlay { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: linear-gradient(0deg, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.7) 50%, transparent 100%); + padding: 2.5rem 1rem 1rem 1rem; + transform: translateY(100%); + transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1); +} + +.picwall-pictureframe:hover .picwall-overlay { + transform: translateY(0); +} + +.picwall-link { + display: block; + text-decoration: none; + color: white; +} + +.picwall-link:hover { + color: white; +} + +.picwall-title { + display: block; + font-size: 0.95rem; + font-weight: 600; + color: white; + line-height: 1.4; + margin-bottom: 0.5rem; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.picwall-url { + display: flex; + align-items: center; + gap: 0.375rem; + font-size: 0.75rem; + color: rgba(255, 255, 255, 0.7); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.picwall-url i { + flex-shrink: 0; + font-size: 0.875rem; +} + +/* External Link Icon Indicator */ +.picwall-pictureframe::before { + content: ''; + position: absolute; + top: 0.75rem; + right: 0.75rem; + width: 32px; + height: 32px; + background: rgba(0, 0, 0, 0.6); + backdrop-filter: blur(4px); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transform: scale(0.8); + transition: opacity 0.25s ease, transform 0.25s ease; + z-index: 5; +} + +.picwall-pictureframe::after { + content: '\eb82'; + font-family: 'remixicon'; + position: absolute; + top: 0.75rem; + right: 0.75rem; + width: 32px; + height: 32px; + color: white; + font-size: 0.875rem; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transform: scale(0.8); + transition: opacity 0.25s ease, transform 0.25s ease; + z-index: 6; +} + +.picwall-pictureframe:hover::before, +.picwall-pictureframe:hover::after { + opacity: 1; + transform: scale(1); +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .picwall-controls-inner { + flex-direction: column; + align-items: stretch; + } + + .picwall-size-controls { + max-width: none; + } + + .picwall-controls-label { + justify-content: center; + } + + .picwall-size-value { + align-self: center; + } + + .picwall-container { + gap: 0.75rem; + } + + .picwall-pictureframe:hover { + transform: none; + } +} + /* ===== Daily Page ===== */ .daily-entry { background: var(--bg-card); diff --git a/shaarli-pro/picwall.html b/shaarli-pro/picwall.html index 8cc493a..0b33ca2 100644 --- a/shaarli-pro/picwall.html +++ b/shaarli-pro/picwall.html @@ -1,60 +1,133 @@ - -
-{$pageName="picwall"} -{include="includes"} - - -{include="page.header"} + -