add everything

This commit is contained in:
Koolant
2026-04-17 12:29:41 -04:00
commit 4c1cfe6847
437 changed files with 11939 additions and 0 deletions

736
css/pages/card_list.css Normal file
View File

@@ -0,0 +1,736 @@
/* ============================================================
Card List Layout (store.pointercrateLayout = false)
All rules prefixed .cl- or .page-list-cards to avoid bleed
============================================================ */
/* ── Page shell ── */
.page-list-cards {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
min-height: 100vh;
padding: 2rem 1rem 6rem;
box-sizing: border-box;
/* don't let parent overflow:hidden clip the dropdown */
overflow: visible;
}
/* ── Toolbar (search + filter) ── */
.cl-toolbar {
display: flex;
flex-shrink: 0;
gap: 10px;
align-items: center;
width: 100%;
max-width: 860px;
margin-bottom: 1.25rem;
}
.cl-search {
flex: 1;
padding: 10px 14px;
border-radius: 8px;
border: none;
background: #2a2a2a;
color: #fff;
font-size: 14px;
}
.cl-filter-btn {
padding: 9px 16px;
border-radius: 8px;
display: flex;
align-items: center;
gap: 6px;
background: #2a2a2a;
color: #fff;
border: none;
cursor: pointer;
font-size: 14px;
white-space: nowrap;
}
.cl-filter-dropdown {
/* position + top/right/z-index are set via inline style from JS (Teleport) */
width: 280px;
background: #1e1e1e;
border: 1px solid #444;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 8px 32px rgba(0,0,0,0.6);
}
/* invisible full-screen backdrop so clicking outside closes the menu */
.cl-menu-backdrop {
position: fixed;
inset: 0;
z-index: 99998;
}
/* dropdown sits above backdrop */
.cl-filter-dropdown {
z-index: 99999;
}
.cl-filter-heading {
font-size: 12px;
color: #888;
margin: 0 0 8px;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.cl-filter-label {
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: #fff;
cursor: pointer;
}
.cl-filter-apply {
width: 100%;
padding: 9px;
border-radius: 8px;
background: #3a6ee8;
color: #fff;
border: none;
font-size: 14px;
font-weight: 500;
cursor: pointer;
}
/* ── Section labels ── */
.cl-section-label {
width: 100%;
max-width: 860px;
font-size: 12px;
color: #666;
margin-bottom: 0.5rem;
letter-spacing: 0.04em;
}
.cl-separator {
width: 100%;
max-width: 860px;
display: flex;
align-items: center;
gap: 1rem;
margin: 1.5rem 0 0.75rem;
color: #888;
font-size: 13px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.cl-separator::before,
.cl-separator::after {
content: '';
flex: 1;
height: 1px;
background: rgba(255,255,255,0.08);
}
/* ── Card list container ── */
.cl-list {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
width: 100%;
max-width: 860px;
/* isolate the card stack so nothing inside can paint above the toolbar */
isolation: isolate;
z-index: 1;
position: relative;
}
/* ── Individual card ── */
.cl-card {
position: relative;
width: 100%;
min-height: 90px;
height: auto;
border-radius: 10px;
overflow: clip;
border: 1px solid rgba(255,255,255,0.06);
display: flex;
align-items: stretch;
gap: 0;
cursor: pointer;
background: transparent;
text-align: left;
padding: 0;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
/* Brightness overlay via pseudo-element — avoids filter: on the card itself,
which would create a stacking context and let cards paint above the dropdown */
.cl-card::after {
content: '';
position: absolute;
inset: 0;
background: transparent;
transition: background 0.15s ease;
pointer-events: none;
z-index: 10;
border-radius: inherit;
}
.cl-card:hover {
border-color: rgba(255,255,255,0.18);
box-shadow: 0 8px 32px rgba(0,0,0,0.5);
}
.cl-card:hover::after {
background: rgba(255,255,255,0.05);
}
.cl-card:active::after {
background: rgba(0,0,0,0.12);
}
.cl-card-legacy {
opacity: 0.75;
}
.cl-card-legacy:hover {
opacity: 1;
}
/* Blurred level thumbnail background */
.cl-card-bg {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
filter: blur(4px) brightness(0.2) saturate(0.6);
transform: scale(1.08);
transition: filter 0.3s ease;
}
.cl-card:hover .cl-card-bg {
filter: blur(3px) brightness(0.28) saturate(0.8);
}
/* Dark gradient over the bg */
.cl-card-tint {
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
rgba(0,0,0,0.0) 0%,
rgba(0,0,0,0.3) 42%,
rgba(0,0,0,0.15) 100%
);
}
/* YouTube thumbnail */
.cl-card-yt {
position: relative;
z-index: 2;
flex-shrink: 0;
width: 142px;
min-height: 90px;
align-self: stretch;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.cl-card-yt-img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.cl-card-yt-placeholder {
background: rgba(0,0,0,0.3);
}
/* Play icon overlay */
.cl-card-yt-play {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
color: rgba(255,255,255,0.0);
background: rgba(0,0,0,0.0);
transition: all 0.2s;
pointer-events: none;
}
.cl-card:hover .cl-card-yt-play {
color: rgba(255,255,255,0.9);
background: rgba(0,0,0,0.4);
}
/* Vertical divider between thumbnail and text */
.cl-card-yt::after {
content: '';
position: absolute;
right: 0;
top: 10%;
height: 80%;
width: 1px;
background: rgba(255,255,255,0.08);
}
/* Text info */
.cl-card-info {
position: relative;
z-index: 2;
flex: 1;
min-width: 0;
padding: 0.85rem 1rem 0.85rem 1.1rem;
display: flex;
flex-direction: column;
gap: 3px;
justify-content: center;
}
.cl-card-rank {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.12em;
color: rgba(255,255,255,0.45);
text-transform: uppercase;
display: flex;
align-items: center;
gap: 6px;
}
.cl-legacy-badge {
font-size: 10px;
background: rgba(255,255,255,0.1);
border-radius: 3px;
padding: 1px 5px;
letter-spacing: 0.06em;
color: rgba(255,255,255,0.4);
}
.cl-card-name {
font-size: 17px;
font-weight: 700;
color: #fff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.2;
}
.cl-card-meta {
font-size: 12px;
color: rgba(255,255,255,0.45);
display: flex;
align-items: center;
gap: 5px;
flex-wrap: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cl-card-pts {
color: #e8ff00;
font-weight: 600;
font-size: 12px;
}
.cl-card-dot {
color: rgba(255,255,255,0.2);
}
.cl-card-tags {
display: flex;
gap: 4px;
flex-wrap: nowrap;
overflow: hidden;
}
.cl-card-tag {
font-size: 10px;
background: rgba(255,255,255,0.1);
color: rgba(255,255,255,0.55);
border-radius: 3px;
padding: 1px 6px;
letter-spacing: 0.04em;
white-space: nowrap;
}
/* Arrow chevron on right */
.cl-card-arrow {
position: relative;
z-index: 2;
font-size: 22px;
color: rgba(255,255,255,0.2);
padding: 0 1rem 0 0.5rem;
flex-shrink: 0;
transition: color 0.15s, transform 0.15s;
}
.cl-card:hover .cl-card-arrow {
color: rgba(255,255,255,0.7);
transform: translateX(3px);
}
/* ── Panel backdrop ── */
.cl-panel-backdrop {
position: fixed;
inset: 0;
z-index: 500;
background: rgba(0,0,0,0.55);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
display: flex;
align-items: flex-start;
justify-content: flex-end;
overflow: hidden;
}
/* ── Side panel ── */
.cl-panel {
position: relative;
width: min(560px, 100vw);
height: 100vh;
overflow-y: auto;
overflow-x: hidden;
display: flex;
flex-direction: column;
background: #13161b;
box-shadow: -12px 0 60px rgba(0,0,0,0.7);
}
/* Panel slide-in transition */
.cl-panel-slide-enter-active {
transition: transform 0.32s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.2s ease;
}
.cl-panel-slide-leave-active {
transition: transform 0.25s cubic-bezier(0.55, 0, 1, 0.45), opacity 0.2s ease;
}
.cl-panel-slide-enter-from,
.cl-panel-slide-leave-to {
transform: translateX(100%);
opacity: 0;
}
/* ── Close button ── */
.cl-panel-close {
position: absolute;
top: 0.9rem;
right: 0.9rem;
z-index: 20;
width: 32px;
height: 32px;
border-radius: 50%;
background: rgba(0,0,0,0.5);
border: 1px solid rgba(255,255,255,0.15);
color: rgba(255,255,255,0.8);
font-size: 13px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s, color 0.2s;
line-height: 1;
}
.cl-panel-close:hover {
background: rgba(255,255,255,0.15);
color: #fff;
}
/* ── Hero banner ── */
.cl-panel-hero {
position: relative;
height: 220px;
background-size: cover;
background-position: center;
background-color: #1a1d23;
flex-shrink: 0;
}
.cl-panel-hero-tint {
position: absolute;
inset: 0;
background: linear-gradient(
to bottom,
rgba(0,0,0,0.15) 0%,
rgba(0,0,0,0.55) 55%,
rgba(19,22,27,1) 100%
);
}
.cl-panel-hero-info {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 1rem 1.5rem 1.25rem;
}
.cl-panel-rank {
display: inline-block;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.18em;
color: rgba(255,255,255,0.45);
text-transform: uppercase;
margin-bottom: 0.3rem;
}
.cl-panel-title {
font-size: 1.75rem;
font-weight: 800;
color: #fff;
margin: 0 0 0.5rem;
line-height: 1.15;
/* drop shadow so it reads over any background */
text-shadow: 0 2px 12px rgba(0,0,0,0.8);
}
/* Override LevelAuthors styles inside the hero so they look clean */
.cl-panel-hero-info .level-authors {
display: flex;
flex-wrap: wrap;
gap: 0.35rem 0.75rem;
margin: 0;
}
.cl-panel-hero-info .level-authors p,
.cl-panel-hero-info .level-authors span,
.cl-panel-hero-info .level-authors a {
font-size: 12px !important;
color: rgba(255,255,255,0.55) !important;
text-shadow: 0 1px 6px rgba(0,0,0,0.8);
text-transform: uppercase;
letter-spacing: 0.06em;
font-weight: 600;
margin: 0 !important;
line-height: 1.4;
}
/* ── Panel body ── */
.cl-panel-body {
padding: 1.5rem 1.5rem 4rem;
flex: 1;
display: flex;
flex-direction: column;
gap: 0;
}
/* description quote */
.cl-panel-body > p:first-child {
font-size: 13px;
color: rgba(255,255,255,0.45);
font-style: italic;
line-height: 1.6;
margin: 0 0 1rem;
padding-bottom: 1rem;
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.cl-panel-body p {
color: rgba(255,255,255,0.65);
font-size: 14px;
line-height: 1.65;
margin: 0 0 0.6rem;
}
/* section headings (Records, etc.) */
.cl-panel-body h2 {
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgba(255,255,255,0.35);
margin: 1.75rem 0 0.75rem;
padding-bottom: 0.4rem;
border-bottom: 1px solid rgba(255,255,255,0.06);
}
/* packs row */
.cl-panel-body .packs {
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
margin: 0.5rem 0 1rem;
}
/* video */
.cl-panel-body .video {
width: 100%;
aspect-ratio: 16/9;
border-radius: 8px;
border: none;
margin: 0.5rem 0 1rem;
background: #000;
}
/* stats row */
.cl-panel-body .stats {
display: flex;
gap: 0;
list-style: none;
padding: 0;
margin: 0 0 0.5rem;
border: 1px solid rgba(255,255,255,0.07);
border-radius: 8px;
overflow: hidden;
}
.cl-panel-body .stats li {
flex: 1;
padding: 0.75rem 1rem;
border-right: 1px solid rgba(255,255,255,0.07);
display: flex;
flex-direction: column;
gap: 0.2rem;
}
.cl-panel-body .stats li:last-child {
border-right: none;
}
/* enjoyment bar inside the panel stats */
.cl-panel-body .stats .enjoyment-stat {
gap: 0.3rem;
}
.cl-panel-body .enjoyment-bar-track {
width: 75%;
height: 3px;
background: rgba(255,255,255,0.08);
border-radius: 99px;
overflow: hidden;
margin-top: 2px;
}
.cl-panel-body .enjoyment-bar-fill {
height: 100%;
border-radius: 99px;
background: hsl(calc(var(--enjoyment, 0) * 1.2deg), 80%, 52%);
box-shadow: 0 0 6px hsl(calc(var(--enjoyment, 0) * 1.2deg), 80%, 52%);
transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1), background 0.6s ease;
}
.cl-panel-body .stats .type-title-sm {
font-size: 0.6rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: rgba(255,255,255,0.35);
font-weight: 700;
}
.cl-panel-body .stats p {
font-size: 1rem;
font-weight: 700;
color: #fff;
margin: 0;
}
/* records table */
.cl-panel-body .records {
width: 100%;
border-collapse: collapse;
}
.cl-panel-body .records .record {
border-bottom: 1px solid rgba(255,255,255,0.05);
}
.cl-panel-body .records .record:last-child {
border-bottom: none;
}
.cl-panel-body .records td {
padding: 0.5rem 0.25rem;
vertical-align: middle;
}
.cl-panel-body .records .percent p {
font-size: 13px;
font-weight: 700;
color: rgba(255,255,255,0.5);
margin: 0;
min-width: 3rem;
}
.cl-panel-body .records .ico {
width: 36px;
height: 36px;
image-rendering: pixelated;
border-radius: 4px;
}
.cl-panel-body .records .user a {
font-size: 14px;
font-weight: 600;
color: #fff;
text-decoration: none;
padding-left: 0.5rem;
}
.cl-panel-body .records .user a:hover {
color: #e8ff00;
}
/* tabs (Verification / Showcase) */
.cl-panel-body .tabs {
display: flex;
gap: 0.25rem;
margin-bottom: 0.5rem;
}
.cl-panel-body .tab {
padding: 0.4rem 1rem;
border-radius: 6px;
border: 1px solid rgba(255,255,255,0.1);
background: transparent;
color: rgba(255,255,255,0.45);
font-size: 13px;
cursor: pointer;
transition: all 0.15s;
}
.cl-panel-body .tab.selected {
background: rgba(255,255,255,0.1);
color: #fff;
border-color: rgba(255,255,255,0.2);
}
/* ── Responsive ── */
@media (max-width: 600px) {
.cl-card {
min-height: 80px;
height: auto;
}
.cl-card-yt {
width: 110px;
min-height: 80px;
align-self: stretch;
}
.cl-card-name {
font-size: 15px;
}
.cl-card-meta {
font-size: 11px;
}
.cl-panel {
width: 100vw;
}
.cl-panel-title {
font-size: 1.5rem;
}
}