Files
Luncher/client/src/themes/umamusume.scss
T
batmanisko e281615cc3
CI / Generate TypeScript types (push) Successful in 11s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 29s
CI / Build client (push) Successful in 39s
CI / Playwright E2E tests (push) Successful in 1m52s
CI / Build and push Docker image (push) Successful in 51s
CI / Notify (push) Successful in 2s
feat: spin the wheel, objednavani scrape menu, historie cen
2026-09-23 15:41:15 +02:00

372 lines
10 KiB
SCSS

// ============================================
// STYL "UMAMUSUME" (volitelný, výchozí je jednoduchý styl)
// Inspirováno Umamusume: Pretty Derby — trávník dostihové dráhy, růžové
// a nebesky modré akcenty, zlaté lemy, zaoblené tučné písmo a „tlačítka z her".
// Aktivní, pokud má <html> atribut data-luncher-theme="umamusume".
// Jednoduchý styl (data-luncher-theme="simple") zůstává beze změny v App.scss.
// ============================================
$uma: 'html[data-luncher-theme="umamusume"]';
#{$uma} {
--uma-font: 'M PLUS Rounded 1c', 'Nunito', 'Inter', -apple-system, sans-serif;
--uma-turf: #5cc23d;
--uma-turf-deep: #2e9a3a;
--uma-turf-shadow: #1f7a2c;
--uma-pink: #ff6fa3;
--uma-pink-deep: #e84d86;
--uma-sky: #43b8f0;
--uma-gold: #ffc531;
--uma-card-border: #c6ebb2;
--uma-stripe: rgb(92 194 61 / 0.06);
--luncher-primary: var(--uma-turf-deep);
--luncher-primary-hover: #268a31;
--luncher-primary-light: #e7f8dc;
--luncher-bg: #f4fbef;
--luncher-bg-card: #ffffff;
--luncher-bg-hover: #eef8e7;
--luncher-text: #1d3322;
--luncher-text-secondary: #4a6450;
--luncher-text-muted: #8aa290;
--luncher-border: #d7ecca;
--luncher-border-light: #e6f4dc;
--luncher-navbar-bg: var(--uma-turf-deep);
--luncher-navbar-text: #ffffff;
--luncher-action-icon: var(--uma-turf-deep);
--luncher-buyer-icon: #f08c00;
--luncher-success: var(--uma-turf-deep);
--luncher-warning: #f08c00;
--luncher-danger: #e8436a;
--luncher-radius-sm: 10px;
--luncher-radius: 14px;
--luncher-radius-lg: 18px;
--luncher-radius-xl: 22px;
--luncher-shadow: 0 4px 0 rgb(46 154 58 / 0.12), 0 8px 18px -8px rgb(29 51 34 / 0.18);
--luncher-shadow-lg: 0 6px 0 rgb(46 154 58 / 0.14), 0 14px 28px -10px rgb(29 51 34 / 0.25);
&[data-bs-theme="dark"] {
// Noční dostih pod reflektory
--uma-turf: #58c93a;
--uma-turf-deep: #3cae3f;
--uma-turf-shadow: #1c5e25;
--uma-card-border: #2c3a66;
--uma-stripe: rgb(255 255 255 / 0.025);
--luncher-primary: #6fdc4a;
--luncher-primary-hover: #8ae86a;
--luncher-primary-light: #1d3a24;
--luncher-bg: #10172b;
--luncher-bg-card: #19223d;
--luncher-bg-hover: #222d4f;
--luncher-text: #f3f6ff;
--luncher-text-secondary: #b8c2e0;
--luncher-text-muted: #7d89ad;
--luncher-border: #2c3a66;
--luncher-border-light: #232e52;
--luncher-navbar-bg: #1b6b2c;
--luncher-action-icon: #6fdc4a;
--luncher-buyer-icon: var(--uma-gold);
--luncher-success: #6fdc4a;
--luncher-warning: var(--uma-gold);
--luncher-danger: #ff6f93;
--luncher-shadow: 0 4px 0 rgb(0 0 0 / 0.35), 0 10px 20px -8px rgb(0 0 0 / 0.5);
--luncher-shadow-lg: 0 6px 0 rgb(0 0 0 / 0.4), 0 16px 30px -10px rgb(0 0 0 / 0.6);
}
body {
font-family: var(--uma-font);
background-color: var(--luncher-bg);
background-image: repeating-linear-gradient(135deg, var(--uma-stripe) 0 18px, transparent 18px 36px);
background-attachment: fixed;
}
.app-container {
background: transparent;
}
h1, h2, h3, h4, .navbar-brand, .btn {
font-family: var(--uma-font);
}
// ---------- Navbar: zelený pruh se šikmými proužky a zlatým lemem ----------
.navbar {
background:
repeating-linear-gradient(115deg, rgb(255 255 255 / 0.10) 0 14px, transparent 14px 28px),
linear-gradient(90deg, var(--uma-turf-deep), var(--uma-turf)) !important;
border-bottom: 4px solid var(--uma-gold);
box-shadow: 0 3px 0 rgb(0 0 0 / 0.08);
.navbar-brand {
font-weight: 800;
letter-spacing: 0.5px;
text-shadow: 0 2px 0 var(--uma-turf-shadow), 0 0 12px rgb(255 255 255 / 0.25);
&::after {
content: '';
display: inline-block;
width: 10px;
height: 10px;
margin-left: 6px;
border-radius: 50%;
background: var(--uma-pink);
box-shadow: 0 0 0 3px rgb(255 255 255 / 0.9);
vertical-align: super;
}
}
.dropdown-menu {
border: 2px solid var(--uma-card-border);
}
}
// ---------- Titulek dne: šikmá stuha jako název dostihu ----------
.day-navigator .title {
position: relative;
display: inline-block;
padding: 6px 28px;
font-weight: 800;
font-size: 1.7rem;
color: #fff !important;
background: linear-gradient(90deg, var(--uma-pink-deep), var(--uma-pink));
clip-path: polygon(14px 0, 100% 0, calc(100% - 14px) 100%, 0 100%);
text-shadow: 0 2px 0 rgb(0 0 0 / 0.15);
&.text-muted {
background: linear-gradient(90deg, #8aa290, #a9bfae);
}
}
// ---------- Karty podniků ----------
.restaurant-card {
border: 3px solid var(--uma-card-border);
border-radius: var(--luncher-radius-lg);
&:hover {
transform: translateY(-3px);
border-color: var(--uma-turf);
}
.restaurant-header {
position: relative;
background:
repeating-linear-gradient(115deg, rgb(255 255 255 / 0.12) 0 10px, transparent 10px 20px),
linear-gradient(90deg, var(--uma-turf-deep), var(--uma-turf));
border-bottom: 3px solid var(--uma-gold);
&:hover {
background:
repeating-linear-gradient(115deg, rgb(255 255 255 / 0.12) 0 10px, transparent 10px 20px),
linear-gradient(90deg, var(--uma-pink-deep), var(--uma-pink));
}
h3 {
font-weight: 800;
text-shadow: 0 2px 0 rgb(0 0 0 / 0.18);
}
small {
color: rgb(255 255 255 / 0.85);
}
}
}
.food-table tbody tr:hover > td {
background: #fff0f6;
}
&[data-bs-theme="dark"] .food-table tbody tr:hover > td {
background: #2a2344;
}
.food-price {
color: var(--uma-pink-deep);
font-weight: 800;
}
&[data-bs-theme="dark"] .food-price {
color: var(--uma-pink);
}
// ---------- Panely a tabulka voleb ----------
.choice-section,
.choices-table,
.pizza-section,
.no-votes {
border: 3px solid var(--uma-card-border);
border-radius: var(--luncher-radius-lg);
box-shadow: var(--luncher-shadow);
}
// <table> s border-collapse: collapse ignoruje border-radius — kulaté rohy jen se „separate"
.choices-table {
border-collapse: separate;
border-spacing: 0;
}
.choices-table > tbody > tr > td:first-child {
background: linear-gradient(90deg, #ffe3ee, #fff3f8);
color: var(--uma-pink-deep);
font-weight: 800;
border-right: 3px solid var(--uma-card-border);
}
&[data-bs-theme="dark"] .choices-table > tbody > tr > td:first-child {
background: linear-gradient(90deg, #3b2446, #2a2140);
color: var(--uma-pink);
}
// Bootstrap karty (skupinové objednávky apod.) a seznamy — stejné zaoblení a lem jako ostatní panely
.card {
border: 3px solid var(--uma-card-border);
border-radius: var(--luncher-radius-lg);
box-shadow: var(--luncher-shadow);
overflow: hidden;
background: var(--luncher-bg-card);
// Rozbalovací výběr z nabídky nesmí karta oříznout
&:has(.select-search-container) {
overflow: visible;
}
> .card-header {
background: var(--luncher-primary-light);
border-bottom: 3px solid var(--uma-card-border);
&:first-child {
border-radius: calc(var(--luncher-radius-lg) - 3px) calc(var(--luncher-radius-lg) - 3px) 0 0;
}
}
// Průhledná tabulka — rohy pak zaobluje karta sama (i když nesmí ořezávat obsah)
.table {
--bs-table-bg: transparent;
margin-bottom: 0;
// Spodní linka posledního řádku by přečnívala přes zaoblené rohy
> :last-child > tr:last-child > * {
border-bottom-width: 0;
}
}
}
.list-group {
border-radius: var(--luncher-radius);
overflow: hidden;
border: 2px solid var(--uma-card-border);
> .list-group-item {
border-left: none;
border-right: none;
&:first-child {
border-top: none;
}
&:last-child {
border-bottom: none;
}
}
}
.form-select, .form-control,
input[type="text"], input[type="email"], input[type="password"] {
border-radius: 999px;
border-width: 2px;
}
// ---------- Tlačítka „ze hry": pilulka s vystouplým spodním okrajem ----------
.btn {
border-radius: 999px;
font-weight: 800;
letter-spacing: 0.2px;
transition: transform 0.08s ease, box-shadow 0.08s ease, background 0.2s ease;
&:active {
transform: translateY(3px) !important;
box-shadow: 0 1px 0 var(--uma-btn-shadow, transparent) !important;
}
}
.btn-primary {
--uma-btn-shadow: var(--uma-turf-shadow);
background: linear-gradient(180deg, #7ad85a, var(--uma-turf-deep));
box-shadow: 0 4px 0 var(--uma-turf-shadow);
text-shadow: 0 1px 0 rgb(0 0 0 / 0.2);
&:hover {
background: linear-gradient(180deg, #8be26b, #35a940);
}
&:disabled {
background: #b9cbbd;
box-shadow: 0 4px 0 #97aa9b;
}
}
.btn-outline-primary {
--uma-btn-shadow: var(--uma-card-border);
background: var(--luncher-bg-card);
border: 2px solid var(--uma-turf);
color: var(--luncher-primary);
box-shadow: 0 4px 0 var(--uma-card-border);
&:hover {
background: var(--luncher-primary-light);
color: var(--luncher-primary);
}
}
.btn-secondary {
--uma-btn-shadow: #c9d3cb;
background: var(--luncher-bg-card);
border: 2px solid var(--luncher-border);
box-shadow: 0 4px 0 var(--luncher-border);
}
.btn-danger {
--uma-btn-shadow: #b3264b;
background: linear-gradient(180deg, #ff7f9d, var(--luncher-danger));
box-shadow: 0 4px 0 #b3264b;
}
.action-icon:hover {
background: #ffe3ee;
color: var(--uma-pink-deep);
}
&[data-bs-theme="dark"] .action-icon:hover {
background: #3b2446;
color: var(--uma-pink);
}
// ---------- Modaly ----------
.modal-content {
border: 3px solid var(--uma-card-border);
border-radius: var(--luncher-radius-xl);
overflow: hidden;
}
.modal-header {
background:
repeating-linear-gradient(115deg, rgb(255 255 255 / 0.12) 0 12px, transparent 12px 24px),
linear-gradient(90deg, var(--uma-turf-deep), var(--uma-turf));
border-bottom: 3px solid var(--uma-gold);
.modal-title, .modal-title h2 {
color: #fff;
font-weight: 800;
text-shadow: 0 2px 0 rgb(0 0 0 / 0.18);
}
.btn-close {
filter: invert(1) grayscale(1) brightness(2);
}
}
.footer {
border-top: 4px solid var(--uma-gold);
}
}