/**
 * index.css — Art Jigsaw Puzzles Gallery
 * Dark mode, skeleton loading, completion badges, install banner,
 * piece count filter, responsive, all daily section styles.
 */

/* ═══════════════ RESET & BASE ═══════════════ */
*{margin:0;padding:0;box-sizing:border-box}

:root {
    --bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    --card-bg: #fff;
    --card-title: #222;
    --card-artist: #888;
    --card-meta: #aaa;
    --card-border: #f0f0f0;
    --body-text: rgba(255,255,255,0.8);
    --input-bg: rgba(255,255,255,0.95);
    --input-color: #333;
}
html.dark {
    --card-bg: #1e1e2e;
    --card-title: #e0e0e0;
    --card-artist: #999;
    --card-meta: #777;
    --card-border: #333;
    --input-bg: rgba(30,30,46,0.95);
    --input-color: #e0e0e0;
}

body {
    font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
    background:var(--bg);
    min-height:100vh;padding:40px 20px 20px;
    display:flex;flex-direction:column;
}
html.dark body { background:linear-gradient(135deg,#1a1a2e 0%,#16213e 100%); }

/* ═══════════════ ACCESSIBILITY ═══════════════ */
.skip-link{position:absolute;top:-40px;left:0;background:#000;color:#fff;padding:8px;text-decoration:none;z-index:100}
.skip-link:focus{top:0}

/* ═══════════════ HEADER ═══════════════ */
header{text-align:center;margin-bottom:36px;padding-top:50px}
header h1{font-size:clamp(32px, 5vw, 48px);color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.3);margin-bottom:10px}
header p{font-size:18px;color:var(--body-text)}
.header-actions{position:fixed;top:16px;right:20px;display:flex;gap:8px;align-items:center;z-index:100}
.header-link{color:rgba(255,255,255,.9);text-decoration:none;font-size:13px;font-weight:600;padding:8px 16px;border-radius:30px;background:rgba(255,255,255,.15);border:2px solid rgba(255,255,255,.5);transition:all .2s}
.header-link:hover{background:rgba(255,255,255,.3);border-color:#fff;color:#fff}
.dark-mode-btn{background:rgba(255,255,255,.15);border:2px solid rgba(255,255,255,.5);color:#fff;padding:8px 16px;border-radius:30px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}
.dark-mode-btn:hover{background:rgba(255,255,255,.3);border-color:#fff}
.dark-mode-btn:focus{outline:2px solid #FFD700;outline-offset:2px}

/* ═══════════════ PWA INSTALL BANNER ═══════════════ */
.install-banner{position:fixed;top:-80px;left:50%;transform:translateX(-50%);background:#333;color:#fff;padding:12px 20px;border-radius:12px;display:flex;align-items:center;gap:12px;z-index:9999;box-shadow:0 4px 20px rgba(0,0,0,.4);transition:top .4s cubic-bezier(.4,0,.2,1);font-size:14px;max-width:95vw}
.install-banner.visible{top:16px}
.install-btn{background:#667eea;color:#fff;border:none;padding:8px 20px;border-radius:20px;font-weight:600;cursor:pointer;white-space:nowrap}
.install-btn:hover{background:#5a70d4}
.install-dismiss{background:none;border:none;color:#aaa;font-size:18px;cursor:pointer;padding:4px 8px}
.install-dismiss:hover{color:#fff}

/* ═══════════════ CONTROLS ═══════════════ */
#controls{max-width:1200px;margin:0 auto 16px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}
#searchInput{flex:1;min-width:200px;padding:12px 18px;border-radius:30px;border:none;font-size:15px;background:var(--input-bg);color:var(--input-color);outline:none;box-shadow:0 4px 16px rgba(0,0,0,.15)}
#searchInput::placeholder{color:#aaa}
#searchInput:focus{box-shadow:0 4px 20px rgba(0,0,0,.25);outline:2px solid #FFD700;outline-offset:2px}
.filters{display:flex;gap:8px;flex-wrap:wrap}
.filter-btn{padding:10px 20px;border-radius:30px;border:2px solid rgba(255,255,255,.6);background:transparent;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}
.filter-btn:hover{background:rgba(255,255,255,.2);border-color:#fff}
.filter-btn:focus{outline:2px solid #FFD700;outline-offset:2px}
.filter-btn.active{background:#fff;border-color:#fff;color:#764ba2}
html.dark .filter-btn.active{background:#667eea;border-color:#667eea;color:#fff}

/* Dropdowns */
#sortSelect, #pieceRange{padding:10px 36px 10px 16px;border-radius:30px;border:2px solid rgba(255,255,255,.6);background:rgba(255,255,255,.15);color:#fff;font-size:14px;font-weight:600;cursor:pointer;outline:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='white'%3E%3Cpath d='M6 8L0 0h12z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center}
#sortSelect:hover, #pieceRange:hover{border-color:#fff;background-color:rgba(255,255,255,.25)}
#sortSelect:focus, #pieceRange:focus{outline:2px solid #FFD700;outline-offset:2px}
#sortSelect option, #pieceRange option{background:#764ba2;color:#fff}
html.dark #sortSelect option, html.dark #pieceRange option{background:#1a1a2e}

/* ═══════════════ SECTION HEADINGS ═══════════════ */
.section-heading{text-align:center;color:#fff;font-size:28px;margin-bottom:20px;text-shadow:0 2px 8px rgba(0,0,0,.3)}

/* ═══════════════ DAILY PUZZLES ═══════════════ */
.daily-section{max-width:1200px;margin:30px auto 40px}
.daily-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:30px}
.daily-badge{position:absolute;top:12px;left:12px;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:bold;z-index:2;color:#fff}
.daily-badge-completed{background:rgba(76,175,80,.9)}
.daily-badge-missed{background:rgba(255,152,0,.9)}
.daily-badge-today{background:linear-gradient(135deg,#667eea,#764ba2);padding:6px 12px;font-size:12px;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.daily-badge-locked{background:rgba(0,0,0,.7)}
.daily-card-today{border:4px solid #fff;box-shadow:0 8px 32px rgba(0,0,0,.3),0 0 0 8px rgba(255,255,255,.2)}
.daily-card-today:hover{box-shadow:0 12px 40px rgba(0,0,0,.4),0 0 0 8px rgba(255,255,255,.3)}
.daily-card-tomorrow{opacity:.85;cursor:not-allowed}
.tomorrow-image-wrap{position:relative}
.tomorrow-blur{filter:blur(2px) brightness(.7)}
.tomorrow-lock{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.3);color:#fff;font-size:48px}
.tomorrow-play-btn{opacity:.5;cursor:not-allowed}

/* ═══════════════ RECENTLY PLAYED ═══════════════ */
.recently-section{max-width:1200px;margin:0 auto 40px}
.recently-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:20px}

/* ═══════════════ GALLERY HEADER ═══════════════ */
.gallery-header{max-width:1200px;margin:0 auto 24px}
.results-count{text-align:center;color:rgba(255,255,255,.75);font-size:14px;min-height:20px}

/* ═══════════════ GALLERY & CARDS ═══════════════ */
#gallery{max-width:1200px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:30px}
.card{background:var(--card-bg);border-radius:16px;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,.15);cursor:pointer;transition:transform .2s ease;text-decoration:none;color:inherit;display:block;position:relative;content-visibility:auto;contain-intrinsic-size:auto 320px;will-change:transform}
.card:hover{transform:translateY(-4px)}
.card:focus{outline:3px solid #FFD700;outline-offset:4px}
.card.hidden{display:none}
.card-image{width:100%;height:200px;overflow:hidden;position:relative;background:#eee}
html.dark .card-image{background:#2a2a3e}
.card-image img{width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform .4s, opacity .3s}
.card-image img.lazy-image:not(.loaded){opacity:0}
.card-image img.loaded{opacity:1}

/* Completion badge */
.completion-check{position:absolute;bottom:8px;left:8px;width:28px;height:28px;background:rgba(76,175,80,.9);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:bold;box-shadow:0 2px 6px rgba(0,0,0,.3)}

.badge{position:absolute;top:12px;right:12px;padding:4px 10px;border-radius:20px;font-size:11px;font-weight:bold;text-transform:uppercase;letter-spacing:.5px}
.badge-Easy{background:#4CAF50;color:#fff}
.badge-Medium{background:#FF9800;color:#fff}
.badge-Hard{background:#f44336;color:#fff}
.badge-Expert{background:#9C27B0;color:#fff}
.badge-Master{background:linear-gradient(135deg,#1a1a2e,#e94560);color:#FFD700;font-weight:700}
.card-body{padding:18px 20px 20px}
.card-title{font-size:18px;font-weight:700;color:var(--card-title);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-artist{font-size:13px;color:var(--card-artist);font-style:italic;margin-bottom:14px}
.card-meta{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--card-meta);border-top:1px solid var(--card-border);padding-top:12px}
.play-btn{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;padding:8px 18px;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;pointer-events:none}

/* ═══════════════ SKELETON LOADING ═══════════════ */
.skeleton-card{pointer-events:none}
.skeleton-shimmer{background:linear-gradient(90deg,#eee 25%,#f5f5f5 50%,#eee 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}
html.dark .skeleton-shimmer{background:linear-gradient(90deg,#2a2a3e 25%,#333355 50%,#2a2a3e 75%);background-size:200% 100%}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton-line{border-radius:6px}

/* ═══════════════ LOAD MORE ═══════════════ */
.load-more-btn{display:block;max-width:300px;margin:30px auto;padding:14px 40px;border-radius:30px;border:2px solid rgba(255,255,255,.7);background:rgba(255,255,255,.15);color:#fff;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s}
.load-more-btn:hover{background:rgba(255,255,255,.3);border-color:#fff;transform:translateY(-2px)}
.load-more-btn:focus{outline:2px solid #FFD700;outline-offset:2px}

/* ═══════════════ EMPTY STATE & MESSAGES ═══════════════ */
#emptyState{display:none;grid-column:1/-1;text-align:center;padding:60px 20px;color:rgba(255,255,255,.7)}
#emptyState h3{font-size:24px;margin-bottom:10px;color:#fff}
#emptyState p{font-size:16px}
#message{text-align:center;color:#fff;font-size:18px;margin-top:80px}

/* ═══════════════ UPDATE TOAST ═══════════════ */
.update-toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(100px);background:#333;color:#fff;padding:14px 24px;border-radius:12px;font-size:14px;box-shadow:0 4px 20px rgba(0,0,0,.4);z-index:9999;transition:transform .4s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;gap:12px}
.update-toast.visible{transform:translateX(-50%) translateY(0)}
.update-toast button{background:#667eea;color:#fff;border:none;padding:6px 16px;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer}

/* ═══════════════ FOOTER ═══════════════ */
footer{max-width:1200px;margin:60px auto 0;padding:40px 20px 20px;text-align:center;border-top:1px solid rgba(255,255,255,.2)}
footer .footer-links{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 20px;margin-bottom:20px}
footer a{color:rgba(255,255,255,.9);text-decoration:none;font-size:14px;font-weight:500;transition:color .2s}
footer a:hover{color:#fff;text-decoration:underline}
.footer-dot{color:rgba(255,255,255,.4)}
footer .footer-text{color:rgba(255,255,255,.7);font-size:13px;margin-top:15px}

/* ═══════════════ RESPONSIVE ═══════════════ */
@media(max-width:768px){
    .header-actions{top:10px;right:10px;gap:6px}
    .header-actions .header-link,.header-actions .dark-mode-btn{font-size:11px;padding:6px 10px}
    #controls{flex-direction:column}
    #searchInput,#sortSelect,#pieceRange{width:100%}
    .filters{width:100%;justify-content:center}
    footer .footer-links{flex-direction:column;gap:12px}
    #yesterdayCard,#tomorrowCard{display:none!important}
    #todayCard{max-width:400px;margin:0 auto}
    .daily-grid{justify-content:center}
    .section-heading{font-size:24px}
}
