This commit is contained in:
Mateusz Gruszczyński
2026-04-01 06:39:18 +02:00
parent 2b9a305db7
commit 2be058f3e5
22 changed files with 6070 additions and 1 deletions

View File

@@ -0,0 +1,52 @@
/* =========================================================
Variables (single source of truth)
========================================================= */
:root {
/* brand / info */
--primary: #184076;
--primary-border: #153866;
--primary-text: #e6f0ff;
--info: var(--primary);
--info-border: var(--primary-border);
--info-text: var(--primary-text);
/* success */
--success: #1c6930;
--success-border: #165024;
--success-text: #eaffea;
/* warning */
--warning: #665c1e;
--warning-border: #4d4415;
--warning-text: #fffbe5;
/* danger */
--danger: #6e1a1e;
--danger-border: #531417;
--danger-text: #ffeaea;
/* neutrals / dark */
--dark-900: #181a1b;
--dark-800: #1c1f22;
--dark-750: #1f2225;
--dark-700: #212529;
--dark-650: #23272a;
--dark-600: #2a2d31;
--dark-550: #2b2f33;
--dark-500: #2c2f33;
--dark-480: #2c3034;
--dark-470: #2a2d31;
--dark-450: #3a3f44;
--dark-400: #343a40;
--dark-350: #3d4248;
--dark-300: #495057;
--text-strong: #f8f9fa;
--text: #e2e3e5;
--text-dim: #e1e1e1;
--muted: #6c757d;
/* defaults */
--progress-default: #3d7bd6;
}

View File

@@ -0,0 +1,46 @@
/* =========================================================
Utilities & Sizes
========================================================= */
.large-checkbox {
width: 1.5em;
height: 1.5em;
}
.clickable-item {
cursor: pointer;
}
.progress-thin {
height: 12px;
}
.item-not-checked {
background-color: var(--dark-500) !important;
color: #fff !important;
}
#empty-placeholder {
font-style: italic;
pointer-events: none;
}
.fade-out {
opacity: 0;
transition: opacity 0.5s ease;
}
@media (pointer: fine) {
.only-mobile {
display: none !important;
}
}
/* Bootstrap bg overrides via variables */
.bg-success {
background-color: var(--success) !important;
}
.bg-warning {
background-color: var(--warning) !important;
}

View File

@@ -0,0 +1,84 @@
/* =========================================================
Buttons
========================================================= */
/* Primary */
.btn-primary {
background-color: var(--primary) !important;
border-color: var(--primary-border) !important;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background-color: #13315f !important;
border-color: #10284f !important;
}
/* Success */
.btn-success {
background-color: var(--success) !important;
border-color: var(--success-border) !important;
color: #fff !important;
}
.btn-success:hover,
.btn-success:focus,
.btn-success:active {
background-color: #155627 !important;
border-color: #124521 !important;
color: #fff !important;
}
/* Warning */
.btn-warning {
background-color: var(--warning) !important;
border-color: var(--warning-border) !important;
color: var(--warning-text) !important;
}
.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active {
background-color: #5c4c17 !important;
border-color: #3e3610 !important;
color: var(--warning-text) !important;
}
/* Outline */
.btn-outline-success {
color: var(--success) !important;
border-color: var(--success) !important;
}
.btn-outline-success:hover,
.btn-outline-success:focus,
.btn-outline-success:active {
background-color: var(--success) !important;
border-color: var(--success-border) !important;
color: #fff !important;
}
.btn-outline-warning {
color: #d9c97a !important;
border-color: var(--warning) !important;
}
.btn-outline-warning:hover,
.btn-outline-warning:focus,
.btn-outline-warning:active {
background-color: var(--warning) !important;
border-color: var(--warning-border) !important;
color: var(--warning-text) !important;
}
/* File input button */
input[type="file"]::file-selector-button {
background-color: #1b4a29;
color: #f0f0f0;
border: none;
padding: .5em 1em;
border-radius: 4px;
font-weight: bold;
cursor: pointer;
transition: background .2s;
}

View File

@@ -0,0 +1,139 @@
/* =========================================================
Forms
========================================================= */
.form-select,
.form-control,
textarea.form-control {
background-color: var(--dark-700) !important;
color: var(--text-strong) !important;
border: 1px solid var(--dark-300) !important;
}
.form-select:focus,
.form-control:focus,
textarea.form-control:focus {
background-color: var(--dark-800) !important;
border-color: var(--primary) !important;
color: #fff !important;
box-shadow: 0 0 0 .25rem rgba(24, 64, 118, .35) !important;
}
.form-control:disabled,
textarea.form-control:disabled {
background-color: var(--dark-550) !important;
color: var(--muted) !important;
cursor: not-allowed;
}
/* Switch */
.form-switch .form-check-input {
background-color: var(--dark-400) !important;
border-color: var(--dark-300) !important;
}
.form-switch .form-check-input:checked {
background-color: var(--primary) !important;
border-color: var(--primary-border) !important;
}
/* Placeholders */
.form-control::placeholder,
.bg-dark .form-control::placeholder {
color: #aaa !important;
opacity: 1 !important;
}
/* Paired corners (utility) */
#tempToggle {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.create-list-input-group > input.form-control {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
/* XXL custom checkbox */
input[type="checkbox"].large-checkbox {
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
width: 1.5em;
height: 1.5em;
margin: 0;
padding: 0;
outline: none;
background: none;
cursor: pointer;
position: relative;
vertical-align: middle;
}
input[type="checkbox"].large-checkbox::before {
content: '✗';
color: #dc3545;
font-size: 1.6em;
font-weight: 700;
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
transition: color .2s;
}
input[type="checkbox"].large-checkbox:checked::before {
content: '✓';
color: #fff;
}
input[type="checkbox"].large-checkbox:disabled::before {
opacity: .5;
cursor: not-allowed;
}
input[type="checkbox"].large-checkbox:disabled {
cursor: not-allowed;
}
/* Tom-Select / TS */
.tom-dark .ts-control {
background-color: var(--dark-700) !important;
color: #fff !important;
border: 1px solid var(--dark-300) !important;
border-radius: .375rem;
min-height: 38px;
padding: .25rem .5rem;
box-sizing: border-box;
}
.tom-dark .ts-control .item {
background-color: var(--dark-400) !important;
color: #fff !important;
border-radius: .25rem;
padding: 2px 8px;
margin-right: 4px;
}
.ts-dropdown {
background-color: var(--dark-700) !important;
color: #fff !important;
border: 1px solid var(--dark-300);
border-radius: .375rem;
z-index: 9999 !important;
max-height: 300px;
overflow-y: auto;
}
.ts-dropdown .active {
background-color: var(--dark-300) !important;
color: #fff !important;
}
td select.tom-dark {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}

View File

@@ -0,0 +1,82 @@
/* =========================================================
Alerts, Badges, Background helpers
========================================================= */
/* Alerts */
.alert-success {
background-color: #225d36 !important;
color: var(--success-text) !important;
border-color: #174428 !important;
}
.alert-danger {
background-color: #7a1f23 !important;
color: var(--danger-text) !important;
border-color: #531417 !important;
}
.alert-info {
background-color: var(--primary) !important;
color: var(--primary-text) !important;
border-color: var(--primary-border) !important;
}
.alert-warning {
background-color: var(--warning) !important;
color: var(--warning-text) !important;
border-color: var(--warning-border) !important;
}
.alert-light {
background-color: #3a3f44 !important;
color: var(--text-strong) !important;
border-color: var(--dark-480) !important;
}
/* Badges */
.badge.bg-success,
.badge.text-bg-success {
background-color: #225d36 !important;
color: var(--success-text) !important;
}
.badge.bg-danger,
.badge.text-bg-danger {
background-color: #7a1f23 !important;
color: var(--danger-text) !important;
}
.badge.bg-info,
.badge.text-bg-info {
background-color: #1d3a4d !important;
color: #eaf6ff !important;
}
.badge.bg-warning,
.badge.text-bg-warning {
background-color: var(--warning) !important;
color: var(--warning-text) !important;
}
.badge.bg-secondary,
.badge.text-bg-secondary {
background-color: var(--dark-400) !important;
color: #e2e3e5 !important;
}
.badge.bg-primary,
.badge.text-bg-primary {
background-color: var(--primary) !important;
color: var(--primary-text) !important;
}
.badge.bg-light,
.badge.text-bg-light {
background-color: var(--dark-350) !important;
color: #f1f3f5 !important;
}
.badge.bg-dark,
.badge.text-bg-dark {
background-color: var(--dark-900) !important;
color: var(--text-strong) !important;
}

View File

@@ -0,0 +1,56 @@
/* =========================================================
Progress
========================================================= */
.progress-dark {
background-color: var(--dark-700) !important;
border-radius: 20px !important;
overflow: hidden;
}
.progress {
background-color: #2a2d31 !important;
border-radius: 20px !important;
}
.progress-bar {
border-radius: 0 !important;
transition: width .4s ease, background-color .4s ease;
background-color: var(--progress-default) !important;
}
.progress-bar:first-child {
border-top-left-radius: 20px !important;
border-bottom-left-radius: 20px !important;
}
.progress-bar:last-child {
border-top-right-radius: 20px !important;
border-bottom-right-radius: 20px !important;
}
.progress-bar.bg-success {
background-color: var(--success) !important;
}
.progress-bar.bg-danger {
background-color: var(--danger) !important;
}
.progress-bar.bg-warning {
background-color: var(--warning) !important;
color: #fff !important;
}
.progress-bar.bg-info {
background-color: #16425a !important;
}
/* Label (parent must be position-relative) */
.progress-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
pointer-events: none;
white-space: nowrap;
}

View File

@@ -0,0 +1,52 @@
/* =========================================================
Cards & Tables
========================================================= */
.card {
background-color: var(--dark-500) !important;
border: 1px solid var(--dark-450) !important;
color: var(--text) !important;
}
.card-header,
.card-footer {
background-color: var(--dark-650) !important;
border-color: var(--dark-450) !important;
color: #f1f3f5 !important;
}
.card .table {
border-radius: 0 !important;
overflow: hidden;
margin-bottom: 0;
}
.table-responsive {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.table-responsive table {
min-width: 1000px;
}
.table-dark.table-striped tbody tr:nth-of-type(odd) {
background-color: rgba(255, 255, 255, .025);
}
.table-dark tbody tr:hover {
background-color: rgba(255, 255, 255, .04);
}
.table-dark thead th {
background-color: var(--dark-800);
color: var(--text-dim);
font-weight: 500;
border-bottom: 1px solid var(--dark-450);
}
.table-dark td,
.table-dark th {
padding: .6rem .75rem;
vertical-align: middle;
border-top: 1px solid var(--dark-450);
}

View File

@@ -0,0 +1,34 @@
/* =========================================================
Navs & Pagination
========================================================= */
.nav-tabs .nav-link.active,
.nav-tabs .nav-item.show .nav-link {
background-color: var(--dark-500) !important;
color: var(--text-strong) !important;
border-color: var(--dark-450) var(--dark-450) var(--dark-500) !important;
}
.page-link {
color: #e0e0e0 !important;
background-color: var(--dark-750) !important;
border: 1px solid var(--dark-450) !important;
}
.page-link:hover,
.page-link:focus {
color: #fff !important;
background-color: var(--dark-400) !important;
border-color: var(--dark-300) !important;
}
.page-item.active .page-link {
color: #fff !important;
background-color: var(--primary) !important;
border-color: var(--primary-border) !important;
}
.page-item.disabled .page-link {
color: var(--muted) !important;
background-color: var(--dark-550) !important;
border-color: var(--dark-450) !important;
}

View File

@@ -0,0 +1,49 @@
/* =========================================================
Lists & Misc UI
========================================================= */
.list-group-item {
display: flex;
align-items: center;
justify-content: space-between;
}
/* Zachowaj ostre krawędzie tylko dla list flush (np. w panelach edycji) */
.list-group-flush > .list-group-item:first-child,
.list-group-flush > .list-group-item:last-child {
border-radius: 0 !important;
}
#items li.hide-purchased {
display: none !important;
}
#mass-add-list li {
transition: background .2s;
}
#mass-add-list li.active {
background: #198754 !important;
color: #fff !important;
border: 1px solid #000 !important;
}
.quantity-input {
width: 60px;
background: var(--dark-400);
color: #fff;
border: 1px solid var(--dark-300);
border-radius: 4px;
text-align: center;
}
.add-btn {
margin-left: 10px;
}
.quantity-controls {
min-width: 120px;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 4px;
}

View File

