.catalog-page { position: relative; } .catalog-hero { background: linear-gradient(130deg, rgba(235, 35, 56, 0.14), rgba(13, 17, 28, 0.96) 48%), radial-gradient(circle at 80% 18%, rgba(255, 155, 66, 0.2), transparent 45%); border-color: rgba(255, 255, 255, 0.14); box-shadow: 0 24px 70px rgba(0, 0, 0, 0.28); } .eyebrow { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: rgba(255, 255, 255, 0.68); } .stats-wrap { align-items: stretch; } .stat-pill { min-width: 88px; text-align: right; background: rgba(255, 255, 255, 0.02); border-color: rgba(255, 255, 255, 0.15); } .toolbar { position: sticky; top: 16px; z-index: 20; backdrop-filter: blur(8px); background: rgba(14, 18, 28, 0.82); border-color: rgba(255, 255, 255, 0.12); } .admin-panel { background: linear-gradient(150deg, rgba(15, 20, 32, 0.88), rgba(11, 14, 23, 0.92)); border-color: rgba(255, 255, 255, 0.13); } .view-nav { position: sticky; top: 12px; z-index: 30; backdrop-filter: blur(10px); background: rgba(10, 15, 26, 0.84); border-color: rgba(255, 255, 255, 0.14); } .catalog-view-shell { padding-inline: clamp(0.5rem, 1.4vw, 1.35rem); } .nav-pill { border-radius: 999px; border: 1px solid rgba(255, 255, 255, 0.18); background: rgba(255, 255, 255, 0.02); transition: transform 180ms ease, border-color 180ms ease, background-color 180ms ease; } .nav-pill .mantine-Button-label, .nav-pill .mantine-Button-section { transition: color 180ms ease, opacity 180ms ease; } .nav-pill.is-active { border-color: rgba(235, 35, 56, 0.95); box-shadow: 0 0 0 1px rgba(235, 35, 56, 0.26) inset; } .nav-pill.is-active .mantine-Button-label, .nav-pill.is-active .mantine-Button-section { color: #f8fbff; opacity: 1; } .nav-pill.is-inactive { border-color: rgba(255, 255, 255, 0.24); } .nav-pill.is-inactive .mantine-Button-label, .nav-pill.is-inactive .mantine-Button-section { color: rgba(218, 226, 240, 0.86); opacity: 0.94; } .nav-pill:hover { transform: translateY(-1px); border-color: rgba(255, 155, 66, 0.45); } .nav-pill.is-inactive:hover .mantine-Button-label, .nav-pill.is-inactive:hover .mantine-Button-section { color: rgba(246, 250, 255, 0.96); } .admin-card { background: rgba(255, 255, 255, 0.02); border-color: rgba(255, 255, 255, 0.1); } .list-row { padding: 8px 10px; border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 10px; background: rgba(255, 255, 255, 0.01); min-width: 0; } .cache-key-text { min-width: 0; flex: 1; margin-right: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .search-input { min-width: 260px; } .genre-chip { cursor: pointer; border-color: rgba(255, 255, 255, 0.22); transition: transform 140ms ease, box-shadow 140ms ease, border-color 140ms ease; } .genre-chip:hover { transform: translateY(-1px); } .genre-chip:focus-visible { outline: 2px solid rgba(255, 155, 66, 0.95); outline-offset: 2px; border-color: rgba(255, 155, 66, 0.95); } .catalog-card { position: relative; display: flex; flex-direction: column; height: 100%; min-height: 420px; overflow: hidden; cursor: pointer; background: linear-gradient(165deg, rgba(29, 33, 44, 0.95), rgba(15, 19, 30, 0.96)); border-color: rgba(255, 255, 255, 0.11); transition: transform 220ms ease, box-shadow 220ms ease; } .catalog-card:hover { transform: translateY(-7px); box-shadow: 0 28px 65px rgba(0, 0, 0, 0.42); } .catalog-card:focus-visible { outline: 2px solid rgba(255, 155, 66, 0.92); outline-offset: 3px; transform: translateY(-4px); box-shadow: 0 24px 54px rgba(0, 0, 0, 0.42); } .live-fade-in { animation: live-fade-in 1500ms ease; } @keyframes live-fade-in { 0% { opacity: 0.55; transform: translateY(10px) scale(0.985); box-shadow: 0 0 0 rgba(235, 35, 56, 0), 0 0 0 rgba(255, 214, 102, 0); } 20% { opacity: 1; transform: translateY(0) scale(1.004); box-shadow: 0 0 0 2px rgba(255, 214, 102, 0.56), 0 0 28px rgba(255, 214, 102, 0.42); } 55% { opacity: 1; transform: translateY(0) scale(1); box-shadow: 0 0 0 2px rgba(235, 35, 56, 0.35), 0 0 20px rgba(235, 35, 56, 0.22); } 100% { opacity: 1; transform: translateY(0) scale(1); box-shadow: 0 0 0 rgba(235, 35, 56, 0), 0 0 0 rgba(255, 214, 102, 0); } } .live-ttl-flash { animation: ttl-flash 1050ms cubic-bezier(0.22, 1, 0.36, 1); } @keyframes ttl-flash { 0% { border-color: rgba(255, 255, 255, 0.08); box-shadow: inset 0 0 0 rgba(0, 0, 0, 0); background: rgba(255, 255, 255, 0.01); } 38% { border-color: rgba(255, 255, 255, 0.08); box-shadow: inset 0 0 0 999px rgba(0, 0, 0, 0.34), inset 0 0 28px rgba(0, 0, 0, 0.42); background: linear-gradient(90deg, rgba(0, 0, 0, 0.32), rgba(255, 255, 255, 0.012)); } 100% { border-color: rgba(255, 255, 255, 0.08); box-shadow: inset 0 0 0 rgba(0, 0, 0, 0); background: rgba(255, 255, 255, 0.01); } } .media-wrap { position: relative; height: 190px; flex: 0 0 190px; } .image-shell { position: relative; height: 190px; } .image-skeleton { position: absolute; inset: 0; z-index: 1; } .lazy-image { position: relative; z-index: 2; } .lazy-image img { filter: blur(14px); transform: scale(1.05); opacity: 0.86; transition: filter 320ms ease, transform 420ms ease, opacity 240ms ease; } .lazy-image.is-loaded img { filter: blur(0); transform: scale(1); opacity: 1; } .media-fallback { background: linear-gradient(160deg, rgba(35, 38, 52, 0.95), rgba(24, 28, 39, 0.95)); color: rgba(255, 255, 255, 0.34); } .media-overlay { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(to top, rgba(8, 10, 16, 0.86), rgba(8, 10, 16, 0.05) 55%); } .detail-modal-content { background: linear-gradient(150deg, rgba(16, 20, 31, 0.97), rgba(11, 14, 24, 0.97)); border: 1px solid rgba(255, 255, 255, 0.12); } .detail-modal-header { background: transparent; } .detail-modal-body { padding-top: 0.6rem; position: relative; } .detail-media-wrap { position: relative; overflow: hidden; border-radius: 14px; border: 1px solid rgba(255, 255, 255, 0.12); } .detail-media-overlay { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(to top, rgba(8, 10, 16, 0.92), rgba(8, 10, 16, 0.1) 58%), radial-gradient(circle at 76% 22%, rgba(235, 35, 56, 0.22), transparent 42%); } .detail-title-group { position: absolute; left: 16px; bottom: 14px; right: 16px; z-index: 2; display: flex; flex-direction: column; gap: 8px; } .detail-title { color: #f5f8fc; text-shadow: 0 5px 18px rgba(0, 0, 0, 0.4); } .detail-plot { line-height: 1.62; } .detail-content-stack { padding-bottom: 38px; } .detail-brand-stamp { position: absolute; right: 20px; bottom: 16px; width: 34px; height: 34px; object-fit: contain; opacity: 0.96; filter: drop-shadow(0 7px 16px rgba(0, 0, 0, 0.44)); pointer-events: none; } .card-content { position: relative; display: flex; flex-direction: column; flex: 1; min-height: 168px; z-index: 2; } .card-meta-row { min-height: 26px; align-items: center; } .card-plot { min-height: 4.8em; line-height: 1.6; } .card-genres { margin-top: auto; min-height: 24px; padding-right: 36px; overflow: hidden; } .card-title { font-family: 'Bricolage Grotesque', 'IBM Plex Sans', sans-serif; letter-spacing: 0.01em; } .brand-stamp { position: absolute; right: 12px; bottom: 12px; width: 30px; height: 30px; object-fit: contain; opacity: 0.92; filter: drop-shadow(0 6px 14px rgba(0, 0, 0, 0.38)); } .empty-state { background: linear-gradient(145deg, rgba(22, 26, 37, 0.9), rgba(14, 17, 26, 0.95)); border-color: rgba(255, 255, 255, 0.12); } .admin-toast { position: fixed; right: 22px; bottom: 22px; z-index: 80; max-width: min(420px, calc(100vw - 24px)); padding: 12px 14px; border-radius: 12px; border: 1px solid rgba(84, 224, 187, 0.4); background: linear-gradient(145deg, rgba(8, 40, 42, 0.95), rgba(10, 20, 32, 0.95)); color: #dffcf2; font-size: 0.92rem; box-shadow: 0 18px 38px rgba(0, 0, 0, 0.35); animation: toast-in 180ms ease; } @keyframes toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .reveal { opacity: 0; transform: translateY(10px); animation: reveal-in 420ms ease forwards; } @keyframes reveal-in { to { opacity: 1; transform: translateY(0); } } @media (max-width: 48rem) { .view-nav { top: 8px; } .view-nav > div { overflow-x: auto; white-space: nowrap; width: 100%; } .toolbar { top: 10px; } .search-input { min-width: 100%; } .catalog-view-shell { padding-inline: 0; } .stats-wrap { width: 100%; justify-content: flex-start; } .admin-toast { right: 10px; bottom: 10px; } } @media (prefers-reduced-motion: reduce) { .reveal, .catalog-card, .genre-chip, .lazy-image img, .live-fade-in, .live-ttl-flash { animation: none; transition: none; transform: none; } }