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

29
css/components/btn.css Normal file
View File

@@ -0,0 +1,29 @@
.btn {
border: none;
cursor: pointer;
font: inherit;
padding: 1rem;
margin: 0;
background-color: var(--color-primary);
color: var(--color-on-primary);
border-radius: 0.5rem;
box-shadow: 0 1px 0.5rem 0 rgba(0, 0, 102, 0.5);
transition: transform 100ms ease;
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.btn:not(:disabled):hover:not(:active) {
transform: translateY(-2px);
}
.shitty .btn {
border: 4px outset #eee;
padding: 0.5rem;
background-color: #ccc;
border-radius: 0;
color: black;
}

92
css/components/nav.css Normal file
View File

@@ -0,0 +1,92 @@
.nav {
--color-background: white;
--color-on-background: black;
--color-primary: #0066ff;
--color-on-primary: white;
display: flex;
column-gap: 2rem;
}
.nav .nav__tab {
padding-top: 4px;
border-bottom: 4px solid transparent;
display: flex;
align-items: center;
padding-inline: 0.5rem;
transition: border-color 100ms ease;
}
.nav .nav__tab.router-link-active {
border-color: var(--color-on-primary);
}
.nav .nav__tab:hover {
border-color: var(--color-on-primary);
}
.nav .nav__actions {
flex: 1;
display: flex;
align-items: center;
justify-content: flex-end;
}
.nav .nav__actions .nav__icon {
height: 3rem;
width: 3rem;
border: none;
background-color: transparent;
border-radius: 50%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 100ms ease;
}
.nav .nav__actions .nav__icon:hover {
background-color: rgba(255, 255, 255, 0.2);
}
.nav .nav__actions .nav__icon img {
height: 1.5rem;
}
.nav .nav__actions .nav__cta {
margin-left: 1rem;
padding: 1rem;
background-color: var(--color-on-primary);
color: var(--color-primary);
border-radius: 0.5rem;
box-shadow: 0 1px 0.5rem 0 rgba(0, 0, 102, 0.5);
transition: transform 100ms ease;
}
.nav .nav__actions .nav__cta:hover:not(:active) {
transform: translateY(-2px);
}
/* Shitty */
.shitty .nav .nav__tab.router-link-active {
border-color: transparent;
color: orange;
}
.shitty .nav .nav__tab:hover {
border-color: transparent;
color: orange;
}
.shitty .nav .nav__actions .nav__cta {
padding: 0.5rem;
background-color: #ccc;
color: black;
border-radius: 0;
border: 4px outset #eee;
}
.nav .nav__actions .nav__switch{
margin-left: 1rem;
padding: 1rem;
color: white;
font-family: "Lexend Deca", sans-serif;
border: 0;
background: 0;
}
.nav .nav__actions .nav__switch option {
color: black;
font-family: "Lexend Deca", sans-serif;
}

30
css/components/tabs.css Normal file
View File

@@ -0,0 +1,30 @@
.tabs {
display: flex;
}
.tabs .tab{
border: none;
cursor: pointer;
font: inherit;
padding: 1rem;
margin: 0;
background-color: transparent;
color: var(--color-on-background);
border-bottom: 3px solid transparent;
}
.tabs .tab:first-child {
border-top-left-radius: 0.5rem;
}
.tabs .tab:last-child {
border-top-right-radius: 0.5rem;
}
.tabs .tab.selected{
border-bottom: 3px solid var(--color-on-background);
}
.tabs .tab:hover{
background-color: var(--color-background-hover);
}

171
css/main.css Normal file
View File

@@ -0,0 +1,171 @@
:root {
--color-background: #080808;
--color-on-background: black;
--color-background-hover: #bbbbbb;
--color-on-background-hover: black;
--color-primary: #191922;
--color-primary-disabled: #20124d;
--color-on-primary: white;
--color-error: #de0000;
--color-on-error: white;
background-size: cover;
}
.dark.root {
color-scheme: dark;
--color-background: #08080836;
--color-on-background: white;
--color-background-hover: #2e2e2ec7;
--color-on-background-hover: white;
--color-primary: #191e22;
--color-primary-disabled: #20124d;
--color-on-primary: white;
--color-error: #de0000;
--color-on-error: white;
background: url(/assets/Bausha\ V4.png) #000000e3;
background-blend-mode: multiply;
background-size: cover;
}
.shitty.root {
--color-background: rgba(0, 0, 0, 0.7);
--color-on-background: white;
--color-background-hover: #27262c;
--color-on-background-hover: white;
--color-primary: #20124d;
--color-primary-disabled: #1f213c;
--color-on-primary: white;
--color-error: #de0000;
--color-on-error: white;
}
/* width */
::-webkit-scrollbar {
width: 10px;
}
/* Track */
::-webkit-scrollbar-track {
background: #00000088;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #191e22;
border-radius: 5px;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: #262e35;
}
html,
body,
.root {
height: 100%;
}
.root {
display: flex;
flex-direction: column;
margin: 0;
background-color: var(--color-background);
color: var(--color-on-background);
}
.surface {
background-color: var(--color-background);
color: var(--color-on-background);
}
header,
main {
display: grid;
grid-template-columns: minmax(16rem, 1fr) minmax(16rem, 2fr) minmax(
16em,
1fr
);
column-gap: 2rem;
}
header.surface {
padding: 0;
display: flex;
padding-inline: calc(25vw - 25rem);
height: 4rem;
background-color: var(--color-primary);
color: var(--color-on-primary);
}
@media screen and (min-width: 1366px) {
header {
display: grid;
padding-inline: 0;
}
}
header .logo {
justify-self: left;
align-self: center;
display: inline;
align-items: flex-end;
gap: 1rem;
}
header .logo img {
height: 3.5rem;
}
header .nav {
flex: 1;
}
main {
height: 0;
flex: 1;
display: grid;
grid-template-rows: minmax(0, 1fr);
column-gap: 2rem;
}
main > div {
overflow-y: auto;
}
.spinner {
display: flex;
align-items: center;
justify-content: center;
grid-column: span 3;
}
input[type="checkbox"] {
height: 1.25rem;
width: 1.25rem;
cursor: pointer;
margin: 0;
}
/* Shitty */
.shitty .surface {
padding: 1.5rem;
border: 2px solid var(--color-on-background);;
}
.shitty header.surface {
padding: 0 calc(25vw - 10rem);
margin-bottom: 1.5rem;
background-color: var(--color-background);
color: var(--color-on-background);
}
.shitty.root {
padding: 1.5rem;
background-image: url("/assets/april-background.jpg");
background-size: cover;
}
.shitty main {
column-gap: 1.5rem;
}
.toggle-shitty:not(:hover) img {
display: none;
}

247
css/pages/OLDLISTCSS.css Normal file
View File

@@ -0,0 +1,247 @@
.page-list .list-container,
.page-list .level-container,
.page-list .meta-container {
padding-block: 2rem;
}
.page-list .list-container {
padding-inline: 1rem;
overflow-y: auto;
}
.page-list .meta-container {
padding-right: 2rem;
}
.page-list .sul-label {
position: relative;
padding-left: 1rem;
font-size: medium;
}
.page-list .sul-info-label {
margin-top: 2rem;
margin-bottom: 1rem;
}
.page-list .list {
table-layout: auto;
}
.page-list .list .rank {
text-align: end;
padding-right: 1rem;
}
.page-list .list .level {
width: 100%;
}
.page-list .list .rank-image .rank-trophy {
height: 20px;
}
.page-list .list-separator {
text-align: center;
padding: 1rem;
}
.page-list .list .level button {
background: url(/assets/april-background.jpg) #00000094;
background-blend-mode: multiply;
background-position: center;
background-size: cover;
color: var(--color-on-background);
border: none;
border-radius: 1rem;
padding: 2rem;
text-align: start;
word-break: normal;
overflow-wrap: anywhere;
cursor: pointer;
margin-left: 0.5rem;
width: 90%;
margin-bottom: 0.5rem;
transition: filter 0.15s ease;
}
.page-list .list .level.error button {
color: var(--color-error);
cursor: not-allowed;
text-decoration: line-through;
}
.page-list .list .level button:hover {
background-color: var(--color-background-hover);
color: var(--color-on-background-hover);
cursor: pointer;
filter: brightness(1.35);
outline: 1px solid #d3b03c;
}
.page-list .list .level.active button {
background-color: var(--color-primary);
color: var(--color-on-primary);
filter: brightness(1.6);
outline: 2px solid #ffd54a;
box-shadow: 0 0 10px rgba(255,213,74,0.5);
}
.page-list .level-container .level {
display: flex;
flex-direction: column;
gap: 2rem;
padding-right: 2rem;
max-width: 48rem;
}
/* light mode rate colors */
.page-list .level-container .level .good {
background: linear-gradient(to right, #424242, #727272);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.page-list .level-container .level .great {
background: linear-gradient(to right, #363636, #5e5e5e);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0px 0px 2px #ffffff99;
}
.page-list .level-container .level .peak {
background: linear-gradient(to right, #5f5f5f, #9e9e9e);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0px 0px 5px #ffffffbb;
}
.page-list .level-container .level .level-authors {
display: grid;
grid-template-columns: max-content 1fr;
grid-auto-rows: max-content;
gap: 1rem;
}
.page-list .level-container .level .video {
aspect-ratio: 16/9;
}
.page-list .level-container .level .stats {
display: flex;
justify-content: space-evenly;
text-align: center;
gap: 2rem;
}
.page-list .level-container .level .stats li {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
.page-list .level-container .level .packs {
display: flex;
flex-wrap: wrap;
gap: 0.4em;
}
.page-list .level-container .level .packs .tag {
display: flex;
flex-shrink: 0;
background-size: 100% 100% !important;
}
.tag {
border-radius: 7px;
}
.page-list .meta-container .meta .records {
table-layout: fixed;
}
.page-list .meta-container .meta .records tr td:not(:last-child) .tag{
padding-right: 1rem;
}
.page-list .meta-container .meta .records .percent,
.page-list .meta-container .meta .records .user,
.page-list .meta-container .meta .records .user,
.page-list .meta-container .meta .records .hz {
padding: 1rem 1rem 1rem 0;
}
.page-list .meta-container .meta .records .user {
width: 100%;
}
.page-list .meta-container .meta .records .userIcon {
padding-right: 1rem;
}
.page-list .meta-container .meta .records .userIcon .ico {
height: 1.5rem;
}
.page-list .meta-container .meta .records .percent,
.page-list .meta-container .meta .records .hz {
text-align: end;
}
.page-list .meta-container .og a:hover,
.page-list .meta-container .meta .records a:hover {
text-decoration: underline;
}
.page-list .meta {
display: flex;
flex-direction: column;
gap: 2rem;
}
.page-list .meta .errors {
display: flex;
flex-direction: column;
gap: 1rem;
}
.page-list .meta .errors .error {
padding: 1rem;
background-color: var(--color-error);
color: var(--color-on-error);
border-radius: 0.5rem;
}
.page-list .meta .editors {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.page-list .meta .promote {
padding: 1rem;
background-color: var(--color-primary);
color: var(--color-on-primary);
border-radius: 0.5rem;
}
.page-list .meta .editors li {
display: flex;
align-items: center;
gap: 0.5rem;
}
.page-list .meta .editors li img {
height: 1.25rem;
}
.page-list .meta .editors li a:hover {
text-decoration: underline;
}
/* Shitty */
.shitty .page-list .list .level button {
background-color: transparent;
padding: 1rem 0;
}
.shitty .page-list .list .level button:hover {
background-color: #eee;
color: orange !important;
}
.shitty .page-list .list .level.active button {
background-color: transparent;
color: orange;
}
.tag {
font-family: "Lexend Deca", sans-serif;
display:block;
border-radius: 14px;
padding: 7px;
}
.search-highlight{
background: #ffd54a;
color: #000;
padding: 0 2px;
border-radius: 3px;
}

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;
}
}

718
css/pages/home.css Normal file
View File

@@ -0,0 +1,718 @@
/* ====================================================
Home.css — GD Demonlist Homepage
Load this in your index.html alongside your other
CSS files, e.g.: <link rel="stylesheet" href="css/Home.css">
==================================================== */
@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Mono:wght@300;400;500&family=Syne:wght@400;600;800&display=swap');
/* ── Variables scoped to .home so they can't bleed ── */
.home {
--hbg: #080b0f;
--hbg-2: #0d1117;
--hsurface: #161d27;
--hborder: rgba(255, 255, 255, 0.07);
--haccent: #e8ff00;
--haccent-2: #ff6b35;
--hglow: rgba(232, 255, 0, 0.18);
--htext: #f0f2f5;
--hmuted: #6b7a8d;
--hdim: #3d4a57;
--hfont-d: 'Bebas Neue', sans-serif;
--hfont-ui: 'Syne', sans-serif;
--hfont-mono: 'DM Mono', monospace;
--hr: 6px;
--hr-lg: 12px;
background: var(--hbg);
color: var(--htext);
font-family: var(--hfont-ui);
height: 100vh;
position: relative;
overflow-x: hidden;
/* reset any page-level margin/padding that might fight us */
margin: 0;
padding: 0;
display: block;
}
/* ── Noise ── */
.home .home-noise {
pointer-events: none;
position: fixed;
inset: 0;
z-index: 1000;
opacity: 0.03;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
background-size: 200px 200px;
}
/* ════════════ HERO ════════════ */
.home .home-hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 6rem 2rem 4rem;
overflow: hidden;
}
.home .home-hero-grid {
position: absolute;
inset: 0;
background-image:
linear-gradient(var(--hborder) 1px, transparent 1px),
linear-gradient(90deg, var(--hborder) 1px, transparent 1px);
background-size: 48px 48px;
-webkit-mask-image: radial-gradient(ellipse 80% 80% at 50% 30%, black 30%, transparent 100%);
mask-image: radial-gradient(ellipse 80% 80% at 50% 30%, black 30%, transparent 100%);
pointer-events: none;
}
.home-hero-scroll {
position: absolute;
inset: 0;
overflow: hidden;
z-index: 0;
}
.home-hero-track {
display: flex;
height: 100%;
animation: scrollBg 60s linear infinite;
}
.home-hero-tile {
width: 80rem;
height: 100%;
background-size: cover;
background-position: center;
flex-shrink: 0;
filter: brightness(0.2) blur(3px);
margin-right: -80px; /* overlap */
-webkit-mask-image: linear-gradient(
to right,
transparent,
black 40%,
black 60%,
transparent
);
mask-image: linear-gradient(
to right,
transparent,
black 40%,
black 60%,
transparent
);
}
/* smooth infinite scroll */
@keyframes scrollBg {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
.home .home-hero-content {
position: relative;
z-index: 2;
text-align: center;
max-width: 720px;
}
.home .home-eyebrow {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-family: var(--hfont-mono);
font-size: 0.7rem;
letter-spacing: 0.25em;
color: var(--hmuted);
text-transform: uppercase;
margin-bottom: 1.5rem;
padding: 0.4rem 0.9rem;
border: 1px solid var(--hborder);
border-radius: 999px;
background: rgba(255,255,255,0.02);
}
.home .home-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--haccent);
flex-shrink: 0;
display: inline-block;
}
.home .home-dot-pulse {
animation: homePulse 2s ease-in-out infinite;
}
@keyframes homePulse {
0%, 100% { box-shadow: 0 0 0 0 var(--hglow); opacity: 1; }
50% { box-shadow: 0 0 0 6px transparent; opacity: 0.5; }
}
.home .home-title {
display: flex;
flex-direction: column;
font-family: var(--hfont-d);
font-size: clamp(5rem, 18vw, 13rem);
line-height: 0.88;
letter-spacing: -0.01em;
margin: 0 0 2rem;
color: var(--htext);
}
.home .home-title-line {
display: block;
font-size: xx-large;
font-style: italic;
letter-spacing: 0.05em;
}
.home .home-title-accent {
color: var(--haccent);
font-size: 12rem;
text-shadow: 0 0 60px var(--hglow), 0 0 120px var(--hglow);
}
.home .home-sub {
font-size: 1rem;
color: var(--hmuted);
line-height: 1.7;
max-width: 420px;
margin: 0 auto 2.5rem;
}
.home .home-actions {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
/* Rings */
.home .home-deco {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 0;
}
.home .home-ring {
position: absolute;
border-radius: 50%;
border: 1px solid var(--hborder);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.home .home-ring-1 { width: 480px; height: 480px; border-color: rgba(232,255,0,0.05); }
.home .home-ring-2 { width: 720px; height: 720px; animation: homeRing 40s linear infinite; }
.home .home-ring-3 { width: 960px; height: 960px; animation: homeRing 70s linear infinite reverse; }
@keyframes homeRing {
to { transform: translate(-50%, -50%) rotate(360deg); }
}
/* ════════════ BUTTONS ════════════ */
.home .home-btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1.75rem;
font-family: var(--hfont-ui);
font-size: 0.85rem;
font-weight: 600;
letter-spacing: 0.05em;
text-transform: uppercase;
border-radius: var(--hr);
text-decoration: none;
cursor: pointer;
transition: all 0.2s ease;
border: none;
line-height: 1;
}
.home .home-btn-primary {
background: var(--haccent);
color: #000;
}
.home .home-btn-primary:hover {
background: #fff;
transform: translateY(-2px);
box-shadow: 0 8px 32px var(--hglow);
}
.home .home-btn-ghost {
background: transparent;
color: var(--hmuted);
border: 1px solid var(--hborder);
}
.home .home-btn-ghost:hover {
border-color: var(--haccent);
color: var(--haccent);
}
.home .home-btn-lg {
padding: 1rem 2.5rem;
font-size: 0.95rem;
}
/* ════════════ STATS BAR ════════════ */
.home .home-stats-bar {
border-top: 1px solid var(--hborder);
border-bottom: 1px solid var(--hborder);
background: var(--hbg-2);
}
.home .home-stats-inner {
max-width: 960px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
}
.home .home-stat-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 2rem 1.5rem;
border-right: 1px solid var(--hborder);
gap: 0.3rem;
transition: background 0.2s;
}
.home .home-stat-item:last-child {
border-right: none;
}
.home .home-stat-item:hover {
background: rgba(232,255,0,0.03);
}
.home .home-stat-value {
font-family: var(--hfont-d);
font-size: 2.8rem;
color: var(--haccent);
line-height: 1;
letter-spacing: 0.02em;
}
.home .home-stat-label {
font-family: var(--hfont-mono);
font-size: 0.65rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--hmuted);
}
/* ════════════ MEMBERS SECTION ════════════ */
.home .home-members-section {
padding: 6rem 2rem;
}
.home .home-section-header {
text-align: center;
margin-bottom: 3rem;
}
.home .home-section-title {
font-family: var(--hfont-d);
font-size: clamp(2.5rem, 6vw, 5rem);
letter-spacing: 0.05em;
margin: 0 0 0.4rem;
color: var(--htext);
}
.home .home-section-sub {
font-family: var(--hfont-mono);
font-size: 0.7rem;
letter-spacing: 0.2em;
color: var(--hmuted);
text-transform: uppercase;
margin: 0;
}
/* ── Spotlight ── */
.home .home-spotlight {
position: relative;
max-width: 960px;
margin: 0 auto;
border-radius: var(--hr-lg);
overflow: hidden;
min-height: 420px;
border: 1px solid var(--hborder);
}
.home .home-spotlight-bg {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
filter: blur(3px) brightness(0.22) saturate(0.5);
transform: scale(1.06);
transition: background-image 0.5s ease;
}
.home .home-spotlight-tint {
position: absolute;
inset: 0;
background: linear-gradient(
135deg,
rgba(8,11,15,0.93) 0%,
rgba(8,11,15,0.68) 55%,
rgba(8,11,15,0.88) 100%
);
}
/* Pills */
.home .home-pills {
position: relative;
z-index: 3;
display: flex;
gap: 0.5rem;
padding: 1.25rem 1.5rem;
overflow-x: auto;
scrollbar-width: none;
border-bottom: 1px solid var(--hborder);
background: rgba(0,0,0,0.28);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.home .home-pills::-webkit-scrollbar {
display: none;
}
.home .home-pill {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.4rem 0.9rem;
border-radius: 999px;
border: 1px solid var(--hborder);
background: rgba(255,255,255,0.04);
color: var(--hmuted);
font-family: var(--hfont-ui);
font-size: 0.78rem;
font-weight: 600;
cursor: pointer;
white-space: nowrap;
transition: all 0.2s;
}
.home .home-pill:hover {
border-color: rgba(232,255,0,0.3);
color: var(--htext);
}
.home .home-pill.home-pill-active {
background: var(--haccent);
border-color: var(--haccent);
color: #000;
}
.home .home-pill-icon {
width: 20px;
height: 20px;
border-radius: 3px;
image-rendering: pixelated;
display: block;
}
/* Card */
.home .home-card {
position: relative;
z-index: 3;
display: flex;
gap: 2.5rem;
padding: 2.5rem;
align-items: flex-start;
}
.home .home-card-left {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
min-width: 140px;
flex-shrink: 0;
}
.home .home-yt-link {
position: relative;
display: block;
text-decoration: none;
transition: transform 0.2s;
}
.home .home-yt-link:hover {
transform: scale(1.04);
}
.home .home-yt-avatar,
.home .home-icon-wrap img {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
border: 2px solid var(--hborder);
display: block;
image-rendering: pixelated;
}
.home .home-yt-badge {
position: absolute;
bottom: -4px;
right: -4px;
background: #ff0000;
color: #fff;
font-size: 0.55rem;
font-family: var(--hfont-mono);
padding: 0.15rem 0.35rem;
border-radius: 3px;
display: flex;
align-items: center;
gap: 0.25rem;
letter-spacing: 0.05em;
}
.home .home-card-name {
font-family: var(--hfont-d);
font-size: 1.8rem;
letter-spacing: 0.04em;
margin: 0;
color: var(--htext);
text-align: center;
}
.home .home-card-role {
font-family: var(--hfont-mono);
font-size: 0.65rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--haccent);
margin: 0;
text-align: center;
}
.home .home-card-right {
flex: 1;
display: flex;
flex-direction: column;
gap: 1.5rem;
justify-content: center;
padding-top: 0.5rem;
}
.home .home-cstats {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.home .home-cstat {
display: flex;
flex-direction: column;
gap: 0.2rem;
padding: 0.8rem 1.2rem;
border: 1px solid var(--hborder);
border-radius: var(--hr);
background: rgba(255,255,255,0.03);
min-width: 90px;
}
.home .home-cstat-val {
font-family: var(--hfont-d);
font-size: 1.6rem;
color: var(--htext);
line-height: 1;
}
.home .home-cstat-key {
font-family: var(--hfont-mono);
font-size: 0.6rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--hmuted);
}
.home .home-hardest {
display: flex;
flex-direction: column;
gap: 0.2rem;
}
.home .home-hardest-label {
font-family: var(--hfont-mono);
font-size: 0.6rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--hdim);
}
.home .home-hardest-name {
font-family: var(--hfont-d);
font-size: 1.5rem;
letter-spacing: 0.04em;
color: var(--haccent-2);
text-shadow: 0 0 40px rgba(255,107,53,0.3);
}
.home .home-hardest-rank {
font-family: var(--hfont-mono);
font-size: 0.65rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--hdim);
margin-top: 0.1rem;
}
/* Nav arrows */
.home .home-nav {
position: absolute;
bottom: 1.5rem;
z-index: 4;
background: rgba(255,255,255,0.06);
border: 1px solid var(--hborder);
color: var(--hmuted);
width: 36px;
height: 36px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 1rem;
transition: all 0.2s;
}
.home .home-nav:hover {
background: var(--haccent);
color: #000;
border-color: var(--haccent);
}
.home .home-nav-left { right: 5rem; }
.home .home-nav-right { right: 1.5rem; }
/* Transition */
.home-card-fade-enter-active,
.home-card-fade-leave-active {
transition: opacity 0.25s ease, transform 0.25s ease;
}
.home-card-fade-enter-from { opacity: 0; transform: translateY(10px); }
.home-card-fade-leave-to { opacity: 0; transform: translateY(-8px); }
/* ════════════ FUN FACTS ════════════ */
.home .home-facts {
padding: 4rem 2rem 6rem;
max-width: 1100px;
margin: 0 auto;
}
.home .home-facts-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
border: 1px solid var(--hborder);
border-radius: var(--hr-lg);
overflow: hidden;
background: var(--hborder);
}
.home .home-fact-card {
display: flex;
flex-direction: column;
gap: 0.75rem;
padding: 2rem;
background: var(--hbg-2);
transition: background 0.2s;
}
.home .home-fact-card:hover {
background: var(--hsurface);
}
.home .home-fact-icon {
font-size: 1.5rem;
line-height: 1;
}
.home .home-fact-text {
font-size: 0.85rem;
color: var(--hmuted);
line-height: 1.65;
margin: 0;
}
/* ════════════ FOOTER CTA ════════════ */
.home .home-footer-cta {
text-align: center;
padding: 6rem 2rem;
border-top: 1px solid var(--hborder);
background: var(--hbg-2);
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
}
.home .home-footer-heading {
font-family: var(--hfont-d);
font-size: clamp(2rem, 5vw, 4rem);
margin: 0;
letter-spacing: 0.04em;
color: var(--htext);
}
/* ════════════ RESPONSIVE ════════════ */
@media (max-width: 768px) {
.home .home-stats-inner {
grid-template-columns: repeat(2, 1fr);
}
.home .home-stat-item:nth-child(2) { border-right: none; }
.home .home-stat-item:nth-child(3) { border-top: 1px solid var(--hborder); }
.home .home-stat-item:nth-child(4) { border-top: 1px solid var(--hborder); border-right: none; }
.home .home-card {
flex-direction: column;
align-items: center;
padding: 1.5rem;
gap: 1.5rem;
}
.home .home-card-left {
flex-direction: row;
align-items: center;
gap: 1rem;
min-width: unset;
width: 100%;
}
.home .home-card-name,
.home .home-card-role { text-align: left; }
.home .home-facts-grid { grid-template-columns: 1fr; }
.home .home-nav-left { right: 4rem; }
.home .home-ring { display: none; }
}
@media (max-width: 480px) {
.home .home-title { font-size: 4.5rem; }
.home .home-pills { padding: 0.75rem 1rem; }
.home .home-card { padding: 1.25rem; }
.home .home-cstats { gap: 0.5rem; }
.home .home-cstat { padding: 0.6rem 0.8rem; min-width: 76px; }
}