@@ -0,0 +1,92 @@
/* =========================================================
Toasts & Info Bar
========================================================= */
.toast {
animation: fadeInUp .5s ease;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Base toast when not using text-bg-* */
.toast:not([class*="text-bg-"]) {
background-color: var(--dark-500) !important;
color: #f1f1f1 !important;
border: 1px solid var(--dark-450) !important;
animation: fadeInUp .5s ease;
}
.toast .toast-body {
color: inherit !important;
}
.toast .btn-close {
filter: invert(1) grayscale(100%) brightness(200%);
}
/* Typed toasts (override Bootstrap text-bg-*) */
.toast.text-bg-primary {
background-color: var(--info) !important;
color: var(--info-text) !important;
border-color: var(--info-border) !important;
}
.toast.text-bg-info {
background-color: var(--info) !important;
color: var(--info-text) !important;
border-color: var(--info-border) !important;
}
.toast.text-bg-success {
background-color: var(--success) !important;
color: var(--success-text) !important;
border-color: var(--success-border) !important;
}
.toast.text-bg-warning {
background-color: var(--warning) !important;
color: var(--warning-text) !important;
border-color: var(--warning-border) !important;
}
.toast.text-bg-danger {
background-color: var(--danger) !important;
color: var(--danger-text) !important;
border-color: var(--danger-border) !important;
}
.toast-body {
color: #fff !important;
font-weight: 500 !important;
}
.info-bar-fixed {
width: 100%;
color: var(--text-strong);
background-color: var(--dark-700);
border-radius: 12px 12px 0 0;
text-align: center;
padding: 10px 10px;
font-size: .95rem;
box-sizing: border-box;
margin-top: 2rem;
box-shadow: 0 -1px 4px rgba(0, 0, 0, .25);
}
@media (max-width: 768px) {
.info-bar-fixed {
position: static;
font-size: .85rem;
padding: 8px 4px;
border-radius: 0;
}
}

View File

@@ -0,0 +1,39 @@
/* =========================================================
Modals (incl. fullscreen chart modal)
========================================================= */
.modal-content {
background-color: var(--dark-470) !important;
color: #f1f1f1 !important;
border: 1px solid var(--dark-450) !important;
}
.modal-header,
.modal-footer {
background-color: var(--dark-650) !important;
border-color: var(--dark-450) !important;
}
/* Fullscreen chart modal */
#chartFullscreenModal .modal-dialog {
max-width: 100vw;
width: 100vw;
margin: 0;
}
#chartFullscreenModal .modal-content {
height: 100vh;
border-radius: 0;
}
#chartFullscreenModal .modal-body {
display: flex;
flex: 1 1 auto;
padding: 0;
overflow: hidden;
}
#chartFullscreenCanvas {
display: block;
width: 100%;
height: 100%;
}

View File

