/* =========================== MODAL — FULLSCREEN OVERLAY =========================== */ .f-modal-overlay { @apply fixed inset-0 z-[9999] flex flex-col; background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(6px); animation: fadeIn 0.25s ease-out forwards; } .f-modal-close { @apply absolute top-4 right-6 text-3xl font-bold cursor-pointer transition-opacity; @apply text-[--f-text] opacity-70; } .f-modal-close:hover { @apply opacity-100; } /* panel – pełny ekran, ale treść centrowana max-w */ .f-modal-panel { @apply w-full h-full overflow-y-auto bg-[--f-background] text-[--f-text]; @apply px-6 py-8 md:px-12 md:py-12; } /* wersja "kompaktowa" z mniejszym max-width (używana w dodatkach) */ .f-modal-panel.f-modal-panel--compact { @apply flex justify-center items-start; } .f-modal-inner { @apply w-full max-w-4xl mx-auto; } .f-modal-title { @apply text-3xl md:text-4xl font-bold mb-8 text-center text-[--f-text]; } .f-modal-content p { @apply leading-relaxed text-2xl text-center; } .f-modal-content p img { @apply mt-2; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* =========================== TELEFON — AKORDEON =========================== */ .f-modal-phone-list.f-accordion { @apply flex flex-col gap-2; } .f-accordion-item { @apply rounded-xl border overflow-hidden bg-[--f-background]; border-color: rgba(148, 163, 184, 0.6); } .f-accordion-header { @apply w-full flex items-center justify-between gap-4 px-4 py-2 cursor-pointer; background: rgba(148, 163, 184, 0.06); border: none; outline: none; } .f-accordion-header-left { @apply flex items-center gap-1; } .f-modal-phone-name { @apply font-medium ml-2; } .f-modal-phone-price { @apply font-semibold whitespace-nowrap; } .f-accordion-body { @apply px-4 pt-2 pb-3; border-top: 1px solid rgba(148, 163, 184, 0.4); } /* wyróżnienie otwartego pakietu */ .f-accordion-item.is-open .f-accordion-header { background: color-mix(in srgb, var(--fuz-accent, #2563eb) 8%, transparent); } /* =========================== DODATKI — KOLUMNOWA LISTA (GRID) checkbox: checkbox | main | price quantity: slot | main | qty | price =========================== */ .f-addon-list { @apply flex flex-col gap-2; } /* BAZA: checkbox | main | price */ .f-addon-item { @apply grid items-start gap-3 px-3 py-2 rounded-xl border cursor-pointer; grid-template-columns: auto 1fr auto; border-color: rgba(148, 163, 184, 0.5); background: var(--f-background); } .f-addon-item:hover { border-color: color-mix( in srgb, var(--fuz-accent, #2563eb) 70%, rgba(148, 163, 184, 0.5) 30% ); } .f-addon-item input[type="checkbox"] { @apply cursor-pointer; } /* kolumna 1 */ .f-addon-checkbox { @apply flex items-center justify-center; align-items: center; margin-top: 0.1rem; } .f-addon-checkbox input[type="checkbox"] { width: 1.05rem; height: 1.05rem; transform: scale(1.05); accent-color: var(--fuz-accent, #2563eb); cursor: pointer; } /* kolumna 2 */ .f-addon-main { @apply flex flex-col gap-0.5; min-width: 0; } .f-addon-name { @apply font-medium; } .f-addon-desc { @apply text-sm opacity-85; } /* kolumna 3 (cena) */ .f-addon-price { @apply font-semibold whitespace-nowrap; justify-self: end; text-align: right; min-width: 140px; /* stała kolumna cen */ } /* suma pod ceną (quantity) */ .f-addon-price-total { margin-top: 0.15rem; font-size: 0.9em; font-weight: 600; opacity: 0.85; white-space: nowrap; color: var(--fuz-accent, #2563eb); } /* WARIANT: quantity -> slot | main | qty | price */ .f-addon-item--qty { grid-template-columns: auto 1fr auto auto; align-items: start; } /* “pusty” slot w kolumnie 1 (żeby wyrównać do checkboxa) */ .f-addon-item--qty .f-addon-checkbox { visibility: hidden; /* zajmuje miejsce, ale nie widać */ width: 1.05rem; height: 1.05rem; transform: scale(1.05); } /* kolumna qty (3) – bliżej prawej */ .f-addon-item--qty .f-addon-qty { justify-self: end; display: inline-flex; align-items: center; gap: 0.5rem; margin-top: 0.05rem; } /* wartość qty */ .f-addon-qty-value { min-width: 2ch; text-align: center; } /* mobile: w razie ciasnoty przenosimy qty pod main, cena zostaje po prawej */ @media (max-width: 640px) { .f-addon-item--qty { grid-template-columns: auto 1fr auto; grid-template-areas: "slot main price" "slot qty price"; } .f-addon-item--qty .f-addon-checkbox { grid-area: slot; } .f-addon-item--qty .f-addon-main { grid-area: main; } .f-addon-item--qty .f-addon-qty { grid-area: qty; justify-self: start; } .f-addon-item--qty .f-addon-price { grid-area: price; } } /* =========================== PODSUMOWANIE MIESIĘCZNE =========================== */ .f-summary { @apply pt-2; } .f-summary-list { @apply flex flex-col gap-1 mt-2 p-4 rounded-xl; background: rgba(148, 163, 184, 0.07); } .f-summary-row, .f-summary-total { @apply flex items-center justify-between; } .f-summary-row span:last-child { @apply font-medium whitespace-nowrap; } .f-summary-total { @apply mt-1 pt-2; border-top: 1px solid rgba(148, 163, 184, 0.4); } .f-summary-total span:last-child { @apply font-bold; font-size: 1.25rem; color: var(--fuz-accent, #2563eb); } .f-modal-section { @apply mb-6; } .f-modal-section h3 { @apply text-xl md:text-2xl font-semibold mb-3; } /* opcja "bez telefonu" */ .f-accordion-item--no-phone .f-accordion-header { background: rgba(148, 163, 184, 0.03); } .f-accordion-header-left input[type="radio"] { width: 1.05rem; height: 1.05rem; transform: scale(1.05); accent-color: var(--fuz-accent, #2563eb); cursor: pointer; } .f-addon-checkbox input[type="checkbox"] { width: 1.05rem; height: 1.05rem; transform: scale(1.05); accent-color: var(--fuz-accent, #2563eb); cursor: pointer; } .f-accordion-header-left, .f-addon-checkbox { align-items: center; } /* =========================== FLOATING TOTAL (dymek jak czat) =========================== */ .f-floating-total { position: fixed; right: 1rem; bottom: 1rem; z-index: 10000; /* wyżej niż overlay (9999) */ pointer-events: auto; } .f-floating-total-inner { @apply flex items-center gap-3; @apply px-4 py-3 rounded-2xl shadow-xl border; border-color: rgba(148, 163, 184, 0.5); background: color-mix(in srgb, var(--f-background) 92%, transparent); backdrop-filter: blur(10px); } .f-floating-total-label { @apply text-sm opacity-80; } .f-floating-total-value { @apply font-bold whitespace-nowrap; font-size: 1.1rem; color: var(--fuz-accent, #2563eb); } /* na bardzo małych ekranach lekko mniejszy dymek */ @media (max-width: 420px) { .f-floating-total-inner { @apply px-3 py-2; } .f-floating-total-value { font-size: 1rem; } } .f-addon-price-total { margin-top: 0.15rem; font-size: 0.9em; font-weight: 600; opacity: 0.85; white-space: nowrap; color: var(--fuz-accent, #2563eb); }