521
css/pages/leaderboard.css Normal file
View File

@@ -0,0 +1,521 @@
/* ============================================================
leaderboard.css — Revamped Leaderboard
Same layout, visual polish + interactivity
============================================================ */
/* ── Page shell ── */
.page-leaderboard-container {
display: block;
}
.page-leaderboard {
height: 100%;
display: grid;
grid-template-columns: minmax(24rem, 2fr) 3fr;
grid-template-rows: max-content 1fr;
column-gap: 2rem;
max-width: 80rem;
margin: 0 auto;
}
.page-leaderboard > div {
overflow-y: auto;
}
/* ── Error banner ── */
.page-leaderboard .error-container {
grid-row: 1;
grid-column: 1 / span 2;
}
.page-leaderboard .error-container .error {
padding: 0.75rem 1rem;
background-color: var(--color-error);
color: var(--color-on-error);
border-radius: 6px;
font-size: 0.85rem;
}
/* ── Board + player containers ── */
.page-leaderboard .board-container,
.page-leaderboard .player-container {
grid-row: 2;
padding-block: 2rem;
}
.page-leaderboard .board-container {
padding-inline: 1rem;
box-shadow: inset 0 -24px 20px -20px rgba(0,0,0,0.4);
}
/* ── Board table ── */
.page-leaderboard .board {
table-layout: auto;
display: block;
width: 100%;
border-collapse: separate;
border-spacing: 0 3px;
}
/* ── Rank column ── */
.page-leaderboard .board .rank {
padding-block: 0.75rem;
padding-right: 0.5rem;
text-align: end;
font-variant-numeric: tabular-nums;
white-space: nowrap;
font-size: 0.8rem;
color: rgba(255,255,255,0.35);
font-weight: 700;
letter-spacing: 0.04em;
width: 1%;
}
/* Top 3 rank numbers */
.page-leaderboard .board tr:nth-child(1) .rank {
color: #ffd700;
text-shadow: 0 0 8px rgba(255,215,0,0.5);
}
.page-leaderboard .board tr:nth-child(2) .rank {
color: #c0c0c0;
text-shadow: 0 0 8px rgba(192,192,192,0.4);
}
.page-leaderboard .board tr:nth-child(3) .rank {
color: #cd7f32;
text-shadow: 0 0 8px rgba(205,127,50,0.4);
}
/* ── Trophy column ── */
.page-leaderboard .board .rank-image {
padding-left: 0.75rem;
padding-right: 0.25rem;
width: 2rem;
}
.page-leaderboard .board .rank-image .trophy {
height: 20px;
display: block;
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.5));
transition: transform 0.2s ease;
}
.page-leaderboard .board tr:hover .trophy {
transform: scale(1.15) rotate(-4deg);
}
/* ── Score column ── */
.page-leaderboard .board .total {
padding: 0.75rem 0.75rem 0.75rem 0.5rem;
text-align: end;
font-variant-numeric: tabular-nums;
white-space: nowrap;
font-size: 0.85rem;
font-weight: 700;
color: rgba(255,255,255,0.45);
width: 1%;
}
.page-leaderboard .board tr:nth-child(1) .total { color: rgba(255,215,0,0.75); }
.page-leaderboard .board tr:nth-child(2) .total { color: rgba(192,192,192,0.75); }
.page-leaderboard .board tr:nth-child(3) .total { color: rgba(205,127,50,0.75); }
/* ── Icon column ── */
.page-leaderboard .board .userIcon {
width: 2.75rem;
vertical-align: middle;
padding-left: 0.25rem;
}
.page-leaderboard .board .userIcon .ico {
height: 2.25rem;
width: 2.25rem;
display: block;
border-radius: 5px;
image-rendering: pixelated;
box-shadow: 0 0 0 1px rgba(255,255,255,0.08);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.page-leaderboard .board tr:hover .ico {
transform: scale(1.08);
box-shadow: 0 0 0 1px rgba(255,255,255,0.22);
}
/* ── Username column ── */
.page-leaderboard .board .user {
width: 100%;
vertical-align: middle;
padding-left: 0.4rem;
}
.page-leaderboard .board .user button {
background-color: transparent;
color: var(--color-on-background);
border: 1px solid transparent;
border-radius: 7px;
padding: 0.55rem 0.85rem;
text-align: start;
word-break: normal;
overflow-wrap: anywhere;
width: 100%;
position: relative;
overflow: hidden;
transition:
background-color 0.15s ease,
border-color 0.15s ease,
color 0.15s ease,
box-shadow 0.15s ease,
transform 0.1s ease;
}
/* shimmer on hover */
.page-leaderboard .board .user button::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
105deg,
transparent 35%,
rgba(255,255,255,0.05) 50%,
transparent 65%
);
transform: translateX(-100%);
transition: transform 0.4s ease;
pointer-events: none;
}
.page-leaderboard .board .user button:hover::before {
transform: translateX(100%);
}
.page-leaderboard .board .user button:hover {
background-color: rgba(255,255,255,0.06);
border-color: rgba(255,255,255,0.1);
color: var(--color-on-background-hover);
cursor: pointer;
transform: translateX(2px);
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
}
.page-leaderboard .board .user.active button {
background-color: var(--color-primary);
color: var(--color-on-primary);
border-color: rgba(255,213,74,0.7);
box-shadow:
0 0 0 2px rgba(255,213,74,0.25),
0 0 16px rgba(255,213,74,0.15),
0 3px 12px rgba(0,0,0,0.4);
transform: translateX(3px);
}
/* ── Player detail panel ── */
.page-leaderboard .player {
display: flex;
flex-direction: column;
gap: 1.75rem;
padding-right: 2rem;
}
/* Player name heading */
.page-leaderboard .player > h2:first-child {
font-size: 1.6rem;
font-weight: 800;
margin: 0;
background: linear-gradient(135deg, #ffffff 55%, rgba(255,213,74,0.75) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
line-height: 1.2;
}
/* Total points sub-label */
.page-leaderboard .player .extra_points_info {
font-size: 0.75rem;
color: rgba(255,255,255,0.35);
font-style: italic;
margin: -1rem 0 0;
line-height: 1.5;
letter-spacing: 0.01em;
padding: 0.4rem 0.75rem;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.05);
border-radius: 6px;
}
/* Section headings (Completions, Verifications, etc.) */
.page-leaderboard .player h2,
.page-leaderboard .player h3 {
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
padding-bottom: 0.5rem;
border-bottom: 1px solid rgba(255,255,255,0.06);
margin: 0;
}
/* ── Player level rows table ── */
.page-leaderboard .player .table {
table-layout: auto;
width: 100%;
border-collapse: separate;
border-spacing: 0 5px;
}
.page-leaderboard .player .table tr td:not(:last-child) {
padding-right: 1rem;
}
.page-leaderboard .player .table p,
.page-leaderboard .player .table a {
padding-block: 0.5rem;
margin: 0;
}
/* rank + score: shrink to content */
.page-leaderboard .player .table .rank,
.page-leaderboard .player .table .score {
width: 1%;
white-space: nowrap;
}
.page-leaderboard .player .table .rank p,
.page-leaderboard .player .table .score p {
text-align: end;
font-variant-numeric: tabular-nums;
font-size: 0.8rem;
color: rgba(255,255,255,0.4);
font-weight: 700;
}
/* Level pill */
.page-leaderboard .player .table .level {
width: 100%;
background: url(/assets/april-background.jpg) #00000094;
background-blend-mode: multiply;
background-size: cover;
background-position: center;
border-radius: 0.65rem;
padding: 0.7rem 1rem 0.55rem;
border: 1px solid rgba(255,255,255,0.06);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.06),
0 2px 8px rgba(0,0,0,0.35);
position: relative;
overflow: hidden;
transition:
filter 0.15s ease,
border-color 0.15s ease,
box-shadow 0.15s ease;
}
/* shimmer on level pill */
.page-leaderboard .player .table .level::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
105deg,
transparent 35%,
rgba(255,255,255,0.04) 50%,
transparent 65%
);
transform: translateX(-100%);
transition: transform 0.4s ease;
pointer-events: none;
}
.page-leaderboard .player .table tr:hover .level::before {
transform: translateX(100%);
}
.page-leaderboard .player .table tr:hover .level {
filter: brightness(1.3);
border-color: rgba(211,176,60,0.35);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.1),
0 4px 16px rgba(0,0,0,0.45),
0 0 0 1px rgba(211,176,60,0.2);
}
.page-leaderboard .player .table a {
font-size: 0.9rem;
font-weight: 600;
color: rgba(255,255,255,0.9);
text-decoration: none;
display: block;
transition: color 0.15s ease;
}
.page-leaderboard .player .table a:hover {
text-decoration: underline;
color: #ffd54a;
}
/* ════════════════════════════════════════
SCORE BREAKDOWN (donut + bars)
════════════════════════════════════════ */
.page-leaderboard .player .lb-breakdown {
display: flex;
align-items: center;
gap: 1.5rem;
padding: 1.1rem 1.25rem;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.07);
border-radius: 12px;
}
/* ── Donut ── */
.page-leaderboard .player .lb-donut-wrap {
flex-shrink: 0;
width: 100px;
height: 100px;
}
.page-leaderboard .player .lb-donut {
width: 100%;
height: 100%;
/* SVG circles animate in */
overflow: visible;
}
.page-leaderboard .player .lb-donut circle:not(:first-child) {
transition: stroke-dasharray 0.7s cubic-bezier(0.22, 1, 0.36, 1),
stroke-dashoffset 0.7s cubic-bezier(0.22, 1, 0.36, 1);
}
.page-leaderboard .player .lb-donut-total {
font-size: 18px;
font-weight: 800;
fill: #fff;
font-family: 'Geist', sans-serif;
}
.page-leaderboard .player .lb-donut-label {
font-size: 10px;
font-weight: 600;
fill: rgba(255,255,255,0.35);
font-family: 'Geist Mono', monospace;
letter-spacing: 0.1em;
text-transform: uppercase;
}
/* ── Bars ── */
.page-leaderboard .player .lb-bars {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.55rem;
min-width: 0;
}
.page-leaderboard .player .lb-bar-row {
display: flex;
align-items: center;
gap: 0.5rem;
}
.page-leaderboard .player .lb-bar-dot {
flex-shrink: 0;
width: 7px;
height: 7px;
border-radius: 50%;
box-shadow: 0 0 6px currentColor;
}
.page-leaderboard .player .lb-bar-cat {
flex-shrink: 0;
width: 5.5rem;
font-size: 0.72rem;
font-weight: 600;
color: rgba(255,255,255,0.45);
letter-spacing: 0.02em;
}
.page-leaderboard .player .lb-bar-track {
flex: 1;
height: 5px;
background: rgba(255,255,255,0.07);
border-radius: 99px;
overflow: hidden;
min-width: 0;
}
.page-leaderboard .player .lb-bar-fill {
height: 100%;
border-radius: 99px;
transition: width 0.7s cubic-bezier(0.22, 1, 0.36, 1);
/* glow matching the bar colour */
box-shadow: 0 0 8px currentColor;
}
.page-leaderboard .player .lb-bar-val {
flex-shrink: 0;
width: 3rem;
text-align: right;
font-size: 0.72rem;
font-weight: 700;
font-family: 'Geist Mono', monospace;
color: rgba(255,255,255,0.4);
font-variant-numeric: tabular-nums;
}
/* ── Packs ── */
.page-leaderboard .player .packs {
display: flex;
flex-wrap: wrap;
gap: 0.4em;
}
.page-leaderboard .player .packs .tag {
display: flex;
flex-shrink: 0;
background-size: 100% 100% !important;
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.page-leaderboard .player .packs .tag:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}
/* ── Tag pill (global) ── */
.tag {
font-family: "Lexend Deca", sans-serif;
display: block;
border-radius: 14px;
padding: 5px 10px;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.03em;
}
/* ── Shitty mode (preserved) ── */
.shitty .page-leaderboard .board .user button {
background-color: transparent;
padding: 1rem 0;
border: none;
box-shadow: none;
transform: none;
}
.shitty .page-leaderboard .board .user button::before {
display: none;
}
.shitty .page-leaderboard .board .user button:hover {
background-color: #eee;
color: orange !important;
transform: none;
box-shadow: none;
}
.shitty .page-leaderboard .board .user.active button {
background-color: transparent;
color: orange;
box-shadow: none;
transform: none;
border: none;
}