@@ -0,0 +1,876 @@
/* =========================================================
Dropdown (TS already above) — active
========================================================= */
.ts-dropdown .active {
background-color: var(--dark-300) !important;
}
.list-group-item.bg-success {
background-color: var(--success) !important;
border-color: var(--success-border) !important;
color: var(--success-text) !important;
--bs-bg-opacity: 1 !important;
}
.list-group-item.bg-warning {
background-color: var(--warning) !important;
border-color: var(--warning-border) !important;
color: var(--warning-text) !important;
--bs-bg-opacity: 1 !important;
}
.btn-outline-light {
color: #f8f9fa !important;
border-color: #f8f9fa !important;
background-color: transparent !important;
/* brak białego tła domyślnie */
}
.btn-outline-light:hover,
.btn-outline-light:focus {
background-color: #6c757d !important;
/* szare, jak wcześniej */
color: #fff !important;
border-color: #6c757d !important;
}
.btn-outline-light:active,
.btn-outline-light.active,
.show>.btn-outline-light.dropdown-toggle {
background-color: #5a6268 !important;
/* ciemniejsze szare na active */
color: #fff !important;
border-color: #545b62 !important;
}
.btn-outline-info {
color: var(--info) !important;
border-color: var(--info) !important;
background-color: transparent !important;
}
.btn-outline-info:hover,
.btn-outline-info:focus {
background-color: #1d4d8c !important;
border-color: #1d4d8c !important;
color: var(--info-text) !important;
}
.btn-outline-info:active,
.btn-outline-info.active,
.show>.btn-outline-info.dropdown-toggle {
background-color: var(--info) !important;
border-color: var(--info-border) !important;
color: var(--info-text) !important;
}
/* Tekstowe kolory */
.text-success {
color: var(--success) !important;
}
.text-warning {
color: var(--warning) !important;
}
.text-info {
color: var(--info) !important;
}
.text-danger {
color: var(--danger) !important;
}
.settings-category-card {
background: rgba(255,255,255,.03);
border: 1px solid rgba(255,255,255,.09);
border-radius: 16px;
padding: 1rem;
height: 100%;
}
.settings-category-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: .75rem;
}
.settings-category-name {
font-size: 1rem;
font-weight: 700;
line-height: 1.2;
}
.settings-override-badge {
white-space: nowrap;
}
.settings-color-controls {
display: flex;
align-items: stretch;
gap: .75rem;
}
.settings-color-controls .category-color {
width: 72px;
min-width: 72px;
height: auto;
padding: .35rem;
border-radius: 14px !important;
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.04);
}
.settings-color-actions {
display: flex;
flex: 1 1 auto;
}
.settings-color-actions .btn {
flex: 1 1 0;
min-height: 44px;
border-radius: 14px !important;
display: inline-flex;
align-items: center;
justify-content: center;
text-align: center;
}
.settings-color-actions .btn + .btn {
margin-left: .5rem;
}
@media (min-width: 992px) {
.settings-category-name {
font-size: 1.08rem;
}
}
@media (max-width: 767.98px) {
.settings-category-card {
padding: .9rem;
}
.settings-color-controls {
flex-direction: column;
}
.settings-color-controls .category-color {
width: 100%;
min-width: 0;
height: 48px;
}
.settings-color-actions {
flex-direction: column;
}
.settings-color-actions .btn + .btn {
margin-left: 0;
margin-top: .5rem;
}
}
/* ========== Kolorowe wskaźniki pod pickerem ========== */
.color-indicators .indicator {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
gap: .5rem;
}
.color-indicators .bar {
height: 10px;
border-radius: 6px;
border: 1px solid rgba(255,255,255,.25);
box-shadow: inset 0 0 0 1px rgba(0,0,0,.25);
}
/* ========== Swatch + zapisy heksowe ========== */
.swatch {
width: 16px;
height: 16px;
border-radius: 50%;
display: inline-block;
border: 1px solid rgba(0,0,0,.15);
}
.hex,
.hex-label {
font-variant-numeric: lining-nums;
letter-spacing: .2px;
}
/* ========== OCR textarea ========== */
.settings-ocr-textarea {
font: inherit;
line-height: 1.45;
}
/* ========== Odznaka poziomu czułości ========== */
.sens-badge { font-weight: 600; }
.sens-low { background: rgba(108,117,125,.25); color: #ced4da; } /* szary */
.sens-mid { background: rgba(13,110,253,.25); color: #9ec5fe; } /* niebieski */
.sens-high { background: rgba(220,53,69,.25); color: #f1aeb5; } /* czerwony */
/* =========================================================
COMPACT: przyciski akcji na listach
- Desktop: standard Bootstrap
- <=576px: kompakt
========================================================= */
/* <=420px: tylko emoji */
@media (max-width: 420px) {
.btn-group-compact .btn-text {
display: none !important;
}
.btn-group-compact .btn {
padding: 0.22rem 0.45rem;
min-width: auto;
font-size: 0.9rem;
line-height: 1.1;
}
}
/* 421576px: lekko ciaśniej, ale tekst zostaje */
@media (min-width: 421px) and (max-width: 576px) {
.btn-group-compact .btn {
padding: 0.24rem 0.45rem;
font-size: 0.82rem;
line-height: 1.1;
}
.btn-group-compact .btn-text {
font-size: 0.75rem;
}
}
/* ================================================
RESPONSIVE NAVBAR
================================================ */
/* Wąskie ekrany (np. iPhone 11) */
@media (max-width: 420px) {
.navbar .container-fluid {
gap: 4px;
}
.navbar-brand-compact {
font-size: 0.9rem !important;
margin-right: 0.25rem;
white-space: nowrap;
}
.navbar-brand-compact .navbar-brand-text {
font-size: 0.95em;
}
.user-info-compact {
font-size: 0.72rem !important;
line-height: 0.9;
white-space: nowrap;
}
.user-info-compact .badge {
font-size: 0.68rem;
padding: 0.2rem 0.45rem;
}
.nav-buttons-compact .nav-btn-text {
display: none !important;
}
.nav-buttons-compact {
gap: 0.35rem !important;
flex-wrap: nowrap;
}
.nav-buttons-compact .btn {
padding: 0.22rem 0.45rem;
min-width: auto;
line-height: 1.1;
}
}
/* Małe ekrany (np. 421-576px) */
@media (min-width: 421px) and (max-width: 576px) {
.navbar .container-fluid {
gap: 8px;
}
.navbar-brand-compact {
font-size: 1.25rem !important;
white-space: nowrap;
}
.user-info-compact {
font-size: 0.8rem !important;
white-space: nowrap;
}
.user-info-compact .badge {
font-size: 0.75rem;
}
.nav-buttons-compact {
flex-wrap: nowrap;
}
.nav-buttons-compact .btn {
font-size: 0.8rem;
padding: 0.25rem 0.45rem;
}
.nav-buttons-compact .nav-btn-text {
font-size: 0.75rem;
}
}
@media (max-width: 420px) {
.user-label-desktop { display: none !important; }
.user-label-mobile { display: inline !important; }
}
@media (min-width: 421px) {
.user-label-desktop { display: inline !important; }
.user-label-mobile { display: none !important; }
}
.category-dot-pure {
width: 10px;
height: 10px;
display: inline-block;
flex: 0 0 auto;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.8);
background-clip: padding-box;
vertical-align: middle;
margin-left: 0.35rem;
opacity: 1;
padding: 0;
line-height: 1;
font-size: 0;
text-indent: -9999px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.category-dot-pure::before,
.category-dot-pure::after {
content: none !important;
}
/* Hover efekt */
.category-dot:hover {
transform: scale(1.3) !important;
box-shadow: 0 2px 6px rgba(0,0,0,0.4) !important;
}
.list-title {
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
max-width: 70% !important;
display: inline-block !important;
}
/* Bardzo małe ekrany */
@media (max-width: 420px) {
.list-title {
max-width: 60% !important;
}
}
/* ===== 2026 app refresh ===== */
:root {
--app-bg: #07111f;
--app-bg-soft: #0d1b2d;
--app-surface: rgba(11, 23, 39, 0.88);
--app-surface-strong: rgba(15, 28, 46, 0.98);
--app-surface-muted: rgba(255, 255, 255, 0.04);
--app-border: rgba(255, 255, 255, 0.1);
--app-border-strong: rgba(255, 255, 255, 0.16);
--app-text: #f3f8ff;
--app-text-muted: #9fb0c8;
--app-success: #27d07d;
--app-warning: #f6c453;
--app-danger: #ff6b7a;
--app-shadow: 0 18px 50px rgba(0, 0, 0, 0.28);
--app-radius: 22px;
}
html, body {
min-height: 100%;
background-color: var(--app-bg);
background-image:
radial-gradient(circle at top left, rgba(39, 208, 125, 0.18), transparent 24%),
radial-gradient(circle at top right, rgba(74, 144, 226, 0.16), transparent 22%),
linear-gradient(180deg, #09111d 0%, #08121f 38%, #060d18 100%);
background-repeat: no-repeat;
color: var(--app-text);
}
html {
color-scheme: dark;
}
body.app-body {
position: relative;
min-height: 100vh;
min-height: 100dvh;
min-height: 100svh;
display: flex;
flex-direction: column;
margin: 0;
font-feature-settings: "ss01" on, "cv02" on;
overflow-x: hidden;
}
@supports (padding: env(safe-area-inset-top)) {
html, body {
min-height: calc(100% + env(safe-area-inset-top, 0px) + env(safe-area-inset-bottom, 0px));
}
}
.app-backdrop {
position: fixed;
inset: 0;
pointer-events: none;
background: linear-gradient(180deg, rgba(255,255,255,0.02), transparent 28%);
}
.app-header {
z-index: 1035;
padding: calc(0.75rem + env(safe-area-inset-top, 0px)) 0 0;
backdrop-filter: blur(12px);
}
.app-navbar {
background: transparent;
}
.app-navbar .container-xxl {
border: 1px solid var(--app-border);
background: rgba(6, 15, 27, 0.74);
backdrop-filter: blur(16px);
border-radius: 999px;
min-height: 68px;
box-shadow: var(--app-shadow);
}
.app-brand {
display: inline-flex;
align-items: center;
gap: 0.85rem;
font-weight: 800;
color: var(--app-text) !important;
}
.app-brand__icon {
display: inline-grid;
place-items: center;
width: 2.6rem;
height: 2.6rem;
border-radius: 16px;
background: linear-gradient(135deg, rgba(39,208,125,0.22), rgba(74,144,226,0.18));
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08);
}
.app-brand__title { color: #ffffff; }
.app-brand__accent { color: #7ce4a8; margin-left: 0.3rem; }
.app-navbar__actions,
.app-navbar__meta {
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
}
.app-user-chip {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.4rem 0.45rem 0.4rem 0.75rem;
border-radius: 999px;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.08);
}
.app-user-chip__label {
font-size: 0.75rem;
color: var(--app-text-muted);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.app-main {
flex: 1 0 auto;
padding: 1rem 0 2.5rem;
}
.app-content-frame {
padding: 0.25rem 0 0;
}
.app-footer {
margin-top: auto;
padding: 1rem 0 calc(1.35rem + env(safe-area-inset-bottom, 0px));
}
.app-footer__inner {
border-top: 1px solid rgba(255,255,255,0.08);
padding-top: 1.25rem;
}
h1, h2, h3, h4, h5, h6 {
color: #ffffff;
letter-spacing: -0.02em;
}
.card,
.modal-content,
.dropdown-menu,
.list-group-item,
.table,
.alert,
.pagination .page-link,
.nav-tabs,
.input-group-text,
.form-control,
.form-select,
.btn,
.progress,
.toast {
border-radius: 18px;
}
.card,
.modal-content,
.table-responsive,
.alert,
.list-group-item,
.pagination .page-link,
.nav-tabs,
.input-group-text,
.form-control,
.form-select,
.progress,
.toast,
.page-link,
.table,
.btn-group > .btn {
border-color: var(--app-border) !important;
}
.card,
.modal-content,
.table-responsive,
.alert,
.list-group-item,
.progress,
.toast {
background: var(--app-surface) !important;
box-shadow: var(--app-shadow);
backdrop-filter: blur(10px);
}
.card-body,
.modal-body,
.modal-header,
.modal-footer {
background: transparent;
}
.bg-dark,
.table-dark,
.list-group-item.bg-dark,
.modal-content.bg-dark,
.card.bg-dark,
.card.bg-secondary,
.list-group-item.item-not-checked {
background: var(--app-surface) !important;
color: var(--app-text) !important;
}
.card.bg-secondary.bg-opacity-10,
#share-card {
background: linear-gradient(180deg, rgba(16, 29, 49, 0.96), rgba(10, 20, 36, 0.94)) !important;
}
.table-dark {
--bs-table-bg: transparent;
--bs-table-striped-bg: rgba(255,255,255,0.03);
--bs-table-hover-bg: rgba(255,255,255,0.05);
--bs-table-color: var(--app-text);
margin-bottom: 0;
}
.table > :not(caption) > * > * {
padding: 0.9rem 1rem;
border-bottom-color: rgba(255,255,255,0.08);
}
.list-group {
gap: 0.8rem;
}
.list-group-item {
margin-bottom: 0;
padding: 1rem 1rem;
color: var(--app-text) !important;
}
.list-group-item.bg-success {
background: linear-gradient(135deg, rgba(39,208,125,0.92), rgba(22,150,91,0.96)) !important;
}
.list-group-item.bg-warning {
background: linear-gradient(135deg, rgba(246,196,83,0.96), rgba(224,164,26,0.96)) !important;
color: #1c1b17 !important;
}
.btn {
border-radius: 14px;
font-weight: 600;
padding: 0.7rem 1rem;
box-shadow: none;
}
.btn-sm {
padding: 0.55rem 0.85rem;
border-radius: 12px;
}
.btn-success,
.btn-outline-success:hover {
background: linear-gradient(135deg, #29d17d, #1ea860);
border-color: rgba(41,209,125,0.9);
}
.btn-outline-light,
.btn-outline-secondary,
.btn-outline-warning,
.btn-outline-primary,
.btn-outline-success {
background: rgba(255,255,255,0.02);
}
.btn:hover,
.btn:focus {
transform: translateY(-1px);
}
.form-control,
.form-select,
.input-group-text {
min-height: 48px;
background: rgba(5, 13, 23, 0.86) !important;
color: var(--app-text) !important;
box-shadow: none !important;
}
.form-control::placeholder { color: rgba(210, 224, 244, 0.45); }
.form-control:focus,
.form-select:focus {
border-color: rgba(39,208,125,0.5) !important;
box-shadow: 0 0 0 0.2rem rgba(39,208,125,0.15) !important;
}
.nav-tabs {
gap: 0.5rem;
border-bottom: none;
background: rgba(255,255,255,0.03);
padding: 0.4rem;
}
.nav-tabs .nav-link {
border-radius: 14px;
color: var(--app-text-muted);
border: none;
padding: 0.8rem 1rem;
}
.nav-tabs .nav-link.active {
background: rgba(39,208,125,0.12);
color: #fff;
}
.progress {
overflow: hidden;
background: rgba(255,255,255,0.06);
min-height: 1rem;
}
.badge {
border: 1px solid rgba(255,255,255,0.08);
}
.pagination .page-link {
background: rgba(255,255,255,0.03);
color: var(--app-text);
margin: 0 0.15rem;
}
.pagination .page-item.active .page-link {
background: rgba(39,208,125,0.18);
color: #fff;
}
.modal-content {
overflow: hidden;
}
.toast-container { z-index: 1200; }
#items .list-group-item {
border-radius: 18px !important;
padding: 1rem 1rem;
}
#items .btn-group {
gap: 0.4rem;
}
#items .btn-group .btn {
border-radius: 12px !important;
}
.large-checkbox {
width: 1.35rem;
height: 1.35rem;
accent-color: #29d17d;
}
#share-card .badge,
#total-expense1,
#total-expense2,
#total-expense {
background: transparent;
color: #dfffea !important;
}
#share-card,
.card,
.table-responsive,
.alert,
.modal-content,
#expenseChartWrapper,
#categoryChartWrapper {
border-radius: var(--app-radius) !important;
}
.endpoint-login .app-content-frame,
.endpoint-system_auth .app-content-frame,
.endpoint-page_not_found .app-content-frame,
.endpoint-forbidden .app-content-frame {
max-width: 560px;
margin: 3rem auto 0;
}
.endpoint-main_page .list-group-item,
.endpoint-expenses .card,
.endpoint-admin_panel .card,
.endpoint-view_list .card,
.endpoint-shared_list .card,
.endpoint-edit_my_list .card,
[class*="endpoint-admin_"] .card {
overflow: hidden;
}
input[type="checkbox"].form-check-input {
width: 2.9rem;
height: 1.5rem;
}
hr {
border-color: rgba(255,255,255,0.08);
}
@media (max-width: 991.98px) {
.app-header {
padding-top: 0.55rem;
}
.app-navbar .container-xxl {
border-radius: 26px;
padding-top: 0.8rem;
padding-bottom: 0.8rem;
align-items: flex-start;
}
.app-navbar__actions,
.app-navbar__meta {
width: 100%;
justify-content: flex-start;
}
}
@media (max-width: 767.98px) {
.app-main {
padding-top: 0.7rem;
}
.card-body,
.list-group-item,
.modal-body,
.modal-header,
.modal-footer,
.table > :not(caption) > * > * {
padding-left: 0.85rem;
padding-right: 0.85rem;
}
.btn-group,
.d-flex.gap-2,
.d-flex.gap-3 {
gap: 0.45rem !important;
}
.btn-group > .btn,
.btn.w-100,
.input-group > .btn {
min-height: 46px;
}
.input-group:not(.ui-password-group) {
flex-wrap: wrap;
gap: 0.55rem;
}
.input-group:not(.ui-password-group) > .form-control,
.input-group:not(.ui-password-group) > .form-select,
.input-group:not(.ui-password-group) > .btn,
.input-group:not(.ui-password-group) > .input-group-text {
width: 100% !important;
flex: 1 1 100% !important;
border-radius: 14px !important;
max-width: 100% !important;
}
#items .d-flex.align-items-center.gap-2.flex-grow-1 {
width: 100%;
align-items: flex-start !important;
}
#items .btn-group {
width: 100%;
margin-top: 0.85rem;
}
#items .btn-group .btn {
flex: 1 1 0;
}
.table-responsive {
border-radius: 18px;
}
.pagination {
flex-wrap: wrap;
gap: 0.25rem;
justify-content: center;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
/* =========================================================
COMPACT: przyciski akcji na listach
- Desktop: standard Bootstrap
- <=576px: kompakt
========================================================= */
/* <=420px: tylko emoji */
@media (max-width: 420px) {
.btn-group-compact .btn-text {
display: none !important;
}
.btn-group-compact .btn {
padding: 0.22rem 0.45rem;
min-width: auto;
font-size: 0.9rem;
line-height: 1.1;
}
}
/* 421576px: lekko ciaśniej, ale tekst zostaje */
@media (min-width: 421px) and (max-width: 576px) {
.btn-group-compact .btn {
padding: 0.24rem 0.45rem;
font-size: 0.82rem;
line-height: 1.1;
}
.btn-group-compact .btn-text {
font-size: 0.75rem;
}
}

View File

@@ -0,0 +1,926 @@
/* =========================================================
Share page toolbar and shared-list header actions
========================================================= */
.share-page-toolbar {
display: flex;
align-items: center;
justify-content: flex-end;
gap: .75rem;
width: 100%;
}
.share-page-toolbar__spacer {
flex: 1 1 auto;
}
.share-page-toolbar .form-check {
margin-bottom: 0;
}
.endpoint-list_share .app-navbar__actions,
.endpoint-shared_list .app-navbar__actions {
align-items: stretch;
}
.endpoint-list_share .app-navbar__actions .btn,
.endpoint-shared_list .app-navbar__actions .btn {
min-height: var(--nav-btn-height);
}
@media (max-width: 991.98px) {
.app-navbar .container-xxl {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: .6rem;
}
.app-navbar__meta {
display: none;
}
.app-brand {
min-width: 0;
overflow: hidden;
}
.app-brand > span:last-child {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.app-navbar__actions {
grid-column: 1 / -1;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: .45rem;
width: 100%;
}
.app-navbar__actions .btn,
.app-nav-action {
width: 100%;
padding: .55rem .6rem;
}
.endpoint-admin_panel .table-responsive > table.table,
.endpoint-admin_lists_access .table-responsive > table.table {
width: max-content !important;
min-width: 980px !important;
}
}
@media (max-width: 767.98px) {
.share-page-toolbar {
justify-content: stretch;
}
.share-page-toolbar__spacer {
display: none;
}
.hide-purchased-switch {
padding-left: 2.95rem;
}
.hide-purchased-switch.form-check.app-switch {
width: 100%;
}
.switch-grid,
.endpoint-edit_my_list .switch-grid {
grid-template-columns: 1fr;
}
}
/* final polish v2 */
:root {
--nav-btn-height: 2.35rem;
}
.app-navbar__actions {
gap: .4rem;
}
.app-navbar__actions .btn,
.app-nav-action {
min-height: var(--nav-btn-height);
padding: .42rem .78rem;
font-size: .92rem;
border-radius: .9rem !important;
}
.form-check.form-switch.app-switch {
min-height: 2.95rem;
padding: .65rem .9rem;
}
.form-check.form-switch.app-switch .form-check-input {
width: 2.75em !important;
height: 1.45em !important;
transition: background-position .18s ease-in-out, background-color .18s ease-in-out, border-color .18s ease-in-out, box-shadow .18s ease-in-out !important;
}
.form-check.form-switch.app-switch .form-check-label {
min-height: 1.45rem;
}
.endpoint-admin_templates .table-responsive {
overflow-x: auto;
}
.endpoint-admin_templates .table-responsive > table.table {
width: 100% !important;
min-width: 100% !important;
table-layout: auto;
}
@media (max-width: 991.98px) {
.app-navbar__actions .btn,
.app-nav-action {
font-size: .86rem;
padding: .48rem .6rem;
}
.endpoint-admin_templates .table-responsive > table.table {
width: max-content !important;
min-width: 900px !important;
}
}
/* responsive mobile category badges + smaller animated switches */
.mobile-list-heading {
width: 100%;
min-width: 0;
max-width: 100%;
justify-content: flex-start;
}
.mobile-list-heading__title {
min-width: 0;
}
.mobile-category-badges {
display: inline-flex;
align-items: center;
gap: .3rem;
min-width: 0;
max-width: 100%;
}
.mobile-category-badge {
display: inline-flex;
align-items: center;
justify-content: center;
font-size: .68rem;
line-height: 1;
padding: .26rem .52rem;
opacity: .95;
}
.mobile-category-badge__dot {
display: none;
width: .55rem;
height: .55rem;
border-radius: 999px;
background: currentColor;
}
.mobile-category-badges.is-compact .mobile-category-badge {
width: .9rem;
min-width: .9rem;
height: .9rem;
padding: 0;
border-radius: 999px;
}
.mobile-category-badges.is-compact .mobile-category-badge__text {
display: none;
}
.mobile-category-badges.is-compact .mobile-category-badge__dot {
display: block;
}
.form-check.form-switch.app-switch {
min-height: 2.75rem;
padding: .58rem .82rem;
}
.form-check.form-switch.app-switch .form-check-input,
.hide-purchased-switch .form-check-input {
width: 2.45em !important;
height: 1.3em !important;
background-position: left center !important;
transition: background-position .18s ease-in-out, background-color .18s ease-in-out, border-color .18s ease-in-out, box-shadow .18s ease-in-out !important;
}
.form-check.form-switch.app-switch .form-check-input:checked,
.hide-purchased-switch .form-check-input:checked {
background-position: right center !important;
}
.form-check.form-switch.app-switch .form-check-label {
min-height: 1.3rem;
}
.hide-purchased-switch.form-check.app-switch {
padding: .5rem .82rem;
}
@media (max-width: 576px) {
.mobile-list-heading {
display: inline-flex;
max-width: 100%;
}
.mobile-list-heading__title {
max-width: 100%;
}
}
.endpoint-main_page .list-group-item > .main-list-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
width: 100%;
flex-wrap: nowrap;
}
.endpoint-main_page .list-main-meta {
min-width: 0;
flex: 1 1 auto;
}
.endpoint-main_page .list-main-title {
display: flex;
align-items: center;
align-content: center;
flex-wrap: wrap;
gap: 0.15rem;
min-width: 0;
line-height: 1;
}
.endpoint-main_page .list-main-actions {
flex: 0 0 auto;
align-self: center;
}
@media (max-width: 575.98px) {
.endpoint-main_page .list-group-item > .main-list-row {
flex-direction: column;
align-items: stretch;
}
.endpoint-main_page .list-main-actions {
width: 100%;
}
}
/* mobile UX fixes 2026-03-14 */
.list-main-title__link {
min-width: 0;
display: inline-flex;
align-items: center;
align-content: center;
flex-wrap: wrap;
gap: .15rem;
line-height: 1;
}
.shopping-item-row {
gap: .75rem;
}
.shopping-item-main {
min-width: 0;
flex: 1 1 auto;
flex-wrap: wrap;
}
.shopping-item-main span[id^="name-"] {
min-width: 0;
}
.shopping-item-actions {
flex: 0 0 auto;
margin-left: auto;
align-self: flex-start;
}
.shopping-compact-input-group {
flex-wrap: nowrap !important;
align-items: stretch;
}
.shopping-qty-input {
flex: 0 0 4.5rem;
max-width: 4.5rem;
}
.shopping-compact-submit {
flex: 0 0 auto;
width: auto;
white-space: nowrap;
}
@media (max-width: 991.98px) {
.app-navbar__actions {
grid-template-columns: repeat(auto-fit, minmax(8.25rem, max-content));
justify-content: end;
}
.app-navbar__actions .btn,
.app-nav-action {
width: auto;
min-width: 8.25rem;
justify-self: end;
}
}
@media (max-width: 575.98px) {
.endpoint-main_page .list-group-item > .main-list-row {
flex-direction: row;
align-items: center;
}
.endpoint-main_page .list-main-actions {
width: auto;
margin-left: auto;
}
.endpoint-main_page .list-main-actions .btn {
padding: .38rem .52rem;
min-width: 2.35rem;
}
.endpoint-main_page .list-main-title {
display: flex;
flex-wrap: wrap;
gap: .15rem;
}
.endpoint-main_page .list-main-meta {
flex: 1 1 auto;
min-width: 0;
}
.endpoint-main_page .list-main-title__link {
min-width: 0;
max-width: 100%;
}
.shopping-item-row {
align-items: flex-start !important;
}
.shopping-item-actions {
width: auto;
margin-top: 0;
margin-left: auto;
justify-content: flex-end;
}
.shopping-item-actions .btn {
min-width: 2.35rem;
padding: .38rem .52rem;
}
.shopping-compact-input-group {
display: flex;
}
.shopping-compact-input-group > .form-control {
min-width: 0;
}
.shopping-qty-input {
flex-basis: 4rem;
max-width: 4rem;
}
.shopping-compact-submit {
min-width: auto;
padding-left: .8rem;
padding-right: .8rem;
}
.ui-password-group > .ui-password-toggle {
min-width: 2.75rem;
padding-left: .7rem;
padding-right: .7rem;
}
}
/* UX refactor 2026-03-14 b */
.app-navbar-toggler {
border-color: rgba(255,255,255,.28);
padding: .3rem .55rem;
}
.app-navbar-toggler:focus {
box-shadow: 0 0 0 .2rem rgba(255,255,255,.1);
}
.app-navbar-toggler .navbar-toggler-icon {
filter: invert(1) grayscale(1);
}
#createListTempToggle,
.create-list-temp-toggle {
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
.create-list-input-group > .form-control {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.create-list-input-group > .create-list-temp-toggle {
background: transparent;
white-space: nowrap;
}
.list-toolbar {
width: 100%;
}
.list-toolbar--share {
justify-content: flex-end;
}
.hide-purchased-switch--minimal {
border: 0;
background: transparent;
padding: 0;
margin-left: auto;
}
.shopping-item-row {
padding: .8rem .95rem;
}
.shopping-item-main {
display: flex;
align-items: center;
gap: .75rem;
width: 100%;
}
.shopping-item-content {
flex: 1 1 auto;
min-width: 0;
}
.shopping-item-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: .75rem;
}
.shopping-item-text {
min-width: 0;
display: flex;
align-items: center;
gap: .35rem;
flex-wrap: wrap;
}
.shopping-item-name {
min-width: 0;
overflow-wrap: break-word;
word-break: normal;
}
.shopping-item-text .info-line {
flex-basis: 100%;
margin-top: .1rem;
overflow-wrap: break-word;
word-break: normal;
}
.shopping-item-actions {
display: inline-flex;
flex-wrap: nowrap;
gap: .35rem;
}
.shopping-product-input-group > .shopping-product-name-input,
.shopping-expense-input-group > .shopping-expense-amount-input {
flex: 1 1 auto;
}
.shopping-product-input-group > .shopping-qty-input {
flex: 0 0 4.5rem;
max-width: 4.5rem;
text-align: center;
}
.shopping-expense-input-group > .shopping-compact-submit,
.shopping-product-input-group > .shopping-compact-submit {
flex: 0 0 auto;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit {
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
border-top-right-radius: .9rem !important;
border-bottom-right-radius: .9rem !important;
margin-left: 0;
}
.endpoint-list .shopping-product-input-group,
.endpoint-list_share .shopping-product-input-group,
.endpoint-shared_list .shopping-product-input-group,
.endpoint-list .shopping-expense-input-group,
.endpoint-list_share .shopping-expense-input-group,
.endpoint-shared_list .shopping-expense-input-group {
flex-wrap: nowrap;
}
@media (max-width: 991.98px) {
.navbar-collapse .app-navbar__actions {
padding-top: .6rem;
justify-content: flex-end;
}
}
@media (max-width: 575.98px) {
.app-navbar__actions {
width: 100%;
justify-content: flex-end;
}
.app-navbar__actions .btn,
.app-nav-action {
min-width: 0;
width: auto;
}
.shopping-item-main {
gap: .55rem;
}
.shopping-item-head {
gap: .45rem;
}
.shopping-item-actions {
margin-left: auto;
align-self: flex-start;
}
.shopping-item-actions .btn {
min-width: 2.2rem;
padding: .34rem .48rem;
}
.shopping-product-input-group > .shopping-product-name-input,
.shopping-expense-input-group > .shopping-expense-amount-input {
flex: 0 0 60%;
min-width: 0;
}
.shopping-product-input-group > .shopping-qty-input {
flex: 0 0 15%;
max-width: 15%;
min-width: 0;
}
.shopping-product-input-group > .shopping-compact-submit {
flex: 0 0 25%;
width: 25%;
min-width: 0;
padding-left: .55rem;
padding-right: .55rem;
font-size: .95rem;
}
.shopping-expense-input-group > .shopping-compact-submit {
padding-left: .7rem;
padding-right: .7rem;
}
.list-toolbar {
align-items: flex-start !important;
}
.list-toolbar__sort {
flex: 0 0 auto;
}
.hide-purchased-switch--minimal {
font-size: .95rem;
}
}
/* UX tweak 2026-03-14 c: hamburger with full labels */
@media (max-width: 991.98px) {
.navbar-collapse .app-navbar__actions {
width: 100%;
display: flex;
flex-direction: column;
align-items: stretch;
gap: .5rem;
}
.navbar-collapse .app-navbar__actions .btn,
.navbar-collapse .app-nav-action {
width: 100%;
min-width: 0;
justify-content: flex-start;
text-align: left;
padding-left: .9rem;
padding-right: .9rem;
}
.navbar-collapse .app-navbar__actions .btn > span,
.navbar-collapse .app-nav-action > span {
display: inline !important;
}
}
/* form input/button unification fix 2026-03-15 */
.endpoint-list .shopping-product-input-group,
.endpoint-list_share .shopping-product-input-group,
.endpoint-shared_list .shopping-product-input-group,
.endpoint-list .shopping-expense-input-group,
.endpoint-list_share .shopping-expense-input-group,
.endpoint-shared_list .shopping-expense-input-group {
display: flex;
flex-wrap: nowrap !important;
align-items: stretch;
gap: 0 !important;
}
.endpoint-list .shopping-product-input-group > .form-control,
.endpoint-list_share .shopping-product-input-group > .form-control,
.endpoint-shared_list .shopping-product-input-group > .form-control,
.endpoint-list .shopping-expense-input-group > .form-control,
.endpoint-list_share .shopping-expense-input-group > .form-control,
.endpoint-shared_list .shopping-expense-input-group > .form-control,
.endpoint-list .shopping-product-input-group > .btn,
.endpoint-list_share .shopping-product-input-group > .btn,
.endpoint-shared_list .shopping-product-input-group > .btn,
.endpoint-list .shopping-expense-input-group > .btn,
.endpoint-list_share .shopping-expense-input-group > .btn,
.endpoint-shared_list .shopping-expense-input-group > .btn {
position: relative;
min-height: 46px;
box-shadow: none;
}
.endpoint-list .shopping-product-input-group > .shopping-product-name-input,
.endpoint-list_share .shopping-product-input-group > .shopping-product-name-input,
.endpoint-shared_list .shopping-product-input-group > .shopping-product-name-input,
.endpoint-list .shopping-expense-input-group > .shopping-expense-amount-input,
.endpoint-list_share .shopping-expense-input-group > .shopping-expense-amount-input,
.endpoint-shared_list .shopping-expense-input-group > .shopping-expense-amount-input {
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
.endpoint-list .shopping-product-input-group > .shopping-qty-input,
.endpoint-list_share .shopping-product-input-group > .shopping-qty-input,
.endpoint-shared_list .shopping-product-input-group > .shopping-qty-input {
border-radius: 0 !important;
border-left-width: 0 !important;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit {
display: inline-flex;
align-items: center;
justify-content: center;
gap: .35rem;
margin-left: 0 !important;
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
border-top-right-radius: .9rem !important;
border-bottom-right-radius: .9rem !important;
border-left-width: 0 !important;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-list .share-submit-btn,
.endpoint-list_share .share-submit-btn,
.endpoint-shared_list .share-submit-btn {
min-width: 7.25rem;
}
.shopping-btn-icon {
line-height: 1;
}
.shopping-btn-label {
line-height: 1;
}
@media (max-width: 767.98px) {
.endpoint-list .shopping-product-input-group,
.endpoint-list_share .shopping-product-input-group,
.endpoint-shared_list .shopping-product-input-group,
.endpoint-list .shopping-expense-input-group,
.endpoint-list_share .shopping-expense-input-group,
.endpoint-shared_list .shopping-expense-input-group {
width: 100%;
}
.endpoint-list .shopping-product-input-group > .shopping-product-name-input,
.endpoint-list_share .shopping-product-input-group > .shopping-product-name-input,
.endpoint-shared_list .shopping-product-input-group > .shopping-product-name-input {
flex: 0 0 60% !important;
max-width: 60% !important;
min-width: 0;
}
.endpoint-list .shopping-product-input-group > .shopping-qty-input,
.endpoint-list_share .shopping-product-input-group > .shopping-qty-input,
.endpoint-shared_list .shopping-product-input-group > .shopping-qty-input {
flex: 0 0 15% !important;
max-width: 15% !important;
min-width: 0;
padding-left: .35rem;
padding-right: .35rem;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit {
flex: 0 0 25% !important;
width: 25% !important;
min-width: 0 !important;
padding-left: .4rem;
padding-right: .4rem;
}
.endpoint-list .shopping-expense-input-group > .shopping-expense-amount-input,
.endpoint-list_share .shopping-expense-input-group > .shopping-expense-amount-input,
.endpoint-shared_list .shopping-expense-input-group > .shopping-expense-amount-input {
flex: 1 1 auto !important;
min-width: 0;
}
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit {
flex: 0 0 5rem !important;
width: 5rem !important;
min-width: 5rem !important;
padding-left: .35rem;
padding-right: .35rem;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-label {
display: none;
}
.endpoint-list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-list_share .shopping-product-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-shared_list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-list_share .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-shared_list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-icon {
margin: 0;
font-size: 1rem;
}
}
/* endpoint fix for /list route */
.endpoint-view_list .shopping-product-input-group,
.endpoint-view_list .shopping-expense-input-group {
display: flex;
flex-wrap: nowrap !important;
align-items: stretch;
gap: 0 !important;
width: 100%;
}
.endpoint-view_list .shopping-product-input-group > .form-control,
.endpoint-view_list .shopping-expense-input-group > .form-control,
.endpoint-view_list .shopping-product-input-group > .btn,
.endpoint-view_list .shopping-expense-input-group > .btn {
position: relative;
min-height: 46px;
box-shadow: none;
}
.endpoint-view_list .shopping-product-input-group > .shopping-product-name-input,
.endpoint-view_list .shopping-expense-input-group > .shopping-expense-amount-input {
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
.endpoint-view_list .shopping-product-input-group > .shopping-qty-input {
border-radius: 0 !important;
border-left-width: 0 !important;
}
.endpoint-view_list .shopping-product-input-group > .shopping-compact-submit,
.endpoint-view_list .shopping-expense-input-group > .shopping-compact-submit,
.endpoint-view_list .share-submit-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: .35rem;
margin-left: 0 !important;
min-width: 7.25rem;
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
border-top-right-radius: .9rem !important;
border-bottom-right-radius: .9rem !important;
border-left-width: 0 !important;
}
@media (max-width: 767.98px) {
.endpoint-view_list .shopping-product-input-group > .shopping-product-name-input {
flex: 0 0 60% !important;
max-width: 60% !important;
min-width: 0;
}
.endpoint-view_list .shopping-product-input-group > .shopping-qty-input {
flex: 0 0 15% !important;
max-width: 15% !important;
min-width: 0;
padding-left: .35rem;
padding-right: .35rem;
}
.endpoint-view_list .shopping-product-input-group > .shopping-compact-submit {
flex: 0 0 25% !important;
width: 25% !important;
min-width: 0 !important;
padding-left: .4rem;
padding-right: .4rem;
}
.endpoint-view_list .shopping-expense-input-group > .shopping-expense-amount-input {
flex: 1 1 auto !important;
min-width: 0;
}
.endpoint-view_list .shopping-expense-input-group > .shopping-compact-submit {
flex: 0 0 5rem !important;
width: 5rem !important;
min-width: 5rem !important;
padding-left: .35rem;
padding-right: .35rem;
}
.endpoint-view_list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-label,
.endpoint-view_list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-label {
display: none;
}
.endpoint-view_list .shopping-product-input-group > .shopping-compact-submit .shopping-btn-icon,
.endpoint-view_list .shopping-expense-input-group > .shopping-compact-submit .shopping-btn-icon {
margin: 0;
font-size: 1rem;
}
}
/* --- JS render + progress bar consistency patch --- */
#progress-bar-purchased {
background: linear-gradient(135deg, rgba(39,208,125,0.96), rgba(22,150,91,0.98)) !important;
}
#progress-bar-not-purchased {
background: linear-gradient(135deg, rgba(246,196,83,0.96), rgba(224,164,26,0.98)) !important;
}
#progress-bar-remaining {
background: rgba(255,255,255,0.08) !important;
}

View File

@@ -0,0 +1,661 @@
/* =========================================================
Shopping item rows: shared base alignment + mobile fixes
========================================================= */
/* v10.2 item row consistency and mobile share fixes */
.shopping-item-text {
line-height: 1.35;
}
.shopping-item-text .info-line {
display: inline;
flex-basis: auto;
margin-top: 0;
white-space: normal;
}
.shopping-item-text .info-line > span {
display: inline;
}
.shopping-item-text .item-added-by-meta {
color: currentColor;
opacity: .72;
font-size: .92em;
}
.shopping-item-text .item-added-by-meta b {
font-weight: 600;
}
.shopping-item-name,
.shopping-item-text .info-line {
overflow-wrap: break-word;
word-break: normal;
}
.shopping-item-actions {
flex: 0 0 auto;
}
@media (max-width: 575.98px) {
.shopping-item-head {
flex-wrap: wrap;
align-items: flex-start;
}
.shopping-item-text {
flex: 1 1 100%;
min-width: 0;
}
.shopping-item-actions {
width: 100%;
margin-left: 0;
justify-content: flex-end;
}
}
/* v10.3 alignment fixes for list/share */
.hide-purchased-switch--right {
display: inline-flex !important;
align-items: center;
justify-content: flex-end;
gap: .6rem;
width: auto;
margin-left: auto;
padding: 0 !important;
border: 0 !important;
background: transparent !important;
box-shadow: none !important;
}
.hide-purchased-switch--right::before,
.hide-purchased-switch--right::after {
display: none !important;
}
.hide-purchased-switch--right .form-check-input {
order: 1;
margin: 0;
float: none;
flex: 0 0 auto;
}
.hide-purchased-switch--right .form-check-label {
order: 0;
margin: 0 !important;
white-space: nowrap;
}
.list-action-row {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
gap: .65rem;
}
.list-action-row__form {
display: flex;
flex: 1 1 50%;
}
.list-action-row__btn {
width: 100%;
}
.list-action-row > .list-action-row__btn {
flex: 1 1 50%;
}
.shopping-item-head {
flex-wrap: nowrap;
align-items: center;
}
.shopping-item-text {
flex: 1 1 auto;
min-width: 0;
}
.shopping-item-text .info-line {
flex-basis: auto;
}
.shopping-item-actions {
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
white-space: nowrap;
}
.shopping-item-actions .btn {
flex: 0 0 auto;
}
@media (max-width: 575.98px) {
.shopping-item-main {
align-items: center;
}
.shopping-item-head {
flex-wrap: nowrap;
align-items: center;
gap: .4rem;
}
.shopping-item-text {
flex: 1 1 auto;
min-width: 0;
gap: .25rem;
}
.shopping-item-actions {
width: auto;
margin-left: auto;
gap: .25rem;
}
.shopping-item-actions .btn {
min-width: 2rem;
padding: .3rem .42rem;
}
.hide-purchased-switch--right {
width: auto;
max-width: 100%;
}
.list-action-row {
gap: .5rem;
}
.list-action-row > .list-action-row__btn,
.list-action-row__form {
flex: 1 1 50%;
min-width: 0;
}
.list-action-row__btn {
padding-left: .55rem;
padding-right: .55rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
/* layout polish 2026-03-15: toolbar, sorting and item alignment */
.list-header-toolbar {
width: 100%;
}
.list-header-toolbar > h2 {
flex: 1 1 auto;
min-width: 0;
}
.list-header-toolbar .list-toolbar {
flex: 0 0 auto;
width: auto;
margin-left: auto;
}
.list-toolbar__sort.btn {
display: inline-flex;
align-items: center;
justify-content: center;
white-space: nowrap;
border-width: 1px !important;
}
.drag-handle {
display: none !important;
cursor: grab;
}
body.sorting-active .drag-handle {
display: inline-flex !important;
}
body.sorting-active .shopping-item-row {
cursor: grab;
}
body.sorting-active .shopping-item-row:active,
body.sorting-active .drag-handle:active {
cursor: grabbing;
}
body.sorting-active .shopping-item-row .large-checkbox {
pointer-events: none;
}
.endpoint-list_share .shopping-item-name,
.endpoint-list_share .shopping-item-text .info-line,
.endpoint-shared_list .shopping-item-name,
.endpoint-shared_list .shopping-item-text .info-line {
overflow-wrap: break-word;
word-break: normal;
}
.endpoint-list_share input[type="checkbox"].large-checkbox::before,
.endpoint-shared_list input[type="checkbox"].large-checkbox::before,
.endpoint-view_list input[type="checkbox"].large-checkbox::before {
font-size: 1.7em;
}
@media (max-width: 575.98px) {
.endpoint-view_list .list-toolbar {
display: grid !important;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center !important;
gap: .4rem !important;
flex-wrap: nowrap !important;
}
.endpoint-view_list .list-toolbar__sort.btn {
min-width: 0;
padding: .35rem .55rem;
font-size: .82rem;
}
.endpoint-view_list .hide-purchased-switch--right {
min-width: 0;
gap: .25rem;
font-size: .82rem;
}
.endpoint-view_list .hide-purchased-switch--right .form-check-label {
margin-left: .25rem !important;
white-space: nowrap;
}
.endpoint-view_list .hide-purchased-switch--right .form-check-input {
transform: scale(.92);
transform-origin: center;
}
.list-header-toolbar {
align-items: flex-start !important;
}
.list-header-toolbar .list-toolbar {
width: 100%;
justify-content: flex-end !important;
}
}
/* hotfix 2026-03-15 v3: /share item layout parity with /list */
/* hotfix 2026-03-15: /share item layout parity with /list */
.endpoint-list_share .shopping-item-row,
.endpoint-shared_list .shopping-item-row {
overflow: hidden;
padding: .8rem .95rem;
}
.endpoint-list_share .shopping-item-main,
.endpoint-shared_list .shopping-item-main,
.endpoint-view_list .shopping-item-main,
.endpoint-list .shopping-item-main {
display: flex;
align-items: center;
gap: .75rem;
width: 100%;
}
.endpoint-list_share .shopping-item-content,
.endpoint-shared_list .shopping-item-content,
.endpoint-view_list .shopping-item-content,
.endpoint-list .shopping-item-content {
flex: 1 1 auto;
min-width: 0;
width: auto;
}
.endpoint-list_share .shopping-item-head,
.endpoint-shared_list .shopping-item-head,
.endpoint-view_list .shopping-item-head,
.endpoint-list .shopping-item-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: .75rem;
}
.endpoint-list_share .shopping-item-text,
.endpoint-shared_list .shopping-item-text,
.endpoint-view_list .shopping-item-text,
.endpoint-list .shopping-item-text {
flex: 1 1 auto;
min-width: 0;
display: flex;
align-items: center;
align-content: center;
gap: .35rem;
flex-wrap: wrap;
}
.endpoint-list_share .shopping-item-name,
.endpoint-shared_list .shopping-item-name,
.endpoint-view_list .shopping-item-name,
.endpoint-list .shopping-item-name {
display: inline;
min-width: 0;
max-width: 100%;
white-space: normal;
overflow-wrap: break-word;
word-break: normal;
}
.endpoint-list_share .shopping-item-text .badge,
.endpoint-shared_list .shopping-item-text .badge,
.endpoint-view_list .shopping-item-text .badge,
.endpoint-list .shopping-item-text .badge,
.endpoint-list_share .shopping-item-text .info-line,
.endpoint-shared_list .shopping-item-text .info-line,
.endpoint-view_list .shopping-item-text .info-line,
.endpoint-list .shopping-item-text .info-line {
align-self: center;
}
.endpoint-list_share .shopping-item-text .info-line,
.endpoint-shared_list .shopping-item-text .info-line,
.endpoint-view_list .shopping-item-text .info-line,
.endpoint-list .shopping-item-text .info-line {
display: block;
flex: 0 0 100%;
width: 100%;
margin-top: .1rem;
white-space: normal;
overflow-wrap: break-word;
word-break: normal;
}
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions,
.endpoint-view_list .shopping-item-actions,
.endpoint-list .shopping-item-actions {
display: inline-flex;
flex: 0 0 auto;
flex-wrap: nowrap;
align-items: center;
align-self: center;
justify-content: flex-end;
gap: .35rem;
margin-left: 0;
white-space: nowrap;
}
.endpoint-list_share .shopping-item-actions .btn,
.endpoint-shared_list .shopping-item-actions .btn {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 2.25rem;
padding: .34rem .48rem;
}
.endpoint-list_share .shopping-item-main > .large-checkbox,
.endpoint-shared_list .shopping-item-main > .large-checkbox,
.endpoint-view_list .shopping-item-main > .large-checkbox {
flex: 0 0 auto;
align-self: center;
}
@media (max-width: 575.98px) {
.endpoint-list_share .shopping-item-main,
.endpoint-shared_list .shopping-item-main,
.endpoint-view_list .shopping-item-main,
.endpoint-list .shopping-item-main {
gap: .55rem;
}
.endpoint-list_share .shopping-item-head,
.endpoint-shared_list .shopping-item-head,
.endpoint-view_list .shopping-item-head,
.endpoint-list .shopping-item-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: .45rem;
}
.endpoint-list_share .shopping-item-text,
.endpoint-shared_list .shopping-item-text,
.endpoint-view_list .shopping-item-text,
.endpoint-list .shopping-item-text {
flex: 1 1 auto;
min-width: 0;
gap: .25rem;
}
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions,
.endpoint-view_list .shopping-item-actions,
.endpoint-list .shopping-item-actions {
align-self: start;
width: auto;
margin-left: auto;
gap: .25rem;
}
.endpoint-list_share .shopping-item-actions .btn,
.endpoint-shared_list .shopping-item-actions .btn {
min-width: 2rem;
padding: .3rem .42rem;
}
}
.endpoint-list_share input[type="checkbox"].large-checkbox::before,
.endpoint-shared_list input[type="checkbox"].large-checkbox::before {
font-size: 1.75em;
}
/* mobile menu simplification 2026-03-15 */
.app-mobile-menu {
display: flex;
align-items: center;
}
.app-mobile-menu__toggle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 3rem;
height: 3rem;
border-radius: 14px;
background: rgba(255,255,255,0.04);
}
.app-mobile-menu__panel {
min-width: 14rem;
padding: .4rem;
border-radius: 16px;
background: linear-gradient(180deg, rgba(14,22,35,0.98), rgba(9,15,26,0.98)) !important;
border: 1px solid rgba(255,255,255,0.1);
box-shadow: 0 18px 36px rgba(0,0,0,0.28);
}
.app-mobile-menu__item {
display: flex;
align-items: center;
gap: .55rem;
min-height: 2.6rem;
padding: .55rem .75rem;
color: #fff;
border-radius: 12px;
}
.app-mobile-menu__item:hover,
.app-mobile-menu__item:focus {
background: rgba(255,255,255,0.08);
color: #fff;
}
@media (min-width: 992px) {
.app-mobile-menu {
display: none !important;
}
}
/* v5.1 create-list temp toggle mobile/Desktop fix */
.create-list-input-group {
display: flex;
flex-wrap: nowrap !important;
align-items: stretch;
gap: 0 !important;
}
.create-list-input-group > .form-control {
flex: 1 1 auto !important;
width: 1% !important;
min-width: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
.create-list-input-group > .create-list-temp-toggle,
.create-list-input-group > #tempToggle {
flex: 0 0 auto !important;
width: auto !important;
min-width: 10rem;
margin-left: -1px;
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
border-top-right-radius: 14px !important;
border-bottom-right-radius: 14px !important;
background: rgba(255,255,255,0.03) !important;
border-color: var(--app-border) !important;
color: var(--app-text) !important;
transition: background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease;
}
.create-list-input-group > .create-list-temp-toggle.is-active,
.create-list-input-group > #tempToggle.is-active {
background: rgba(41, 209, 125, 0.16) !important;
border-color: rgba(41, 209, 125, 0.72) !important;
color: #9bf0c1 !important;
box-shadow: inset 0 0 0 1px rgba(41, 209, 125, 0.15);
}
.create-list-input-group > .create-list-temp-toggle:hover,
.create-list-input-group > #tempToggle:hover,
.create-list-input-group > .create-list-temp-toggle:focus,
.create-list-input-group > #tempToggle:focus {
background: rgba(255,255,255,0.06) !important;
color: var(--app-text) !important;
}
.create-list-input-group > .create-list-temp-toggle.is-active:hover,
.create-list-input-group > #tempToggle.is-active:hover,
.create-list-input-group > .create-list-temp-toggle.is-active:focus,
.create-list-input-group > #tempToggle.is-active:focus {
background: rgba(41, 209, 125, 0.2) !important;
color: #b7f7d2 !important;
}
@media (max-width: 767.98px) {
.create-list-input-group {
gap: 0 !important;
}
.create-list-input-group > .form-control {
padding-left: .9rem;
padding-right: .75rem;
}
.create-list-input-group > .create-list-temp-toggle,
.create-list-input-group > #tempToggle {
min-width: 8.75rem;
padding-left: .85rem;
padding-right: .85rem;
font-size: .92rem;
letter-spacing: 0;
}
}
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions,
.endpoint-view_list .shopping-item-actions,
.endpoint-list .shopping-item-actions {
gap: .35rem !important;
min-height: 2.35rem !important;
}
.endpoint-list_share .shopping-action-btn,
.endpoint-shared_list .shopping-action-btn,
.endpoint-view_list .shopping-action-btn,
.endpoint-list .shopping-action-btn {
width: 2.35rem !important;
height: 2.35rem !important;
min-width: 2.35rem !important;
min-height: 2.35rem !important;
padding: 0 !important;
border-radius: .7rem !important;
font-size: 1rem !important;
line-height: 1 !important;
}
.endpoint-list_share .shopping-action-btn--wide,
.endpoint-shared_list .shopping-action-btn--wide,
.endpoint-view_list .shopping-action-btn--wide,
.endpoint-list .shopping-action-btn--wide {
width: auto !important;
min-width: 5.9rem !important;
padding: 0 .8rem !important;
}
.endpoint-list_share .shopping-action-btn--countdown,
.endpoint-shared_list .shopping-action-btn--countdown,
.endpoint-view_list .shopping-action-btn--countdown,
.endpoint-list .shopping-action-btn--countdown {
width: auto !important;
min-width: 3.2rem !important;
padding: 0 .65rem !important;
}
.endpoint-list_share .shopping-action-btn > *,
.endpoint-shared_list .shopping-action-btn > *,
.endpoint-view_list .shopping-action-btn > *,
.endpoint-list .shopping-action-btn > * {
line-height: 1 !important;
}
@media (max-width: 575.98px) {
.endpoint-list_share .shopping-action-btn,
.endpoint-shared_list .shopping-action-btn,
.endpoint-view_list .shopping-action-btn,
.endpoint-list .shopping-action-btn {
width: 2.15rem !important;
height: 2.15rem !important;
min-width: 2.15rem !important;
min-height: 2.15rem !important;
border-radius: .65rem !important;
}
.endpoint-list_share .shopping-action-btn--wide,
.endpoint-shared_list .shopping-action-btn--wide,
.endpoint-view_list .shopping-action-btn--wide,
.endpoint-list .shopping-action-btn--wide {
min-width: 5.4rem !important;
padding: 0 .72rem !important;
}
}
@media (max-width: 575.98px) {
.endpoint-list_share .shopping-action-btn--countdown,
.endpoint-shared_list .shopping-action-btn--countdown,
.endpoint-view_list .shopping-action-btn--countdown,
.endpoint-list .shopping-action-btn--countdown {
min-width: 3rem !important;
padding: 0 .55rem !important;
}
}
body:not(.sorting-active) .drag-handle {
display: none !important;
}

