Files
oscars-pool/public/css/app.css
T
Mathieu MoranandCursor Agent 79b9f4a5a3 Statistics page redesign (#60)
* feat: Add modal to display watched movies with details

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor movie modal: remove search, improve category display

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor movie category display to use details element

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor movie playback and add clickability to stats

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor: Improve movie linking and player logic

Co-authored-by: mathieumoran1 <[email protected]>

* Prevent caching of sensitive and dynamic API data

Co-authored-by: mathieumoran1 <[email protected]>

* feat: Prevent caching of sensitive admin data

Co-authored-by: mathieumoran1 <[email protected]>

* feat: Add no-cache headers to API requests

Co-authored-by: mathieumoran1 <[email protected]>

* Remove unused movie sorting functionality

The movie sorting dropdown and its associated logic were removed as they are no longer needed.

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor admin settings to use tabs instead of accordion

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor: Adjust button layout for active year selection

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor active year selection UI

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor: Improve admin settings layout for better responsiveness

Co-authored-by: mathieumoran1 <[email protected]>

* Remove redundant completion explanation from user-stat.html

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor user stats page to display year in ranking tab badge

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor: Rename 'Finisseur(s)' column to 'Nombre'

Co-authored-by: mathieumoran1 <[email protected]>

* Refactor: Remove redundant completer count column

Co-authored-by: mathieumoran1 <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
2025-12-22 18:16:37 -05:00

334 lines
6.7 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
footer {
margin-top: auto;
padding: 25px;
background-color: #f8f9fa;
text-align: center;
}
#footer-text {
margin: -5px;
font-family:monospace;
font-size: small;
}
#footer-copy {
margin: -5px;
font-family:monospace;
font-size: smaller;
padding-top: 10px;
}
#copy {
text-decoration: none;
}
/* Simple, clean loading indicator (no spinner spam) */
.loading-indicator {
display: flex;
justify-content: center;
align-items: center;
gap: 0.35rem;
padding: 2rem 0;
}
.loading-dots {
display: inline-flex;
gap: 0.15rem;
}
.loading-dots span {
display: inline-block;
opacity: 0.2;
transform: translateY(-1px);
animation: loading-dot 1.1s infinite ease-in-out;
}
.loading-dots span:nth-child(2) { animation-delay: 0.15s; }
.loading-dots span:nth-child(3) { animation-delay: 0.30s; }
@keyframes loading-dot {
0%, 80%, 100% { opacity: 0.2; }
40% { opacity: 1; }
}
/* Full-page loader overlay (blur + progress bar) */
body.page-loading {
overflow: hidden;
}
.page-loader-overlay {
position: fixed;
top: var(--page-loader-top, 0px);
left: 0;
right: 0;
bottom: 0;
z-index: 2000;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: rgba(255, 255, 255, 0.55);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
transition: opacity 200ms ease;
opacity: 1;
}
/* Avoid initial navbar "blur flash" before JS computes the exact height. */
body.page-loading .page-loader-overlay {
top: var(--page-loader-top, 72px);
}
/* Reserve space for username so it doesn't "pop" the layout. */
#user-name {
display: inline-block;
min-width: 8ch;
white-space: nowrap;
}
/*
Reserve space for the Admin button even when hidden.
This prevents a visible re-layout when we discover admin status from the token.
*/
@media (min-width: 992px) {
nav.navbar #admin-control-link.d-none {
display: inline-block !important;
visibility: hidden !important;
pointer-events: none;
}
}
.page-loader-overlay.page-loader-hide {
opacity: 0;
pointer-events: none;
}
.page-loader-card {
width: min(520px, 92vw);
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 16px;
padding: 18px 18px 14px;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
}
.page-loader-card.page-loader-card--baronly {
width: min(420px, 90vw);
padding: 14px;
}
.page-loader-title {
margin: 0 0 10px 0;
font-weight: 700;
font-size: 1rem;
color: #111;
}
.page-loader-subtitle {
margin: 0 0 12px 0;
font-size: 0.9rem;
color: rgba(0, 0, 0, 0.7);
}
.page-loader-progress {
height: 10px;
border-radius: 999px;
overflow: hidden;
background: rgba(0, 0, 0, 0.08);
}
.page-loader-bar {
height: 100%;
width: 0%;
border-radius: 999px;
background: #111;
transition: width 220ms ease;
}
.page-loader-actions {
margin-top: 12px;
display: flex;
justify-content: flex-end;
gap: 10px;
}
/* Admin → Version: keep history rows clean and readable */
.app-version-list .list-group-item {
border-left: 0;
border-right: 0;
}
.app-version-list .list-group-item:first-child {
border-top: 0;
}
.app-version-list .list-group-item:last-child {
border-bottom: 0;
}
/* Admin: compact "sub tabs" used inside panels */
.admin-subtabs {
gap: 0.5rem;
}
.admin-subtabs .nav-item {
margin: 0;
}
.admin-subtabs.nav-pills .nav-link {
border: 1px solid rgba(0, 0, 0, 0.12);
background: #fff;
color: #111;
font-weight: 600;
padding: 0.45rem 0.8rem;
border-radius: 10px;
}
.admin-subtabs.nav-pills .nav-link:hover {
background: rgba(0, 0, 0, 0.03);
}
.admin-subtabs.nav-pills .nav-link.active {
background: #111;
border-color: #111;
color: #fff;
}
/* Admin → Version preview: keep it compact */
.app-version-preview {
white-space: pre-wrap;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 0.92rem;
}
/* Movies page helpers (Bootstrap-first, minimal custom) */
.movie-poster {
width: 100%;
max-height: 360px;
object-fit: contain;
}
.imdb-icon {
width: 26px;
height: 26px;
vertical-align: middle;
margin-left: 6px;
display: inline-block;
}
.watched-badge {
z-index: 2;
}
/* Stats → "Films regardés" modal */
.stats-movies-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 12px;
}
.stats-movie-item {
display: flex;
gap: 12px;
padding: 12px;
background: #fff;
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 14px;
}
.stats-movie-item--clickable {
cursor: pointer;
}
.stats-movie-item--clickable:hover {
background: rgba(0, 0, 0, 0.02);
border-color: rgba(0, 0, 0, 0.14);
}
.stats-movie-poster {
width: 56px;
height: 84px;
border-radius: 10px;
object-fit: cover;
background: rgba(0, 0, 0, 0.06);
flex: 0 0 auto;
}
.stats-movie-poster.stats-movie-poster--empty {
background: linear-gradient(135deg, rgba(0,0,0,0.08), rgba(0,0,0,0.03));
}
.stats-movie-title {
font-weight: 700;
line-height: 1.2;
margin: 0;
}
.stats-movie-meta {
margin-top: 6px;
display: flex;
flex-wrap: wrap;
gap: 6px 10px;
align-items: center;
font-size: 0.875rem;
}
.stats-movie-details {
margin-top: 6px;
}
.stats-movie-details summary {
cursor: pointer;
user-select: none;
font-size: 0.85rem;
color: rgba(0, 0, 0, 0.6);
list-style: none;
}
.stats-movie-details summary::-webkit-details-marker {
display: none;
}
.stats-movie-details summary::before {
content: "›";
display: inline-block;
margin-right: 6px;
transform: rotate(0deg);
transition: transform 120ms ease;
}
.stats-movie-details[open] summary::before {
transform: rotate(90deg);
}
.stats-movie-details-body {
margin-top: 6px;
padding-left: 14px;
line-height: 1.25rem;
overflow-wrap: anywhere;
}
.stats-movie-imdb {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0.2rem 0.45rem;
line-height: 1.1;
}
.stats-movie-imdb .imdb-icon {
width: 18px;
height: 18px;
margin-left: 0;
}
/* Admin → Settings: keep controls compact */
.admin-settings-narrow {
max-width: 520px;
}
@media (max-width: 576px) {
.admin-settings-narrow {
max-width: 100%;
}
}