674
css/pages/list.css Normal file
View File

@@ -0,0 +1,674 @@
/* ============================================================
list.css — Revamped Pointercrate Layout
Keeps existing structure, adds polish + interactivity
============================================================ */
/* ── Containers ── */
.page-list .list-container,
.page-list .level-container,
.page-list .meta-container {
padding-block: 2rem;
}
.page-list .list-container {
padding-inline: 1rem;
overflow-y: auto;
box-shadow: inset 0 -24px 20px -20px rgba(0,0,0,0.4);
/* needed so position:sticky works inside an overflow:auto container */
position: relative;
/* remove top padding — the sticky bar provides it */
padding-top: 0;
}
.page-list .meta-container {
padding-right: 2rem;
}
/* ── Show-unverified label ── */
.page-list .sul-label {
position: relative;
padding-left: 1rem;
font-size: medium;
}
.page-list .sul-info-label {
margin-top: 2rem;
margin-bottom: 1rem;
}
/* ── List table ── */
.page-list .list {
table-layout: auto;
border-collapse: separate;
border-spacing: 0 2px;
}
.page-list .list .rank {
text-align: end;
padding-right: 0.75rem;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.page-list .list .level {
width: 100%;
}
.page-list .list .rank-image .rank-trophy {
height: 20px;
/* small drop shadow on trophies */
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.5));
transition: transform 0.2s ease;
}
.page-list .list tr:hover .rank-trophy {
transform: scale(1.15) rotate(-4deg);
}
/* ── Section separator ── */
.page-list .list-separator {
text-align: center;
padding: 1rem;
font-size: 0.8rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
position: relative;
}
.page-list .list-separator::before,
.page-list .list-separator::after {
content: '';
position: absolute;
top: 50%;
width: 28%;
height: 1px;
background: linear-gradient(to right, transparent, rgba(255,255,255,0.1));
}
.page-list .list-separator::before {
left: 4%;
}
.page-list .list-separator::after {
right: 4%;
transform: scaleX(-1);
}
/* ── Level buttons ── */
.page-list .list .level button {
/* base: dark bg + level thumbnail blended in */
background-color: #00000094;
background-blend-mode: multiply;
background-position: center;
background-size: cover;
color: var(--color-on-background);
border: 1px solid rgba(255,255,255,0.06);
border-radius: 0.75rem;
padding: 0.85rem 1.1rem;
text-align: start;
word-break: normal;
overflow-wrap: anywhere;
cursor: pointer;
margin-left: 0.5rem;
width: 90%;
margin-bottom: 0.4rem;
/* smooth everything */
transition:
filter 0.18s ease,
border-color 0.18s ease,
box-shadow 0.18s ease,
background-color 0.18s ease,
transform 0.12s ease;
/* subtle inner highlight at top edge */
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.07),
0 2px 6px rgba(0,0,0,0.3);
position: relative;
overflow: hidden;
}
/* shimmer pseudo-element that sweeps across on hover */
.page-list .list .level button::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
105deg,
transparent 35%,
rgba(255,255,255,0.06) 50%,
transparent 65%
);
transform: translateX(-100%);
transition: transform 0.4s ease;
pointer-events: none;
}
.page-list .list .level button:hover::before {
transform: translateX(100%);
}
/* error state */
.page-list .list .level.error button {
color: var(--color-error);
cursor: not-allowed;
text-decoration: line-through;
opacity: 0.5;
}
/* hover state */
.page-list .list .level button:hover {
filter: brightness(1.4);
border-color: rgba(211, 176, 60, 0.5);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.1),
0 4px 16px rgba(0,0,0,0.4),
0 0 0 1px rgba(211,176,60,0.25);
transform: translateX(2px);
}
/* active (selected) state */
.page-list .list .level.active button {
background-color: var(--color-primary);
color: var(--color-on-primary);
filter: brightness(1.5);
border-color: rgba(255, 213, 74, 0.8);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.2),
0 0 0 2px rgba(255,213,74,0.35),
0 0 18px rgba(255,213,74,0.25),
0 4px 20px rgba(0,0,0,0.5);
transform: translateX(3px);
}
/* rank number next to active level glows */
.page-list .list .level.active ~ td .rank p,
.page-list .list tr:has(.level.active) .rank p {
color: #ffd54a;
text-shadow: 0 0 8px rgba(255,213,74,0.6);
}
/* ── Search highlight ── */
.search-highlight {
background: #ffd54a;
color: #000;
padding: 0 3px;
border-radius: 3px;
font-weight: 700;
}
/* ── Level detail panel ── */
.page-list .level-container .level {
display: flex;
flex-direction: column;
gap: 1.5rem;
padding-right: 2rem;
max-width: 48rem;
}
/* Level title */
.page-list .level-container .level h1 {
font-size: 1.75rem;
font-weight: 800;
line-height: 1.2;
margin: 0;
/* subtle gradient shimmer on the title */
background: linear-gradient(135deg, #ffffff 60%, rgba(255,213,74,0.7) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* GD level description quote */
.page-list .level-container .level > p:first-of-type {
font-size: 0.875rem;
color: rgba(255,255,255,0.45);
font-style: italic;
line-height: 1.6;
padding: 0.75rem 1rem;
border-left: 2px solid rgba(255,213,74,0.4);
background: rgba(255,255,255,0.03);
border-radius: 0 6px 6px 0;
margin: 0;
}
/* Rate colours */
.page-list .level-container .level .good {
background: linear-gradient(to right, #424242, #727272);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.page-list .level-container .level .great {
background: linear-gradient(to right, #363636, #5e5e5e);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0 0 2px #ffffff99;
}
.page-list .level-container .level .peak {
background: linear-gradient(to right, #5f5f5f, #9e9e9e);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0 0 5px #ffffffbb;
}
/* Authors grid */
.page-list .level-container .level .level-authors {
display: grid;
grid-template-columns: max-content 1fr;
grid-auto-rows: max-content;
gap: 0.5rem 1rem;
}
.page-list .level-container .level .level-authors > *:nth-child(odd) {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.15em;
text-transform: uppercase;
color: rgba(255,255,255,0.35);
padding-top: 2px;
}
/* Packs */
.page-list .level-container .level .packs {
display: flex;
flex-wrap: wrap;
gap: 0.4em;
}
.page-list .level-container .level .packs .tag {
display: flex;
flex-shrink: 0;
background-size: 100% 100% !important;
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.page-list .level-container .level .packs .tag:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}
/* Tabs (Verification / Showcase) */
.page-list .level-container .level .tabs {
display: flex;
gap: 0.35rem;
padding: 0.25rem;
background: rgba(255,255,255,0.05);
border-radius: 8px;
width: fit-content;
}
.page-list .level-container .level .tab {
padding: 0.4rem 1.1rem;
border-radius: 6px;
border: none;
background: transparent;
color: rgba(255,255,255,0.4);
font-size: 0.8rem;
font-weight: 600;
letter-spacing: 0.04em;
cursor: pointer;
transition: background 0.15s ease, color 0.15s ease;
}
.page-list .level-container .level .tab.selected {
background: rgba(255,255,255,0.12);
color: #fff;
box-shadow: 0 1px 4px rgba(0,0,0,0.3);
}
.page-list .level-container .level .tab:not(.selected):hover {
color: rgba(255,255,255,0.7);
background: rgba(255,255,255,0.06);
}
/* Video embed */
.page-list .level-container .level .video {
aspect-ratio: 16/9;
width: 100%;
border-radius: 10px;
border: 1px solid rgba(255,255,255,0.07);
box-shadow: 0 8px 32px rgba(0,0,0,0.5);
}
/* Stats row */
.page-list .level-container .level .stats {
display: flex;
justify-content: space-evenly;
text-align: center;
gap: 0;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.07);
border-radius: 10px;
overflow: hidden;
list-style: none;
padding: 0;
margin: 0;
}
.page-list .level-container .level .stats li {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.4rem;
flex: 1;
padding: 1rem 0.5rem;
border-right: 1px solid rgba(255,255,255,0.06);
transition: background 0.15s ease;
}
.page-list .level-container .level .stats li:last-child {
border-right: none;
}
.page-list .level-container .level .stats li:hover {
background: rgba(255,255,255,0.04);
}
.page-list .level-container .level .stats .type-title-sm {
font-size: 0.6rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: rgba(255,255,255,0.35);
font-weight: 700;
}
.page-list .level-container .level .stats p {
font-size: 1.1rem;
font-weight: 700;
color: #fff;
margin: 0;
}
/* ── Meta container (records + editors) ── */
.page-list .meta {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.page-list .meta .errors {
display: flex;
flex-direction: column;
gap: 1rem;
}
.page-list .meta .errors .error {
padding: 0.75rem 1rem;
background-color: var(--color-error);
color: var(--color-on-error);
border-radius: 0.5rem;
font-size: 0.85rem;
}
/* Records heading */
.page-list .meta h2 {
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
padding-bottom: 0.5rem;
border-bottom: 1px solid rgba(255,255,255,0.06);
margin: 0;
}
/* Records qualify text */
.page-list .meta > p {
font-size: 0.8rem;
color: rgba(255,255,255,0.45);
margin: -0.75rem 0 0;
}
/* Records table */
.page-list .meta-container .meta .records {
table-layout: auto;
width: 100%;
border-collapse: separate;
border-spacing: 0 2px;
}
.page-list .meta-container .meta .records .record {
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: background 0.12s ease;
}
.page-list .meta-container .meta .records .record:last-child {
border-bottom: none;
}
.page-list .meta-container .meta .records .record:hover {
background: rgba(255,255,255,0.04);
border-radius: 6px;
}
.page-list .meta-container .meta .records tr td:not(:last-child) .tag {
padding-right: 1rem;
}
.page-list .meta-container .meta .records .percent,
.page-list .meta-container .meta .records .user,
.page-list .meta-container .meta .records .hz {
padding: 0.65rem 0.5rem 0.65rem 0;
vertical-align: middle;
}
/* percent + hz: shrink to content, never wrap */
.page-list .meta-container .meta .records .percent,
.page-list .meta-container .meta .records .hz {
width: 1%;
white-space: nowrap;
}
/* icon column: fixed small width */
.page-list .meta-container .meta .records .userIcon {
width: 2.5rem;
padding-right: 0.75rem;
vertical-align: middle;
}
/* username gets all remaining space */
.page-list .meta-container .meta .records .user {
width: 100%;
}
.page-list .meta-container .meta .records .userIcon .ico {
height: 1.75rem;
width: 1.75rem;
border-radius: 4px;
image-rendering: pixelated;
/* small ring around icon */
box-shadow: 0 0 0 1px rgba(255,255,255,0.1);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.page-list .meta-container .meta .records .record:hover .ico {
transform: scale(1.1);
box-shadow: 0 0 0 1px rgba(255,255,255,0.25);
}
.page-list .meta-container .meta .records .percent,
.page-list .meta-container .meta .records .hz {
text-align: end;
font-variant-numeric: tabular-nums;
font-size: 0.85rem;
color: rgba(255,255,255,0.5);
font-weight: 600;
white-space: nowrap;
padding-right: 0.75rem;
}
.page-list .meta-container .meta .records .mobile {
width: 1%;
white-space: nowrap;
vertical-align: middle;
padding-left: 0.5rem;
}
/* 100% records stand out */
.page-list .meta-container .meta .records .record:has(.percent p) .percent p {
color: rgba(255,255,255,0.5);
}
.page-list .meta-container .meta .records .percent p {
margin: 0;
}
/* Record username links */
.page-list .meta-container .og a:hover,
.page-list .meta-container .meta .records a:hover {
text-decoration: underline;
color: #ffd54a;
}
.page-list .meta-container .meta .records .user a {
font-size: 0.9rem;
font-weight: 500;
color: rgba(255,255,255,0.85);
text-decoration: none;
transition: color 0.15s ease;
}
/* Editors list */
.page-list .meta .editors {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.page-list .meta .editors li {
display: flex;
align-items: center;
gap: 0.6rem;
padding: 0.4rem 0.6rem;
border-radius: 6px;
transition: background 0.15s ease;
}
.page-list .meta .editors li:hover {
background: rgba(255,255,255,0.05);
}
.page-list .meta .editors li img {
height: 1.15rem;
opacity: 0.7;
}
.page-list .meta .editors li a:hover {
text-decoration: underline;
color: #ffd54a;
}
.page-list .meta .promote {
padding: 0.75rem 1rem;
background-color: var(--color-primary);
color: var(--color-on-primary);
border-radius: 0.5rem;
font-size: 0.85rem;
}
/* ── Tag pill ── */
.tag {
font-family: "Lexend Deca", sans-serif;
display: block;
border-radius: 14px;
padding: 5px 10px;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.03em;
}
/* ── Sticky search + filter bar ── */
.page-list .list-toolbar {
position: sticky;
top: 0;
z-index: 50;
/* frosted glass effect so list content scrolls under it */
background: rgba(10, 12, 16, 0.82);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid rgba(255,255,255,0.06);
padding: 0.85rem 0;
margin-bottom: 0.5rem;
/* negative margin to cancel container padding so it goes edge-to-edge */
margin-inline: -1rem;
padding-inline: 1rem;
display: flex;
gap: 10px;
align-items: center;
}
/* shadow that appears below the bar when scrolled */
.page-list .list-toolbar::after {
content: '';
position: absolute;
bottom: -12px;
left: 0;
right: 0;
height: 12px;
background: linear-gradient(to bottom, rgba(0,0,0,0.18), transparent);
pointer-events: none;
}
/* ── Enjoyment bar ── */
/* wraps the enjoyment stat li to add the bar beneath the number */
.page-list .level-container .level .stats .enjoyment-stat {
position: relative;
}
.page-list .level-container .level .stats .enjoyment-bar-track {
width: 80%;
height: 3px;
background: rgba(255,255,255,0.08);
border-radius: 99px;
overflow: hidden;
margin-top: -0.1rem;
}
.page-list .level-container .level .stats .enjoyment-bar-fill {
height: 100%;
border-radius: 99px;
/* colour transitions red→yellow→green using the --enjoyment CSS var */
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,
box-shadow 0.6s ease;
}
/* ── Shitty mode overrides (preserved) ── */
.shitty .page-list .list .level button {
background-color: transparent;
padding: 1rem 0;
border: none;
box-shadow: none;
}
.shitty .page-list .list .level button::before {
display: none;
}
.shitty .page-list .list .level button:hover {
background-color: #eee;
color: orange !important;
transform: none;
filter: none;
box-shadow: none;
}
.shitty .page-list .list .level.active button {
background-color: transparent;
color: orange;
box-shadow: none;
transform: none;
filter: none;
}

664
css/pages/listpacks.css Normal file
View File

@@ -0,0 +1,664 @@
@import url('https://fonts.bunny.net/css?family=geist:300,400,500,600,700,800|geist-mono:400,500,700&display=swap');
/* ── Base font for everything in the pack layout ── */
.pack-layout,
.pack-layout * {
font-family: 'Geist', sans-serif;
}
/* Mono for anything numeric or label-like */
.pack-hero-pts,
.pack-hero-count,
.pack-hero-label,
.pack-pick-count,
.pack-level-rank,
.pack-level-pts,
.pack-picker-heading {
font-family: 'Geist Mono', monospace;
}
/* ============================================================
listpacks.css — Revamped Pack List
============================================================ */
/* ── Page shell ── */
.pack-layout {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
max-height: 100vh;
overflow: hidden;
box-sizing: border-box;
}
/* ════════════════════════════════════════
HERO BANNER
════════════════════════════════════════ */
.pack-hero {
position: relative;
height: 200px;
flex-shrink: 0;
overflow: hidden;
display: flex;
align-items: flex-end;
}
.pack-hero-collage {
position: absolute;
inset: 0;
display: flex;
gap: 0;
}
.pack-hero-strip {
flex: 1;
background-size: cover;
background-position: center;
clip-path: polygon(8% 0%, 100% 0%, 92% 100%, 0% 100%);
margin-right: -3%;
filter: brightness(0.45) saturate(0.7);
transition: filter 0.4s ease;
}
.pack-hero:hover .pack-hero-strip {
filter: brightness(0.55) saturate(0.85);
}
.pack-hero-tint {
position: absolute;
inset: 0;
background: linear-gradient(
to bottom,
rgba(0,0,0,0.0) 0%,
rgba(0,0,0,0.5) 50%,
rgba(10,12,16,0.95) 100%
);
z-index: 1;
}
.pack-hero::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 3px;
background: var(--hero-colour, #ffffff);
opacity: 0.7;
z-index: 3;
box-shadow: 0 0 24px 4px var(--hero-colour, #ffffff);
transition: background 0.4s ease, box-shadow 0.4s ease;
}
.pack-hero-content {
position: relative;
z-index: 2;
padding: 1.25rem 2rem 1.5rem;
width: 100%;
}
.pack-hero-meta {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.pack-hero-label {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.22em;
text-transform: uppercase;
color: rgba(255,255,255,0.4);
}
.pack-hero-name {
font-size: clamp(1.4rem, 3vw, 2.2rem);
font-weight: 800;
margin: 0;
color: #fff;
text-shadow: 0 2px 16px rgba(0,0,0,0.8);
line-height: 1.15;
}
.pack-hero-stats {
display: flex;
align-items: baseline;
gap: 1rem;
margin-top: 0.2rem;
}
.pack-hero-pts {
font-size: 1.1rem;
font-weight: 700;
color: var(--hero-colour, #fff);
text-shadow: 0 0 20px var(--hero-colour, transparent);
transition: color 0.4s ease;
}
.pack-hero-pts em {
font-style: normal;
font-size: 0.75rem;
font-weight: 500;
color: rgba(255,255,255,0.45);
margin-left: 2px;
}
.pack-hero-count {
font-size: 0.8rem;
color: rgba(255,255,255,0.35);
font-weight: 500;
}
/* ════════════════════════════════════════
BODY
════════════════════════════════════════ */
.pack-body {
display: flex;
flex: 1;
/* height:0 is the key — with flex:1 it still grows to fill space,
but setting height:0 defeats the browser's default min-height:auto
on flex children, which is what was preventing overflow from working */
height: 0;
overflow: hidden;
}
/* ════════════════════════════════════════
LEFT — Pack picker
════════════════════════════════════════ */
.pack-picker {
width: 280px;
flex-shrink: 0;
align-self: stretch;
min-height: 0;
padding: 1rem 0.75rem;
overflow-y: auto;
border-right: 1px solid rgba(255,255,255,0.07);
display: flex;
flex-direction: column;
gap: 0.4rem;
scrollbar-gutter: stable;
box-sizing: border-box;
}
.pack-picker-heading {
font-size: 0.6rem;
font-weight: 700;
letter-spacing: 0.2em;
color: rgba(255,255,255,0.25);
text-transform: uppercase;
padding: 0.25rem 0.5rem 0.6rem;
margin: 0;
flex-shrink: 0;
}
.pack-pick-btn {
position: relative;
width: 100%;
height: 56px;
flex-shrink: 0;
border: 1px solid rgba(255,255,255,0.06);
border-radius: 8px;
overflow: hidden;
cursor: pointer;
background: #0d0f13;
display: flex;
flex-direction: column;
justify-content: center;
padding: 0 0.85rem;
gap: 2px;
text-align: left;
transition:
border-color 0.15s ease,
box-shadow 0.15s ease,
transform 0.1s ease;
}
.pack-pick-btn:hover {
border-color: rgba(255,255,255,0.15);
transform: translateX(2px);
box-shadow: 0 3px 12px rgba(0,0,0,0.4);
}
.pack-pick-btn.active {
border-color: var(--pack-colour, rgba(255,255,255,0.4));
box-shadow:
0 0 0 1px var(--pack-colour, rgba(255,255,255,0.2)),
0 0 14px rgba(255,255,255,0.06),
inset 0 0 20px rgba(255,255,255,0.03);
transform: translateX(3px);
}
.pack-pick-collage {
position: absolute;
inset: 0;
display: flex;
}
.pack-pick-strip {
flex: 1;
background-size: cover;
background-position: center;
clip-path: polygon(12% 0%, 100% 0%, 88% 100%, 0% 100%);
margin-right: -8%;
filter: brightness(0.25) saturate(0.5);
transition: filter 0.2s ease;
}
.pack-pick-btn:hover .pack-pick-strip {
filter: brightness(0.35) saturate(0.65);
}
.pack-pick-btn.active .pack-pick-strip {
filter: brightness(0.3) saturate(0.7);
}
.pack-pick-tint {
position: absolute;
inset: 0;
background: rgba(0,0,0,0.45);
transition: background 0.2s ease;
}
.pack-pick-name {
position: relative;
z-index: 2;
font-size: 0.85rem;
font-weight: 700;
color: #fff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-shadow: 0 1px 6px rgba(0,0,0,0.9);
line-height: 1.2;
}
.pack-pick-count {
position: relative;
z-index: 2;
font-size: 0.65rem;
color: rgba(255,255,255,0.35);
font-weight: 500;
text-shadow: 0 1px 4px rgba(0,0,0,0.8);
}
.pack-pick-btn.active::before {
content: '';
position: absolute;
left: 0;
top: 15%;
height: 70%;
width: 3px;
border-radius: 0 2px 2px 0;
background: var(--pack-colour, #fff);
box-shadow: 0 0 8px var(--pack-colour, rgba(255,255,255,0.5));
z-index: 3;
}
/* ════════════════════════════════════════
RIGHT — Level cards
════════════════════════════════════════ */
.pack-levels {
flex: 1;
min-width: 0;
min-height: 0;
align-self: stretch;
overflow-y: auto;
padding: 1.25rem 1.5rem;
box-sizing: border-box;
}
.pack-level-grid {
display: flex;
flex-direction: column;
gap: 8px;
}
.pack-level-card {
position: relative;
height: 82px;
flex-shrink: 0;
border-radius: 10px;
overflow: clip;
border: 1px solid rgba(255,255,255,0.06);
display: flex;
align-items: center;
cursor: pointer;
transition:
border-color 0.15s ease,
box-shadow 0.15s ease,
transform 0.12s ease;
}
.pack-level-card:hover {
border-color: rgba(255,255,255,0.18);
box-shadow: 0 6px 24px rgba(0,0,0,0.5);
transform: translateY(-2px);
}
.pack-level-card:active {
transform: translateY(0);
}
.pack-level-bg {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
filter: blur(3px) brightness(0.22) saturate(0.6);
transform: scale(1.06);
transition: filter 0.25s ease;
}
.pack-level-card:hover .pack-level-bg {
filter: blur(2px) brightness(0.32) saturate(0.8);
}
.pack-level-tint {
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
rgba(0,0,0,0.15) 0%,
rgba(0,0,0,0.05) 55%,
rgba(0,0,0,0.4) 100%
);
}
.pack-level-rank {
position: relative;
z-index: 2;
flex-shrink: 0;
width: 3.5rem;
text-align: center;
font-size: 0.72rem;
font-weight: 800;
letter-spacing: 0.06em;
color: rgba(255,255,255,0.35);
border-right: 1px solid rgba(255,255,255,0.07);
align-self: stretch;
display: flex;
align-items: center;
justify-content: center;
}
.pack-level-info {
position: relative;
z-index: 2;
flex: 1;
min-width: 0;
padding: 0 0.85rem;
display: flex;
flex-direction: column;
gap: 4px;
}
.pack-level-name {
font-size: 1rem;
font-weight: 700;
color: #fff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-shadow: 0 1px 8px rgba(0,0,0,0.7);
line-height: 1.2;
}
.pack-level-pts {
font-size: 0.72rem;
font-weight: 600;
color: var(--pack-colour, rgba(255,255,255,0.45));
text-shadow: 0 0 12px var(--pack-colour, transparent);
letter-spacing: 0.02em;
}
.pack-level-arrow {
position: relative;
z-index: 2;
font-size: 1.4rem;
color: rgba(255,255,255,0.2);
padding: 0 1rem 0 0.5rem;
flex-shrink: 0;
transition: color 0.15s ease, transform 0.15s ease;
}
.pack-level-card:hover .pack-level-arrow {
color: rgba(255,255,255,0.65);
transform: translateX(3px);
}
.pack-level-card::after {
content: '';
position: absolute;
inset: 0;
background: transparent;
transition: background 0.15s ease;
pointer-events: none;
z-index: 1;
}
.pack-level-card:hover::after {
background: rgba(255,255,255,0.04);
}
/* ── Card transitions ── */
.pack-card-enter-active { transition: opacity 0.25s ease, transform 0.25s ease; }
.pack-card-leave-active { transition: opacity 0.15s ease, transform 0.15s ease; }
.pack-card-enter-from { opacity: 0; transform: translateY(10px); }
.pack-card-leave-to { opacity: 0; transform: translateY(-6px); }
.pack-card-move { transition: transform 0.3s ease; }
/* ── Scrollbars ── */
.pack-picker::-webkit-scrollbar,
.pack-levels::-webkit-scrollbar { width: 5px; }
.pack-picker::-webkit-scrollbar-track,
.pack-levels::-webkit-scrollbar-track { background: transparent; }
.pack-picker::-webkit-scrollbar-thumb,
.pack-levels::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 99px; }
.pack-picker::-webkit-scrollbar-thumb:hover,
.pack-levels::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); }
/* ════════════════════════════════════════
HERO PROGRESS BAR
════════════════════════════════════════ */
.pack-hero-progress-badge {
display: inline-flex;
align-items: center;
gap: 0.4rem;
padding: 0.2rem 0.6rem;
background: rgba(0,0,0,0.35);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 99px;
backdrop-filter: blur(6px);
}
.pack-hero-progress-icon {
font-family: 'Geist Mono', monospace;
font-size: 0.75rem;
font-weight: 700;
color: #fff;
}
.pack-hero-progress-label {
font-size: 0.65rem;
color: rgba(255,255,255,0.45);
font-weight: 500;
}
.pack-hero-progress-track {
margin-top: 0.6rem;
width: min(340px, 90%);
height: 4px;
background: rgba(255,255,255,0.1);
border-radius: 99px;
overflow: hidden;
}
.pack-hero-progress-fill {
height: 100%;
border-radius: 99px;
transition: width 0.7s cubic-bezier(0.22, 1, 0.36, 1);
min-width: 4px;
}
/* ════════════════════════════════════════
SORT TOOLBAR
════════════════════════════════════════ */
.pack-sort-bar {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.6rem 0.25rem 0.85rem;
flex-wrap: wrap;
flex-shrink: 0;
}
.pack-sort-label {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: rgba(255,255,255,0.28);
font-family: 'Geist Mono', monospace;
white-space: nowrap;
}
.pack-sort-tabs {
display: flex;
gap: 0.25rem;
padding: 0.2rem;
background: rgba(255,255,255,0.05);
border-radius: 7px;
}
.pack-sort-tab {
padding: 0.3rem 0.85rem;
border-radius: 5px;
border: none;
background: transparent;
color: rgba(255,255,255,0.35);
font-size: 0.78rem;
font-weight: 600;
cursor: pointer;
transition: background 0.15s ease, color 0.15s ease;
font-family: 'Geist', sans-serif;
}
.pack-sort-tab:hover {
color: rgba(255,255,255,0.65);
}
.pack-sort-tab.active {
background: rgba(255,255,255,0.1);
color: #fff;
box-shadow: 0 1px 4px rgba(0,0,0,0.3);
}
/* Player selector */
.pack-player-select {
display: flex;
align-items: center;
gap: 0.5rem;
margin-left: auto;
}
.pack-player-dropdown {
padding: 0.3rem 0.6rem;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 6px;
color: #fff;
font-size: 0.78rem;
font-family: 'Geist', sans-serif;
cursor: pointer;
outline: none;
transition: border-color 0.15s ease;
max-width: 160px;
}
.pack-player-dropdown:hover,
.pack-player-dropdown:focus {
border-color: rgba(255,255,255,0.25);
}
.pack-player-dropdown option {
background: #1a1d23;
color: #fff;
}
/* ════════════════════════════════════════
LEVEL CARD ADDITIONS
════════════════════════════════════════ */
/* completed state */
.pack-level-card.pack-level-done {
border-color: rgba(255,255,255,0.15);
}
.pack-level-card.pack-level-done .pack-level-bg {
filter: blur(3px) brightness(0.3) saturate(0.8);
}
/* completion tick badge */
.pack-level-tick {
position: absolute;
top: 0.5rem;
left: 0.5rem;
z-index: 3;
width: 20px;
height: 20px;
border-radius: 50%;
background: rgba(75, 232, 138, 0.9);
color: #000;
font-size: 11px;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 10px rgba(75,232,138,0.5);
}
/* bottom row inside level info */
.pack-level-bottom {
display: flex;
align-items: center;
gap: 0.5rem;
min-width: 0;
}
/* contribution bar track */
.pack-contrib-track {
flex: 1;
height: 3px;
background: rgba(255,255,255,0.08);
border-radius: 99px;
overflow: hidden;
min-width: 20px;
max-width: 120px;
}
.pack-contrib-fill {
height: 100%;
border-radius: 99px;
transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1);
opacity: 0.85;
}
.pack-contrib-pct {
font-family: 'Geist Mono', monospace;
font-size: 0.62rem;
font-weight: 600;
color: rgba(255,255,255,0.3);
white-space: nowrap;
flex-shrink: 0;
}
/* ── Responsive ── */
@media (max-width: 640px) {
.pack-picker { width: 220px; }
.pack-hero { height: 160px; }
.pack-hero-name { font-size: 1.3rem; }
.pack-level-card { height: 70px; }
.pack-level-name { font-size: 0.9rem; }
}

572
css/pages/roulette.css Normal file
View File

@@ -0,0 +1,572 @@
/* ============================================================
roulette.css — Revamped Demon Roulette
============================================================ */
@import url('https://fonts.bunny.net/css?family=geist:300,400,500,600,700,800|geist-mono:400,500,700&display=swap');
.page-roulette,
.page-roulette * {
font-family: 'Geist', sans-serif;
box-sizing: border-box;
}
/* ════════════════════════════════════════
SIDEBAR
════════════════════════════════════════ */
.page-roulette .sidebar {
padding: 1.5rem;
display: flex;
flex-direction: column;
gap: 1.75rem;
align-items: stretch;
overflow-y: auto;
}
.page-roulette .sidebar-header {
display: flex;
flex-direction: column;
gap: 0.4rem;
}
.page-roulette .sidebar-title {
font-size: 1.2rem;
font-weight: 800;
margin: 0;
background: linear-gradient(135deg, #fff 55%, rgba(255,213,74,0.8) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.page-roulette .sidebar-credit {
font-size: 0.75rem;
color: rgba(255,255,255,0.35);
line-height: 1.5;
margin: 0;
}
.page-roulette .sidebar-credit a {
color: rgba(255,255,255,0.55);
text-decoration: underline;
transition: color 0.15s;
}
.page-roulette .sidebar-credit a:hover {
color: #ffd54a;
}
/* ── Progress panel ── */
.page-roulette .sidebar-progress {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.85rem 1rem;
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.07);
border-radius: 10px;
}
.page-roulette .sp-row {
display: flex;
justify-content: space-between;
align-items: center;
}
.page-roulette .sp-label {
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
font-family: 'Geist Mono', monospace;
}
.page-roulette .sp-val {
font-size: 0.85rem;
font-weight: 700;
color: rgba(255,255,255,0.75);
font-family: 'Geist Mono', monospace;
}
.page-roulette .sp-pct { color: #4be88a; }
.page-roulette .sp-streak { color: #ff9c4b; }
.page-roulette .sp-track {
height: 5px;
background: rgba(255,255,255,0.08);
border-radius: 99px;
overflow: hidden;
margin: 0.1rem 0;
}
.page-roulette .sp-fill {
height: 100%;
border-radius: 99px;
background: linear-gradient(90deg, #4b9de8, #4be88a);
box-shadow: 0 0 10px rgba(75,232,138,0.4);
transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
/* ── Options form ── */
.page-roulette .options {
display: flex;
flex-direction: column;
gap: 0.75rem;
align-items: flex-start;
}
.page-roulette .options-heading {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgba(255,255,255,0.28);
margin: 0 0 0.15rem;
font-family: 'Geist Mono', monospace;
}
.page-roulette .check {
display: flex;
gap: 0.6rem;
align-items: center;
}
.page-roulette .check input[type="checkbox"] {
width: 15px;
height: 15px;
accent-color: #ffd54a;
cursor: pointer;
}
.page-roulette .check label {
font-size: 0.85rem;
font-weight: 500;
color: rgba(255,255,255,0.75);
cursor: pointer;
display: flex;
align-items: center;
gap: 0.4rem;
}
.page-roulette .check-sub {
font-size: 0.65rem;
color: rgba(255,255,255,0.3);
font-family: 'Geist Mono', monospace;
}
/* ── Save / load ── */
.page-roulette .save {
display: flex;
flex-direction: column;
gap: 0.6rem;
align-items: flex-start;
}
.page-roulette .save .btns {
display: flex;
gap: 0.6rem;
}
/* ════════════════════════════════════════
LEVELS FEED
════════════════════════════════════════ */
.page-roulette .levels-container {
grid-row: 1;
grid-column: 2 / span 2;
overflow-y: auto;
padding-right: 2rem;
/* subtle scroll hint */
box-shadow: inset 0 -24px 20px -20px rgba(0,0,0,0.4);
}
.page-roulette .levels {
display: flex;
flex-direction: column;
padding: 2rem 0;
gap: 0.75rem;
}
/* ── Empty / start prompt ── */
.page-roulette .roulette-start-prompt,
.page-roulette .roulette-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.75rem;
padding: 4rem 2rem;
color: rgba(255,255,255,0.2);
text-align: center;
}
.page-roulette .roulette-start-icon,
.page-roulette .roulette-empty-icon {
font-size: 3rem;
line-height: 1;
margin: 0;
}
.page-roulette .roulette-start-text,
.page-roulette .roulette-empty-text {
font-size: 0.9rem;
font-weight: 500;
color: rgba(255,255,255,0.25);
margin: 0;
}
/* ── Level card (shared base) ── */
.page-roulette .level {
position: relative;
border-radius: 10px;
overflow: hidden;
border: 1px solid rgba(255,255,255,0.06);
display: grid;
grid-template-columns: 11rem 1fr;
grid-auto-rows: auto;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.page-roulette .level:hover {
border-color: rgba(255,255,255,0.13);
box-shadow: 0 4px 20px rgba(0,0,0,0.4);
}
/* blurred background thumbnail */
.page-roulette .level-bg {
position: absolute;
inset: 0;
background-size: cover;
background-position: center;
filter: blur(4px) brightness(0.18) saturate(0.5);
transform: scale(1.06);
transition: filter 0.3s ease;
z-index: 0;
}
.page-roulette .level:hover .level-bg {
filter: blur(3px) brightness(0.25) saturate(0.7);
}
/* tint overlays per state */
.page-roulette .level-tint {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
}
.page-roulette .level-tint-done {
background: linear-gradient(90deg, rgba(0,181,75,0.08) 0%, transparent 60%);
}
.page-roulette .level-tint-current {
background: linear-gradient(90deg, rgba(58,110,232,0.12) 0%, transparent 60%);
}
.page-roulette .level-tint-remaining {
background: linear-gradient(90deg, rgba(213,0,0,0.08) 0%, transparent 60%);
}
/* coloured left edge strip per state */
.page-roulette .level-done::before,
.page-roulette .level-current::before,
.page-roulette .level-remaining::before {
content: '';
position: absolute;
left: 0;
top: 10%;
height: 80%;
width: 3px;
border-radius: 0 2px 2px 0;
z-index: 3;
}
.page-roulette .level-done::before { background: #4be88a; box-shadow: 0 0 10px rgba(75,232,138,0.5); }
.page-roulette .level-current::before { background: #4b9de8; box-shadow: 0 0 10px rgba(75,157,232,0.5); }
.page-roulette .level-remaining::before { background: #e84b4b; box-shadow: 0 0 10px rgba(232,75,75,0.5); }
/* ── Video thumbnail cell ── */
.page-roulette .video {
position: relative;
z-index: 2;
display: block;
overflow: hidden;
height: 100%;
min-height: 80px;
}
.page-roulette .video img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform 0.3s ease, filter 0.3s ease;
}
.page-roulette .level:hover .video img {
transform: scale(1.04);
}
.page-roulette .video-play {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
color: rgba(255,255,255,0);
background: rgba(0,0,0,0);
transition: all 0.2s ease;
}
.page-roulette .level:hover .video-play {
color: rgba(255,255,255,0.9);
background: rgba(0,0,0,0.35);
}
/* ── Meta cell ── */
.page-roulette .meta {
position: relative;
z-index: 2;
padding: 0.85rem 1rem;
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.page-roulette .meta-rank {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
font-family: 'Geist Mono', monospace;
}
.page-roulette .meta-name {
font-size: 1.05rem;
font-weight: 700;
color: #fff;
margin: 0;
line-height: 1.2;
text-shadow: 0 1px 8px rgba(0,0,0,0.6);
}
.page-roulette .meta-id {
font-size: 0.7rem;
color: rgba(255,255,255,0.25);
font-family: 'Geist Mono', monospace;
}
.page-roulette .meta-badge {
display: inline-block;
margin-top: 0.2rem;
font-size: 0.62rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
padding: 0.15rem 0.5rem;
border-radius: 99px;
background: rgba(75,157,232,0.2);
border: 1px solid rgba(75,157,232,0.4);
color: #4b9de8;
width: fit-content;
}
.page-roulette .meta-pct {
font-size: 0.85rem;
font-weight: 700;
font-family: 'Geist Mono', monospace;
margin-top: auto;
}
.page-roulette .meta-pct-done { color: #4be88a; }
.page-roulette .meta-pct-missed { color: #e84b4b; }
/* ── Actions bar (percent input + buttons) ── */
.page-roulette .actions {
position: relative;
z-index: 2;
grid-column: 1 / span 2;
display: flex;
gap: 0.6rem;
align-items: center;
padding: 0.75rem 1rem;
background: rgba(0,0,0,0.35);
border-top: 1px solid rgba(255,255,255,0.06);
backdrop-filter: blur(6px);
}
.page-roulette .pct-input {
flex: 1;
border: 1px solid rgba(255,255,255,0.1);
border-radius: 7px;
padding: 0.55rem 0.85rem;
background: rgba(255,255,255,0.07);
color: #fff;
font-size: 0.9rem;
font-family: 'Geist Mono', monospace;
transition: border-color 0.15s ease, background 0.15s ease;
outline: none;
}
.page-roulette .pct-input:focus {
border-color: rgba(255,255,255,0.3);
background: rgba(255,255,255,0.1);
}
.page-roulette .pct-input::placeholder {
color: rgba(255,255,255,0.25);
}
/* ── Results panel ── */
.page-roulette .results {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
padding: 2.5rem 1.5rem;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.07);
border-radius: 12px;
text-align: center;
}
.page-roulette .results-icon {
font-size: 3rem;
line-height: 1;
}
.page-roulette .results-title {
font-size: 1.8rem;
font-weight: 800;
margin: 0;
background: linear-gradient(135deg, #fff 50%, rgba(255,213,74,0.8) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.page-roulette .results-stats {
display: flex;
gap: 0;
border: 1px solid rgba(255,255,255,0.07);
border-radius: 10px;
overflow: hidden;
background: rgba(255,255,255,0.03);
width: 100%;
max-width: 360px;
}
.page-roulette .rstat {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.25rem;
padding: 0.85rem 0.5rem;
border-right: 1px solid rgba(255,255,255,0.06);
transition: background 0.15s ease;
}
.page-roulette .rstat:last-child { border-right: none; }
.page-roulette .rstat:hover { background: rgba(255,255,255,0.04); }
.page-roulette .rstat-val {
font-size: 1.4rem;
font-weight: 800;
color: #fff;
font-family: 'Geist Mono', monospace;
}
.page-roulette .rstat-key {
font-size: 0.6rem;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
}
/* ════════════════════════════════════════
TOASTS
════════════════════════════════════════ */
.page-roulette .toasts-container {
overflow-y: auto;
grid-column: 2 / span 2;
grid-row: 1;
align-self: start;
margin-block: 2rem;
margin-right: 2rem;
pointer-events: none;
}
.page-roulette .toasts {
display: flex;
flex-direction: column;
gap: 0.6rem;
}
.page-roulette .toast {
display: flex;
align-items: center;
gap: 0.6rem;
background: rgba(213,0,0,0.9);
backdrop-filter: blur(8px);
color: #fff;
padding: 0.75rem 1rem;
border-radius: 8px;
border: 1px solid rgba(255,100,100,0.3);
box-shadow: 0 4px 16px rgba(213,0,0,0.4);
font-size: 0.85rem;
font-weight: 500;
pointer-events: all;
}
.page-roulette .toast-icon {
font-size: 1rem;
flex-shrink: 0;
}
.page-roulette .toast p { margin: 0; }
/* Toast slide-in transition */
.toast-enter-active {
transition: opacity 0.25s ease, transform 0.25s ease;
}
.toast-leave-active {
transition: opacity 0.2s ease, transform 0.2s ease;
}
.toast-enter-from {
opacity: 0;
transform: translateX(20px);
}
.toast-leave-to {
opacity: 0;
transform: translateX(20px);
}
/* ════════════════════════════════════════
RESPONSIVE
════════════════════════════════════════ */
@media screen and (min-width: 1366px) {
.page-roulette .levels-container {
grid-column: 2;
padding-right: 0;
}
.page-roulette .toasts-container {
grid-column: 3;
margin: 0;
padding-right: 2rem;
padding-block: 2rem;
align-self: stretch;
}
}
@media screen and (max-width: 768px) {
.page-roulette .level {
grid-template-columns: 8rem 1fr;
}
.page-roulette .meta-name {
font-size: 0.9rem;
}
}

72
css/reset.css Normal file
View File

@@ -0,0 +1,72 @@
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body,
ol,
ul {
margin: 0;
padding: 0;
border: 0;
font: inherit;
}
ol,
ul {
list-style: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td {
padding: 0;
}
blockquote,
q {
quotes: none;
}
blockquote::before,
blockquote::after,
q::before,
q::after {
content: none;
}
a {
color: inherit;
text-decoration: inherit;
}
img {
display: block;
}
input,
button {
color: inherit;
}
h1,
h2,
h3,
h4,
h5,
h6,
p,
dl,
dd {
margin: 0;
font-weight: normal;
}
iframe {
border: none;
}

459
css/typography.css Normal file
View File

@@ -0,0 +1,459 @@
h1,
.type-h1,
.type-headline-lg {
font-family: "Lexend Deca", sans-serif;
font-size: 51.4285714286px;
line-height: 52px;
font-weight: 700;
letter-spacing: -2px;
-webkit-font-smoothing: subpixel-antialiased;
}
h1::before,
.type-h1::before,
.type-headline-lg::before {
content: "";
margin-bottom: -0.1805555556em;
display: table;
}
h1::after,
.type-h1::after,
.type-headline-lg::after {
content: "";
margin-top: -0.1305555556em;
display: table;
}
h2,
.type-h2,
.type-headline-md {
font-family: "Lexend Deca", sans-serif;
font-size: 34.2857142857px;
line-height: 40px;
font-weight: 700;
letter-spacing: -1px;
-webkit-font-smoothing: subpixel-antialiased;
}
h2::before,
.type-h2::before,
.type-headline-md::before {
content: "";
margin-bottom: -0.2583333333em;
display: table;
}
h2::after,
.type-h2::after,
.type-headline-md::after {
content: "";
margin-top: -0.2083333333em;
display: table;
}
h3,
.type-h3,
.type-headline-sm {
font-family: "Lexend Deca", sans-serif;
font-size: 22.8571428571px;
line-height: 28px;
font-weight: 700;
-webkit-font-smoothing: subpixel-antialiased;
}
h3::before,
.type-h3::before,
.type-headline-sm::before {
content: "";
margin-bottom: -0.2875em;
display: table;
}
h3::after,
.type-h3::after,
.type-headline-sm::after {
content: "";
margin-top: -0.2375em;
display: table;
}
h4,
.type-h4,
.type-title-lg {
font-family: "Lexend Deca", sans-serif;
font-size: 22.8571428571px;
line-height: 28px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
h4::before,
.type-h4::before,
.type-title-lg::before {
content: "";
margin-bottom: -0.2875em;
display: table;
}
h4::after,
.type-h4::after,
.type-title-lg::after {
content: "";
margin-top: -0.2375em;
display: table;
}
h5,
.type-h5,
.type-title-md {
font-family: "Lexend Deca", sans-serif;
font-size: 20px;
line-height: 26px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
h5::before,
.type-h5::before,
.type-title-md::before {
content: "";
margin-bottom: -0.325em;
display: table;
}
h5::after,
.type-h5::after,
.type-title-md::after {
content: "";
margin-top: -0.275em;
display: table;
}
h6,
dt,
.type-h6,
.type-title-sm {
font-family: "Lexend Deca", sans-serif;
font-size: 17.1428571429px;
line-height: 24px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
h6::before,
dt::before,
.type-h6::before,
.type-title-sm::before {
content: "";
margin-bottom: -0.375em;
display: table;
}
h6::after,
dt::after,
.type-h6::after,
.type-title-sm::after {
content: "";
margin-top: -0.325em;
display: table;
}
label,
input[type="text"],
input[type="number"],
.type-label-lg {
font-family: "Lexend Deca", sans-serif;
font-size: 17.1428571429px;
line-height: 20px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.type-label-lg::before {
content: "";
margin-bottom: -0.2583333333em;
display: table;
}
.type-label-lg::after {
content: "";
margin-top: -0.2083333333em;
display: table;
}
.type-label-md {
font-family: "Lexend Deca", sans-serif;
font-size: 14.2857142857px;
line-height: 18px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.type-label-md::before {
content: "";
margin-bottom: -0.305em;
display: table;
}
.type-label-md::after {
content: "";
margin-top: -0.255em;
display: table;
}
.type-label-sm {
font-family: "Lexend Deca", sans-serif;
font-size: 11.4285714286px;
line-height: 12px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.type-label-sm::before {
content: "";
margin-bottom: -0.2em;
display: table;
}
.type-label-sm::after {
content: "";
margin-top: -0.15em;
display: table;
}
p,
.type-body {
font-family: "Lexend Deca", sans-serif;
font-size: 17.1428571429px;
line-height: 28px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
p::before,
.type-body::before {
content: "";
margin-bottom: -0.4916666667em;
display: table;
}
p::after,
.type-body::after {
content: "";
margin-top: -0.4416666667em;
display: table;
}
/* Shitty Variants */
.shitty h1,
.shitty .type-h1,
.shitty .type-headline-lg {
font-family: "Times New Roman", serif;
font-size: 51.4285714286px;
line-height: 52px;
font-weight: 700;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h1::before,
.shitty .type-h1::before,
.shitty .type-headline-lg::before {
content: "";
margin-bottom: -0.1805555556em;
display: table;
}
.shitty h1::after,
.shitty .type-h1::after,
.shitty .type-headline-lg::after {
content: "";
margin-top: -0.1305555556em;
display: table;
}
.shitty h2,
.shitty .type-h2,
.shitty .type-headline-md {
font-family: "Times New Roman", serif;
font-size: 34.2857142857px;
line-height: 40px;
font-weight: 700;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h2::before,
.shitty .type-h2::before,
.shitty .type-headline-md::before {
content: "";
margin-bottom: -0.2583333333em;
display: table;
}
.shitty h2::after,
.shitty .type-h2::after,
.shitty .type-headline-md::after {
content: "";
margin-top: -0.2083333333em;
display: table;
}
.shitty h3,
.shitty .type-h3,
.shitty .type-headline-sm {
font-family: "Verdana", sans-serif;
font-size: 22.8571428571px;
line-height: 28px;
font-weight: 700;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h3::before,
.shitty .type-h3::before,
.shitty .type-headline-sm::before {
content: "";
margin-bottom: -0.2875em;
display: table;
}
.shitty h3::after,
.shitty .type-h3::after,
.shitty .type-headline-sm::after {
content: "";
margin-top: -0.2375em;
display: table;
}
.shitty h4,
.shitty .type-h4,
.shitty .type-title-lg {
font-family: "Verdana", sans-serif;
font-size: 22.8571428571px;
line-height: 28px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h4::before,
.shitty .type-h4::before,
.shitty .type-title-lg::before {
content: "";
margin-bottom: -0.2875em;
display: table;
}
.shitty h4::after,
.shitty .type-h4::after,
.shitty .type-title-lg::after {
content: "";
margin-top: -0.2375em;
display: table;
}
.shitty h5,
.shitty .type-h5,
.shitty .type-title-md {
font-family: "Verdana", sans-serif;
font-size: 20px;
line-height: 26px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h5::before,
.shitty .type-h5::before,
.shitty .type-title-md::before {
content: "";
margin-bottom: -0.325em;
display: table;
}
.shitty h5::after,
.shitty .type-h5::after,
.shitty .type-title-md::after {
content: "";
margin-top: -0.275em;
display: table;
}
.shitty h6,
.shitty dt,
.shitty .type-h6,
.shitty .type-title-sm {
font-family: "Verdana", sans-serif;
font-size: 17.1428571429px;
line-height: 24px;
font-weight: 700;
text-transform: uppercase;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty h6::before,
.shitty dt::before,
.shitty .type-h6::before,
.shitty .type-title-sm::before {
content: "";
margin-bottom: -0.375em;
display: table;
}
.shitty h6::after,
.shitty dt::after,
.shitty .type-h6::after,
.shitty .type-title-sm::after {
content: "";
margin-top: -0.325em;
display: table;
}
.shitty label,
.shitty input[type="text"],
.shitty input[type="number"],
.shitty .type-label-lg {
font-family: "Comic Sans MS", "Comic Sans", sans-serif;
font-size: 17.1428571429px;
line-height: 20px;
font-weight: bold;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty .type-label-lg::before {
content: "";
margin-bottom: -0.2583333333em;
display: table;
}
.shitty .type-label-lg::after {
content: "";
margin-top: -0.2083333333em;
display: table;
}
.shitty .type-label-md {
font-family: "Verdana", sans-serif;
font-size: 14.2857142857px;
line-height: 18px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty .type-label-md::before {
content: "";
margin-bottom: -0.305em;
display: table;
}
.shitty .type-label-md::after {
content: "";
margin-top: -0.255em;
display: table;
}
.shitty .type-label-sm {
font-family: "Verdana", sans-serif;
font-size: 11.4285714286px;
line-height: 12px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty .type-label-sm::before {
content: "";
margin-bottom: -0.2em;
display: table;
}
.shitty .type-label-sm::after {
content: "";
margin-top: -0.15em;
display: table;
}
.shitty p,
.shitty .type-body {
font-family: "Verdana", sans-serif;
font-size: 17.1428571429px;
line-height: 28px;
font-weight: 500;
-webkit-font-smoothing: subpixel-antialiased;
}
.shitty p::before,
.shitty .type-body::before {
content: "";
margin-bottom: -0.4916666667em;
display: table;
}
.shitty p::after,
.shitty .type-body::after {
content: "";
margin-top: -0.4416666667em;
display: table;
}