View File

@@ -0,0 +1,492 @@
/* =========================================================
Consistent form controls + password toggle
========================================================= */
:root {
--ui-control-height: 42px;
--ui-control-radius: 14px;
--ui-control-focus-ring: 0 0 0 .25rem rgba(24, 64, 118, .18);
}
.ui-consistent-input {
min-height: var(--ui-control-height) !important;
border-radius: var(--ui-control-radius) !important;
}
.ui-password-group {
display: flex !important;
flex-wrap: nowrap !important;
align-items: stretch !important;
width: 100% !important;
gap: 0 !important;
overflow: hidden !important;
border: 1px solid var(--ui-border-strong) !important;
border-radius: var(--ui-control-radius) !important;
background: rgba(255,255,255,0.04) !important;
background-image: none !important;
box-shadow: none !important;
}
.ui-password-group:focus-within {
border-color: rgba(25, 135, 84, 0.6) !important;
box-shadow: 0 0 0 0.2rem rgba(25, 135, 84, 0.16) !important;
}
.ui-password-group > .form-control {
flex: 1 1 auto !important;
width: 1% !important;
min-width: 0 !important;
min-height: var(--ui-control-height) !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
background-clip: padding-box !important;
}
.ui-password-group > .form-control:focus {
box-shadow: none !important;
background: transparent !important;
background-color: transparent !important;
}
.ui-password-group > .ui-password-toggle {
appearance: none !important;
-webkit-appearance: none !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
flex: 0 0 46px !important;
width: 46px !important;
min-width: 46px !important;
min-height: var(--ui-control-height) !important;
padding: 0 !important;
margin: 0 !important;
cursor: pointer !important;
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
color: rgba(255,255,255,0.72) !important;
border: 0 !important;
border-left: 1px solid rgba(255, 255, 255, 0.10) !important;
border-radius: 0 !important;
box-shadow: none !important;
line-height: 1 !important;
}
.ui-password-group > .ui-password-toggle:hover,
.ui-password-group > .ui-password-toggle:focus,
.ui-password-group > .ui-password-toggle:focus-visible {
background: rgba(255,255,255,0.03) !important;
background-color: rgba(255,255,255,0.03) !important;
color: #fff !important;
border-left-color: rgba(255,255,255,0.16) !important;
box-shadow: none !important;
outline: none !important;
}
.ui-password-group > .ui-password-toggle.is-active {
background: rgba(255,255,255,0.05) !important;
background-color: rgba(255,255,255,0.05) !important;
color: #fff !important;
}
.ui-password-group > .ui-password-toggle > * {
pointer-events: none !important;
}
.endpoint-login form .form-control:not(.form-control-sm),
.endpoint-system_auth form .form-control:not(.form-control-sm),
.endpoint-edit_my_list form .form-control:not(.form-control-sm):not(.form-control-plaintext),
.endpoint-edit_list form .form-control:not(.form-control-sm):not(.form-control-plaintext),
.endpoint-user_management form .form-control:not(.form-control-sm),
.endpoint-user_management .modal .form-control:not(.form-control-sm),
.endpoint-edit_my_list form .form-select,
.endpoint-edit_list form .form-select,
.endpoint-user_management form .form-select,
.endpoint-user_management .modal .form-select {
min-height: var(--ui-control-height) !important;
}
.endpoint-login form .form-control.ui-consistent-input,
.endpoint-system_auth form .form-control.ui-consistent-input,
.endpoint-edit_my_list form .ui-consistent-input,
.endpoint-edit_list form .ui-consistent-input,
.endpoint-user_management form .ui-consistent-input,
.endpoint-user_management .modal .ui-consistent-input {
border-radius: var(--ui-control-radius) !important;
}
/*
Password fields use only the generic ui-password-group rules above.
Keep endpoint-specific overrides out of login/system_auth/admin screens,
otherwise future changes start fighting through selector specificity.
*/
.ui-password-group > .form-control.ui-consistent-input {
border-radius: 0 !important;
}
.endpoint-edit_my_list .access-editor .access-input,
.endpoint-edit_list .input-group.input-group-sm .form-control {
min-height: var(--ui-control-height) !important;
}
@media (max-width: 575.98px) {
.ui-password-group > .ui-password-toggle {
flex-basis: 44px !important;
width: 44px !important;
min-width: 44px !important;
}
}
/* wyróżnienie pola dodawania produktu */
.endpoint-list .shopping-entry-card,
.endpoint-list_share .shopping-entry-card,
.endpoint-shared_list .shopping-entry-card,
.endpoint-view_list .shopping-entry-card {
background: linear-gradient(180deg, rgba(25, 135, 84, 0.16), rgba(13, 17, 23, 0.92));
border: 1px solid rgba(25, 135, 84, 0.42);
border-radius: 1rem;
padding: .9rem;
box-shadow: 0 .5rem 1.2rem rgba(0, 0, 0, 0.18);
}
.endpoint-list .shopping-entry-card__label,
.endpoint-list_share .shopping-entry-card__label,
.endpoint-shared_list .shopping-entry-card__label,
.endpoint-view_list .shopping-entry-card__label {
display: inline-flex;
align-items: center;
gap: .4rem;
margin-bottom: .2rem;
font-size: .95rem;
font-weight: 700;
color: #d1f7df;
}
.endpoint-list .shopping-entry-card__hint,
.endpoint-list_share .shopping-entry-card__hint,
.endpoint-shared_list .shopping-entry-card__hint,
.endpoint-view_list .shopping-entry-card__hint {
margin-bottom: .75rem;
color: rgba(255, 255, 255, 0.72);
font-size: .82rem;
line-height: 1.35;
}
.endpoint-list .shopping-entry-card .shopping-product-input-group,
.endpoint-list_share .shopping-entry-card .shopping-product-input-group,
.endpoint-shared_list .shopping-entry-card .shopping-product-input-group,
.endpoint-view_list .shopping-entry-card .shopping-product-input-group {
margin-bottom: 0 !important;
}
.endpoint-list .shopping-entry-card .shopping-product-input-group > .form-control,
.endpoint-list_share .shopping-entry-card .shopping-product-input-group > .form-control,
.endpoint-shared_list .shopping-entry-card .shopping-product-input-group > .form-control,
.endpoint-view_list .shopping-entry-card .shopping-product-input-group > .form-control {
border-color: rgba(25, 135, 84, 0.55) !important;
background: rgba(17, 24, 39, 0.95) !important;
}
.endpoint-list .shopping-entry-card .shopping-product-input-group > .form-control::placeholder,
.endpoint-list_share .shopping-entry-card .shopping-product-input-group > .form-control::placeholder,
.endpoint-shared_list .shopping-entry-card .shopping-product-input-group > .form-control::placeholder,
.endpoint-view_list .shopping-entry-card .shopping-product-input-group > .form-control::placeholder {
color: rgba(255, 255, 255, 0.62);
}
.endpoint-list .shopping-entry-card .shopping-product-input-group > .shopping-product-name-input:focus,
.endpoint-list_share .shopping-entry-card .shopping-product-input-group > .shopping-product-name-input:focus,
.endpoint-shared_list .shopping-entry-card .shopping-product-input-group > .shopping-product-name-input:focus,
.endpoint-view_list .shopping-entry-card .shopping-product-input-group > .shopping-product-name-input:focus {
box-shadow: inset 0 0 0 1px rgba(25, 135, 84, 0.25), 0 0 0 .2rem rgba(25, 135, 84, 0.18);
}
@media (max-width: 767.98px) {
.endpoint-list .shopping-entry-card,
.endpoint-list_share .shopping-entry-card,
.endpoint-shared_list .shopping-entry-card,
.endpoint-view_list .shopping-entry-card {
padding: .8rem;
border-radius: .95rem;
}
.endpoint-list .shopping-entry-card__label,
.endpoint-list_share .shopping-entry-card__label,
.endpoint-shared_list .shopping-entry-card__label,
.endpoint-view_list .shopping-entry-card__label {
font-size: .92rem;
}
.endpoint-list .shopping-entry-card__hint,
.endpoint-list_share .shopping-entry-card__hint,
.endpoint-shared_list .shopping-entry-card__hint,
.endpoint-view_list .shopping-entry-card__hint {
font-size: .78rem;
margin-bottom: .65rem;
}
}
/* ========== /expenses mobile fixes: separate range pickers + better wrapping ========== */
.endpoint-expenses .expenses-range-toolbar {
width: 100%;
}
.endpoint-expenses .expenses-range-group {
flex-wrap: wrap;
justify-content: center;
width: 100%;
}
.endpoint-expenses .expenses-range-group > .btn {
white-space: nowrap;
}
.endpoint-expenses .expenses-date-range {
align-items: stretch;
}
@media (max-width: 767.98px) {
.endpoint-expenses .expenses-range-toolbar {
justify-content: stretch !important;
overflow: visible;
padding-bottom: 0;
}
.endpoint-expenses .expenses-range-group {
display: grid !important;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.55rem;
width: 100%;
min-width: 0;
}
.endpoint-expenses .expenses-table-toolbar .expenses-range-group {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.endpoint-expenses .expenses-range-group > .btn {
flex: initial !important;
width: 100%;
min-width: 0;
padding-inline: 0.55rem;
font-size: 0.95rem;
}
.endpoint-expenses .expenses-date-range {
display: grid !important;
grid-template-columns: 52px minmax(0, 1fr);
gap: 0.55rem;
width: 100%;
max-width: 100% !important;
flex-wrap: wrap !important;
}
.endpoint-expenses .expenses-date-range > .input-group-text,
.endpoint-expenses .expenses-date-range > .form-control,
.endpoint-expenses .expenses-date-range > .btn {
width: 100% !important;
min-width: 0 !important;
flex: initial !important;
border-radius: 0.85rem !important;
}
.endpoint-expenses .expenses-date-range > .btn {
grid-column: 1 / -1;
}
}
/* /share expense entry card aligned with product card */
.endpoint-list .shopping-entry-card--expense,
.endpoint-list_share .shopping-entry-card--expense,
.endpoint-shared_list .shopping-entry-card--expense,
.endpoint-view_list .shopping-entry-card--expense {
background: linear-gradient(180deg, rgba(13, 110, 253, 0.16), rgba(13, 17, 23, 0.92));
border-color: rgba(13, 110, 253, 0.42);
}
.endpoint-list .shopping-entry-card--expense .shopping-entry-card__label,
.endpoint-list_share .shopping-entry-card--expense .shopping-entry-card__label,
.endpoint-shared_list .shopping-entry-card--expense .shopping-entry-card__label,
.endpoint-view_list .shopping-entry-card--expense .shopping-entry-card__label {
color: #d7e9ff;
}
.endpoint-list .shopping-entry-card--expense .shopping-expense-input-group,
.endpoint-list_share .shopping-entry-card--expense .shopping-expense-input-group,
.endpoint-shared_list .shopping-entry-card--expense .shopping-expense-input-group,
.endpoint-view_list .shopping-entry-card--expense .shopping-expense-input-group {
margin-bottom: 0 !important;
}
.endpoint-list .shopping-entry-card--expense .shopping-expense-input-group > .form-control,
.endpoint-list_share .shopping-entry-card--expense .shopping-expense-input-group > .form-control,
.endpoint-shared_list .shopping-entry-card--expense .shopping-expense-input-group > .form-control,
.endpoint-view_list .shopping-entry-card--expense .shopping-expense-input-group > .form-control {
border-color: rgba(13, 110, 253, 0.55) !important;
background: rgba(17, 24, 39, 0.95) !important;
}
.endpoint-list .shopping-entry-card--expense .shopping-expense-input-group > .form-control::placeholder,
.endpoint-list_share .shopping-entry-card--expense .shopping-expense-input-group > .form-control::placeholder,
.endpoint-shared_list .shopping-entry-card--expense .shopping-expense-input-group > .form-control::placeholder,
.endpoint-view_list .shopping-entry-card--expense .shopping-expense-input-group > .form-control::placeholder {
color: rgba(255, 255, 255, 0.62);
}
.endpoint-list .shopping-entry-card--expense .shopping-expense-input-group > .shopping-expense-amount-input:focus,
.endpoint-list_share .shopping-entry-card--expense .shopping-expense-input-group > .shopping-expense-amount-input:focus,
.endpoint-shared_list .shopping-entry-card--expense .shopping-expense-input-group > .shopping-expense-amount-input:focus,
.endpoint-view_list .shopping-entry-card--expense .shopping-expense-input-group > .shopping-expense-amount-input:focus {
box-shadow: inset 0 0 0 1px rgba(13, 110, 253, 0.25), 0 0 0 .2rem rgba(13, 110, 253, 0.18);
}
.endpoint-list .share-submit-btn--expense,
.endpoint-list_share .share-submit-btn--expense,
.endpoint-shared_list .share-submit-btn--expense,
.endpoint-view_list .share-submit-btn--expense {
color: #8ec5ff;
border-color: rgba(13, 110, 253, 0.72) !important;
background: rgba(13, 110, 253, 0.12);
}
.endpoint-list .share-submit-btn--expense:hover,
.endpoint-list_share .share-submit-btn--expense:hover,
.endpoint-shared_list .share-submit-btn--expense:hover,
.endpoint-view_list .share-submit-btn--expense:hover,
.endpoint-list .share-submit-btn--expense:focus,
.endpoint-list_share .share-submit-btn--expense:focus,
.endpoint-shared_list .share-submit-btn--expense:focus,
.endpoint-view_list .share-submit-btn--expense:focus {
color: #fff;
border-color: rgba(13, 110, 253, 0.9) !important;
background: rgba(13, 110, 253, 0.22);
box-shadow: 0 0 0 .2rem rgba(13, 110, 253, 0.16);
}
/* UX polish 2026-03-19: list quick actions card */
.list-quick-actions {
display: grid;
gap: .9rem;
padding: 1rem;
border: 1px solid rgba(255,255,255,.08);
border-radius: 1rem;
background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.02));
box-shadow: 0 .5rem 1.25rem rgba(0,0,0,.14);
}
.list-quick-actions__header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: .75rem;
}
.list-quick-actions__eyebrow {
font-size: .72rem;
letter-spacing: .08em;
text-transform: uppercase;
color: rgba(255,255,255,.58);
margin-bottom: .15rem;
}
.list-quick-actions__title {
font-size: 1rem;
font-weight: 700;
color: #fff;
line-height: 1.2;
}
.list-quick-actions__hint {
font-size: .82rem;
color: rgba(255,255,255,.62);
text-align: right;
max-width: 18rem;
}
.list-quick-actions__grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: .75rem;
}
.list-quick-actions__form {
display: block;
}
.list-quick-actions__action.btn {
width: 100%;
min-height: 78px;
display: flex;
align-items: flex-start;
gap: .75rem;
padding: .9rem 1rem;
border-radius: .95rem;
text-align: left;
white-space: normal;
}
.list-quick-actions__action--primary.btn {
border-color: rgba(255,255,255,.2);
background: rgba(255,255,255,.03);
}
.list-quick-actions__action--secondary.btn {
border-color: rgba(13,110,253,.5);
background: rgba(13,110,253,.08);
}
.list-quick-actions__icon {
flex: 0 0 auto;
font-size: 1.05rem;
line-height: 1;
margin-top: .1rem;
}
.list-quick-actions__content {
display: grid;
gap: .2rem;
min-width: 0;
}
.list-quick-actions__label {
font-size: .95rem;
font-weight: 600;
color: #fff;
line-height: 1.25;
}
.list-quick-actions__desc {
font-size: .81rem;
color: rgba(255,255,255,.66);
line-height: 1.35;
}
@media (max-width: 767.98px) {
.list-quick-actions {
padding: .9rem;
gap: .75rem;
}
.list-quick-actions__header {
flex-direction: column;
gap: .35rem;
}
.list-quick-actions__hint {
max-width: none;
text-align: left;
}
.list-quick-actions__grid {
grid-template-columns: 1fr;
}
.list-quick-actions__action.btn {
min-height: 72px;
padding: .85rem .9rem;
}
}

View File

@@ -0,0 +1,268 @@
/* =========================================================
Mobile navbar and user chip
========================================================= */
.app-navbar__meta--mobile {
display: none;
}
.app-user-chip--mobile {
max-width: min(46vw, 15rem);
min-width: 0;
padding-left: .6rem;
padding-right: .4rem;
}
.app-user-chip--mobile .badge {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@media (max-width: 991.98px) {
.app-navbar .container-xxl {
grid-template-columns: minmax(0, 1fr) auto auto;
}
.app-navbar__meta--mobile {
display: flex !important;
width: auto;
justify-content: flex-end;
justify-self: end;
grid-column: 2;
min-width: 0;
max-width: min(42vw, 12rem);
}
.app-user-chip--mobile {
display: inline-flex;
}
.app-mobile-menu {
grid-column: 3;
justify-self: end;
}
}
@media (max-width: 575.98px) {
.app-brand__icon {
width: 2.25rem;
height: 2.25rem;
}
.app-user-chip--mobile {
gap: .35rem;
padding: .34rem .38rem .34rem .5rem;
}
.app-user-chip--mobile .app-user-chip__label {
font-size: .62rem;
letter-spacing: .05em;
}
.app-user-chip--mobile .badge {
font-size: .72rem;
max-width: 5.9rem;
}
}
@media (max-width: 430px) {
.app-navbar .container-xxl {
grid-template-columns: minmax(0, 1fr) auto auto;
gap: .45rem;
}
.app-user-chip--mobile {
max-width: min(38vw, 8.5rem);
}
.app-user-chip--mobile .app-user-chip__label {
display: none;
}
}
/* --- Main page list progress consistency --- */
.endpoint-main_page .list-group-item {
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: flex-start;
}
.endpoint-main_page .main-list-progress-wrap {
display: block;
width: 100%;
flex: 0 0 100%;
margin-top: 0.8rem !important;
}
.endpoint-main_page .list-group-item > .main-list-row + .main-list-progress-wrap {
align-self: stretch;
}
.endpoint-main_page .main-list-progress {
width: 100%;
height: 16px;
margin-top: 0 !important;
border: 1px solid rgba(255, 255, 255, 0.08);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.02)),
var(--dark-700) !important;
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.05),
0 4px 10px rgba(0, 0, 0, 0.18);
}
.endpoint-main_page .main-list-progress .progress-bar.bg-success {
background: linear-gradient(135deg, rgba(40, 199, 111, 0.98), rgba(22, 163, 74, 0.98)) !important;
}
.endpoint-main_page .main-list-progress .progress-bar.bg-warning {
background: linear-gradient(135deg, rgba(245, 189, 65, 0.98), rgba(217, 119, 6, 0.98)) !important;
}
.endpoint-main_page .main-list-progress .progress-bar.bg-transparent {
background: rgba(255, 255, 255, 0.08) !important;
}
.endpoint-main_page .main-list-progress__label {
max-width: calc(100% - 0.85rem);
padding: 0 0.45rem;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
letter-spacing: 0.01em;
}
@media (max-width: 575.98px) {
.endpoint-main_page .main-list-progress {
height: 15px;
}
.endpoint-main_page .main-list-progress__label {
font-size: 0.64rem;
}
}
.endpoint-main_page #mainStatsCollapse.collapsing,
.endpoint-main_page #mainStatsCollapse.show {
overflow: visible;
}
.endpoint-main_page .main-summary-card {
height: 100%;
padding: 1rem 1rem 1.05rem;
border-radius: 1rem;
border: 1px solid rgba(255, 255, 255, 0.08);
background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02)), rgba(9, 16, 28, 0.88);
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.2);
}
.endpoint-main_page .main-summary-card__eyebrow {
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: rgba(255, 255, 255, 0.65);
margin-bottom: 0.2rem;
}
.endpoint-main_page .main-summary-card__title {
font-size: 1.05rem;
}
.endpoint-main_page .main-summary-stats {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.7rem;
}
.endpoint-main_page .main-summary-stat {
padding: 0.65rem 0.75rem;
border-radius: 0.85rem;
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.06);
}
.endpoint-main_page .main-summary-stat__label {
display: block;
font-size: 0.73rem;
color: rgba(255, 255, 255, 0.66);
margin-bottom: 0.15rem;
}
@media (max-width: 575.98px) {
.endpoint-main_page .main-summary-card {
padding: 0.9rem;
}
.endpoint-main_page .main-summary-stats {
grid-template-columns: 1fr;
}
}
@media (max-width: 575.98px) {
.endpoint-list_share .shopping-item-head,
.endpoint-shared_list .shopping-item-head {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: start;
column-gap: .45rem;
}
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions {
align-self: start;
margin-left: 0;
justify-self: end;
}
}
@media (max-width: 575.98px) {
.endpoint-list_share .shopping-item-main,
.endpoint-shared_list .shopping-item-main {
align-items: center;
}
.endpoint-list_share .shopping-item-text,
.endpoint-shared_list .shopping-item-text,
.endpoint-list_share .shopping-item-main > .large-checkbox,
.endpoint-shared_list .shopping-item-main > .large-checkbox,
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions {
align-self: center;
}
.endpoint-list_share .shopping-item-actions,
.endpoint-shared_list .shopping-item-actions {
margin-left: auto;
justify-self: auto;
}
}
.endpoint-list #items,
.endpoint-view_list #items,
.endpoint-list_share #items,
.endpoint-shared_list #items {
display: flex;
flex-direction: column;
}
.endpoint-list #items > .list-group-item,
.endpoint-view_list #items > .list-group-item,
.endpoint-list_share #items > .list-group-item,
.endpoint-shared_list #items > .list-group-item {
margin: 0 !important;
border-width: 1px !important;
box-shadow: 0 4px 14px rgba(0,0,0,0.12) !important;
background-clip: padding-box;
}
.endpoint-list #items > .list-group-item + .list-group-item,
.endpoint-view_list #items > .list-group-item + .list-group-item,
.endpoint-list_share #items > .list-group-item + .list-group-item,
.endpoint-shared_list #items > .list-group-item + .list-group-item {
margin-top: 0 !important;
border-top-width: 1px !important;
}

View File

@@ -0,0 +1,67 @@
/* =========================================================
Preview product list
========================================================= */
.preview-product-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.preview-product-summary {
padding: 0 0 0.85rem;
margin-bottom: 0.1rem;
border-bottom: 1px solid rgba(255,255,255,0.08);
}
.preview-product-section {
display: flex;
flex-direction: column;
gap: 0.65rem;
}
.preview-product-section-title {
margin: 0;
font-size: 1.05rem;
font-weight: 700;
}
.preview-modal-items {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
#productPreviewModal .preview-modal-list-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
width: 100%;
min-width: 0;
padding: 0.9rem 1rem;
margin: 0 !important;
border-radius: 16px !important;
border: 1px solid rgba(255,255,255,0.08) !important;
background: linear-gradient(180deg, rgba(11,22,40,0.92) 0%, rgba(8,16,30,0.92) 100%) !important;
box-shadow: inset 0 1px 0 rgba(255,255,255,0.03);
}
#productPreviewModal .preview-modal-list-item:first-child,
#productPreviewModal .preview-modal-list-item:last-child,
#productPreviewModal .list-group-flush > .list-group-item:first-child,
#productPreviewModal .list-group-flush > .list-group-item:last-child {
border-radius: 16px !important;
}
#productPreviewModal .preview-modal-list-item__name {
min-width: 0;
overflow-wrap: anywhere;
flex: 1 1 auto;
}
#productPreviewModal .preview-modal-list-item .badge {
flex-shrink: 0;
min-width: 2.5rem;
border-radius: 10px;
}

View File

@@ -0,0 +1,111 @@
/* =========================================================
Receipt disclosure (share view)
========================================================= */
.receipt-disclosure {
width: 100%;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 20px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.02));
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
}
.receipt-disclosure:hover,
.receipt-disclosure:focus-visible {
transform: translateY(-1px);
border-color: rgba(255, 255, 255, 0.18);
box-shadow: 0 16px 36px rgba(0, 0, 0, 0.24);
outline: none;
}
.receipt-disclosure.is-open {
border-color: rgba(24, 64, 118, 0.9);
background: linear-gradient(135deg, rgba(24, 64, 118, 0.22), rgba(255, 255, 255, 0.03));
}
.receipt-disclosure__content {
display: flex;
align-items: center;
gap: 14px;
padding: 16px 18px;
}
.receipt-disclosure__icon {
display: grid;
place-items: center;
width: 48px;
height: 48px;
border-radius: 14px;
background: rgba(255, 255, 255, 0.06);
font-size: 1.25rem;
flex-shrink: 0;
}
.receipt-disclosure__text {
min-width: 0;
flex: 1;
}
.receipt-disclosure__eyebrow {
font-size: 0.72rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(255, 255, 255, 0.52);
margin-bottom: 2px;
}
.receipt-disclosure__title {
font-size: 1rem;
font-weight: 600;
color: var(--text-strong);
}
.receipt-disclosure__meta {
display: flex;
align-items: center;
gap: 12px;
margin-left: auto;
flex-shrink: 0;
}
.receipt-disclosure__count {
min-width: 34px;
padding: 6px 10px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.08);
color: var(--text-strong);
font-size: 0.875rem;
text-align: center;
}
.receipt-disclosure__chevron {
font-size: 1.15rem;
color: rgba(255, 255, 255, 0.7);
transition: transform 0.2s ease;
}
.receipt-disclosure.is-open .receipt-disclosure__chevron {
transform: rotate(180deg);
}
@media (max-width: 575.98px) {
.receipt-disclosure__content {
padding: 14px;
gap: 12px;
}
.receipt-disclosure__icon {
width: 42px;
height: 42px;
border-radius: 12px;
}
.receipt-disclosure__meta {
gap: 10px;
}
.receipt-disclosure__title {
font-size: 0.95rem;
}
}

View File

@@ -0,0 +1,346 @@
/* =========================================================
form-control normalization
========================================================= */
.endpoint-edit_my_list .stack-form > .mb-3 > .ui-consistent-input,
.endpoint-edit_my_list .stack-form > .mb-4 > .ui-consistent-input,
.endpoint-edit_my_list .stack-form .row .ui-consistent-input,
.endpoint-edit_list form > .mb-3 > .ui-consistent-input,
.endpoint-edit_list form > .mb-4 > .ui-consistent-input,
.endpoint-edit_list form .row .ui-consistent-input,
.endpoint-user_management .row > [class*="col-"] > .ui-consistent-input,
.endpoint-user_management .modal .ui-consistent-input {
border-radius: var(--ui-control-radius) !important;
}
.endpoint-edit_my_list .ts-wrapper.single .ts-control,
.endpoint-edit_list .ts-wrapper.single .ts-control,
.endpoint-edit_my_list .ts-wrapper.multi .ts-control,
.endpoint-edit_list .ts-wrapper.multi .ts-control {
min-height: var(--ui-control-height) !important;
border-radius: var(--ui-control-radius) !important;
}
/* Share hub */
.share-hub {
border: 1px solid rgba(79, 142, 255, 0.18);
background: linear-gradient(180deg, rgba(11, 24, 43, 0.98), rgba(8, 17, 31, 0.96)) !important;
}
.share-hub .card-body {
padding: 1rem;
}
.share-hub__top {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 0.9rem;
margin-bottom: 0.85rem;
}
.share-hub__eyebrow,
.share-sheet__eyebrow {
font-size: 0.72rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(186, 210, 240, 0.62);
margin-bottom: 0.35rem;
}
.share-hub__title {
font-size: 1.1rem;
font-weight: 700;
}
.share-hub__status,
.share-sheet__section-head {
display: flex;
flex-wrap: wrap;
gap: 0.45rem;
align-items: center;
}
.share-state-badge {
display: inline-flex;
align-items: center;
gap: 0.3rem;
min-height: 32px;
padding: 0.45rem 0.72rem;
font-size: 0.76rem;
font-weight: 600;
border: 1px solid rgba(255, 255, 255, 0.08);
}
.share-state-badge--public {
background: rgba(41, 209, 125, 0.16);
color: #dfffea;
}
.share-state-badge--private {
background: rgba(255, 255, 255, 0.06);
color: #edf5ff;
}
.share-state-badge--link {
background: rgba(79, 142, 255, 0.14);
color: #d7e7ff;
}
.share-state-badge--people {
background: rgba(255, 255, 255, 0.08);
color: #edf5ff;
}
.share-hub__note {
color: rgba(210, 224, 244, 0.74);
font-size: 0.92rem;
line-height: 1.45;
}
.share-hub__linkbox {
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.035);
border-radius: 16px;
padding: 0.85rem 0.95rem;
}
.share-hub__linklabel {
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.07em;
color: rgba(186, 210, 240, 0.58);
margin-bottom: 0.3rem;
}
.share-hub__linkvalue {
color: #f4f8ff;
font-size: 0.95rem;
line-height: 1.45;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.share-hub__actions {
display: grid;
grid-template-columns: 1fr;
gap: 0.65rem;
}
.share-hub__primary,
.share-hub__secondary,
.share-hub__manage,
.share-sheet__toggle,
.share-sheet__sticky-actions .btn,
.share-sheet__linkstack .btn,
.share-hub__manage {
white-space: nowrap;
}
.share-sheet {
height: auto !important;
max-height: min(90vh, 760px);
border-top-left-radius: 24px;
border-top-right-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.06);
background: linear-gradient(180deg, rgba(8, 18, 33, 0.995), rgba(6, 13, 24, 0.99)) !important;
box-shadow: 0 -24px 60px rgba(0, 0, 0, 0.42);
}
.share-sheet__header {
align-items: flex-start;
padding: 0.85rem 1rem 0.6rem;
}
.share-sheet__body {
padding: 0 1rem calc(1rem + env(safe-area-inset-bottom));
overflow-y: auto;
}
.share-sheet__grabber {
width: 52px;
height: 5px;
border-radius: 999px;
margin: 0 auto 0.8rem;
background: rgba(255, 255, 255, 0.22);
}
.share-sheet__section {
border: 1px solid rgba(255, 255, 255, 0.07);
background: rgba(255, 255, 255, 0.035);
border-radius: 18px;
padding: 0.95rem;
margin-bottom: 0.9rem;
}
.share-sheet__section-head {
justify-content: space-between;
margin-bottom: 0.7rem;
font-weight: 600;
}
.share-sheet__linkstack,
.share-access-panel__input {
display: grid;
grid-template-columns: 1fr;
gap: 0.65rem;
}
.share-access-panel .tokens {
min-height: 2rem;
}
.share-access-panel .token {
background: rgba(255, 255, 255, 0.03);
}
.share-sheet__sticky-actions {
position: sticky;
bottom: 0;
padding-top: 0.3rem;
background: linear-gradient(180deg, rgba(6, 13, 24, 0), rgba(6, 13, 24, 0.96) 28%);
}
@media (min-width: 576px) {
.share-hub .card-body,
.share-sheet__header,
.share-sheet__body {
padding-left: 1.2rem;
padding-right: 1.2rem;
}
.share-sheet__linkstack,
.share-access-panel__input {
grid-template-columns: 1fr auto;
align-items: center;
}
}
@media (min-width: 768px) {
.share-hub .card-body {
padding: 1.15rem 1.2rem;
}
.share-hub__actions {
grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
}
.share-sheet {
max-width: 760px;
margin: 0 auto;
left: 0;
right: 0;
}
}
/* v5.2 create-list unity + receipt collapse fix */
.endpoint-main_page .create-list-input-group {
display: flex;
flex-wrap: nowrap !important;
align-items: stretch;
overflow: hidden;
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.12);
background: rgba(7, 17, 31, 0.9);
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.18);
}
.endpoint-main_page .create-list-input-group > .create-list-title-input,
.endpoint-main_page .create-list-input-group > .form-control {
border: 0 !important;
border-right: 1px solid rgba(255, 255, 255, 0.08) !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
}
.endpoint-main_page .create-list-input-group > .create-list-title-input:focus,
.endpoint-main_page .create-list-input-group > .form-control:focus {
background: rgba(255, 255, 255, 0.02) !important;
box-shadow: none !important;
}
.endpoint-main_page .create-list-input-group > .create-list-temp-toggle,
.endpoint-main_page .create-list-input-group > #tempToggle {
min-width: 9.5rem;
border: 0 !important;
border-radius: 0 !important;
background: rgba(255, 255, 255, 0.04) !important;
box-shadow: none !important;
}
.endpoint-main_page .create-list-input-group > .create-list-temp-toggle.is-active,
.endpoint-main_page .create-list-input-group > #tempToggle.is-active {
background: rgba(41, 209, 125, 0.18) !important;
}
.endpoint-main_page .create-list-temp-toggle__label {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 100%;
}
.endpoint-main_page .create-list-input-group:focus-within {
border-color: rgba(41, 209, 125, 0.55);
box-shadow: 0 0 0 0.18rem rgba(41, 209, 125, 0.12), 0 10px 28px rgba(0, 0, 0, 0.18);
}
.receipt-disclosure {
display: block;
padding: 0;
text-align: left;
}
.receipt-disclosure,
.receipt-disclosure:hover,
.receipt-disclosure:focus,
.receipt-disclosure:active {
width: 100%;
appearance: none;
-webkit-appearance: none;
}
.receipt-disclosure:focus-visible {
outline: none;
}
.receipt-section--restoring {
transition: none !important;
}
@media (max-width: 767.98px) {
.endpoint-main_page .create-list-input-group {
border-radius: 14px;
}
.endpoint-main_page .create-list-input-group > .create-list-temp-toggle,
.endpoint-main_page .create-list-input-group > #tempToggle {
min-width: 8.25rem;
padding-left: .8rem;
padding-right: .8rem;
font-size: .9rem;
}
}
@media (max-width: 575.98px) {
.endpoint-main_page .create-list-input-group > .create-list-title-input,
.endpoint-main_page .create-list-input-group > .form-control {
padding-left: .85rem;
padding-right: .7rem;
font-size: .95rem;
}
.endpoint-main_page .create-list-input-group > .create-list-temp-toggle,
.endpoint-main_page .create-list-input-group > #tempToggle {
min-width: 7.6rem;
font-size: .84rem;
}
.receipt-disclosure {
border-radius: 16px;
}
}

View File

@@ -10,7 +10,27 @@
<link rel="icon" type="image/svg+xml" href="{{ url_for('favicon') }}">
<link href="{{ static_asset_url('static_bp.serve_css_lib', 'bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'style.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/01-base.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/02-util.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/03-btn.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/04-form.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/05-ui.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/06-progress.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/07-table.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/08-nav.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/09-list.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/10-toast.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/11-modal.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/12-drop.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/13-compact-a.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/14-compact-b.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/15-share.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/16-row.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/17-control.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/18-mobile.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/19-preview.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/20-receipt.css') }}" rel="stylesheet">
<link href="{{ static_asset_url('static_bp.serve_css', 'split/21-fix.css') }}" rel="stylesheet">
{% set hide_login_ui = request.path == '/system-auth' %}