:root {
    --color-body-bg: #f4f6f9;
    --color-surface: #ffffff;
    --color-surface-muted: #e9ecef;
    --color-text: #212529;
    --color-text-muted: #5c6670;
    --color-text-subtle: #6c757d;
    --color-border-soft: #d8dee4;
    --color-shadow-soft: #0000001a;
    --color-shadow-strong: #0000002e;
    --color-primary: #0d6efd;
    --color-primary-dark: #0b5ed7;
    --color-secondary: #6c757d;
    --color-secondary-dark: #5c636a;
    --color-success: #198754;
    --color-success-dark: #157347;
    --color-menu: #ef7d32;
    --color-menu-dark: #dd6b20;
    --color-warning: #f59f00;
    --color-warning-dark: #d97706;
    --color-danger: #dc3545;
    --color-danger-dark: #b02a37;
    --color-info: #0dcaf0;
    --color-phone: #198754;
    --color-lock-surface: #00000014;
    --color-header-fg: #ffffff;
    --color-booking-standard: #0091ff;
    --color-booking-subscriber: #f2ff04;
    --color-booking-arrived: #40ff00;
    --color-focus-ring: #ffffffbf;
    --color-focus-ring-readonly: #0d6efd73;
    --color-checkbox-border: #999999;
    --color-grid-sea-surface: #0ac4e0;
    --color-grid-beach-surface: #ffe08f;
    --color-grid-grass-surface: #a2cb8b;
    --color-grid-cell-surface: #cbcbcb;
    --color-grid-cell-text: #000000;
    --color-grid-cell-hover-shadow: #00000033;
    --color-grid-cell-selected: #89d4ff;
    --color-booking-free: #cbcbcb;
    --grid-cell-size-screen: clamp(3.2rem, 2vw + 2.2rem, 4.4rem);
    --grid-cell-size-screen-compact: clamp(3rem, 8vw, 3.8rem);
    --grid-cell-size-print: 0.85cm;
    --print-main-cols: 20;
    --print-main-rows: 3;
    --color-grid-parking-surface-idle: #fff3cdcc;
    --color-grid-parking-surface-occupied: #dc354533;
    --color-grid-parking-icon: #6c757d;
    --color-grid-parking-icon-active: #dc3545;
    --color-grid-parking-warning: #f6c23e;
    --radius-sm: 0.625rem;
    --radius-md: 0.875rem;
    --radius-lg: 1rem;
    --shadow-panel: 0 0.5rem 1.25rem var(--color-shadow-soft);
    --shadow-modal: 0 1rem 2.5rem #00000033;
    --font-size-body: clamp(0.95rem, 0.3vw + 0.9rem, 1.15rem);
    --font-size-large: clamp(1rem, 0.45vw + 0.95rem, 1.25rem);
    --font-size-title: clamp(1.45rem, 1.4vw + 1rem, 2.4rem);
    --font-size-button: clamp(1rem, 0.45vw + 0.95rem, 1.25rem);
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-5: 1.25rem;
    --space-6: 1.5rem;
    --space-8: 2rem;
}

@page {
    margin: 5mm;
}

@media print {
    body {
        background: #ffffff !important;
        color: #000000 !important;
    }

    body.dt-print-view,
    body.dt-print-view * {
        visibility: visible !important;
    }

    body.dt-print-view {
        padding: 0.35cm !important;
    }

    body.grid-print-mode {
        --grid-cell-size-print: min(
            2.2cm,
            calc((100vw - 1.6cm - ((var(--print-main-cols) - 1) * 0.12cm)) / var(--print-main-cols)),
            calc((100vh - 6.8cm) / (var(--print-main-rows) + 0.8))
        );
    }

    body.dt-print-view table,
    body.dt-print-view .table {
        width: 100% !important;
        border-collapse: collapse;
    }

    body.grid-print-mode .app-shell {
        display: flex;
        flex-direction: column;
        gap: 0.18cm;
        min-height: calc(100vh - 1.6cm);
        height: calc(100vh - 1.6cm);
        padding: 0 !important;
    }

    body.grid-print-mode .app-shell > :not(#beachSection):not(#daySummaryPanel) {
        display: none !important;
    }

    body.grid-print-mode #printBeachButton {
        display: none !important;
    }

    body.grid-print-mode footer,
    body.grid-print-mode #gridSea {
        display: none !important;
    }

    body.grid-print-mode #beachSection {
        display: flex;
        flex-direction: column;
        gap: 0.18cm;
        flex: 1 1 auto;
        min-height: 0;
        width: 100%;
        page-break-inside: avoid;
        break-inside: avoid;
    }

    body.grid-print-mode .table-container,
    body.grid-print-mode .app-day-summary {
        box-shadow: none !important;
        border: 0.02cm solid #d8dee4;
        background: #ffffff !important;
    }

    body.grid-print-mode #daySummaryPanel {
        position: static;
        inset-inline: auto;
        bottom: auto;
        width: 100%;
        margin: 0;
        margin-top: auto;
        flex: 0 0 auto;
        page-break-inside: avoid;
        break-inside: avoid;
    }

    body.grid-print-mode .print-title {
        display: block !important;
        flex: 0 0 auto;
        width: 100% !important;
        text-align: center !important;
        font-size: 1.25rem !important;
        font-weight: 700 !important;
        margin: 0 !important;
    }

    body.grid-print-mode #mainBeachGrid,
    body.grid-print-mode #greenBeachGrid {
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        min-block-size: 0;
        gap: 0.18cm;
        overflow: visible !important;
        height: auto;
        padding: 0.16cm 0.22cm;
        background-color: var(--color-surface);
        page-break-inside: avoid;
        break-inside: avoid;
    }

    body.grid-print-mode #greenBeachGrid {
        flex: 0 0 34%;
    }

    body.grid-print-mode #mainBeachGrid {
        flex: 1 1 0;
    }

    body.grid-print-mode .beach-grid-row {
        display: flex;
        align-items: center;
        width: 100%;
        min-width: 0;
        padding-inline: 0;
        gap: 0.12cm;
        flex: 1 1 auto;
        page-break-inside: avoid;
        break-inside: avoid;
    }

    body.grid-print-mode #mainBeachGrid .beach-grid-row {
        justify-content: space-between;
        align-items: center;
    }

    body.grid-print-mode .beach-grid-row--green {
        flex: 1 1 auto;
        align-items: stretch;
        justify-content: flex-start;
        gap: 0.22cm;
        --green-grid-gap: 0.22cm;
    }

    body.grid-print-mode .green-grid-group {
        display: flex;
        height: 100%;
        align-content: center;
        gap: 0.12cm;
    }

    body.grid-print-mode .green-grid-group--lead {
        justify-content: space-between;
        align-items: center;
        flex: 0 0 calc((100% - (var(--green-grid-gap) * 4)) * 0.6);
    }

    body.grid-print-mode .green-grid-parking-column {
        --grid-cell-size: var(--grid-cell-size-print);
        justify-content: flex-end;
        min-height: var(--grid-cell-size);
    }

    body.grid-print-mode .green-grid-group--stack {
        justify-content: space-between;
        align-items: center;
        flex: 0 0 calc(((100% - (var(--green-grid-gap) * 4)) * 0.4) / 4);
    }

    body.grid-print-mode .green-grid-parking-column > .beach-grid-item--parking {
        display: none !important;
    }

    body.grid-print-mode .beach-grid-item {
        display: inline-flex;
        flex: 0 0 auto;
        flex-direction: column;
        align-items: center;
        gap: 0.02cm;
    }

    body.grid-print-mode .beach-grid-cell {
        --grid-cell-size: var(--grid-cell-size-print);
        width: var(--grid-cell-size);
        height: var(--grid-cell-size);
        padding: 0.05cm;
        font-size: clamp(0.28rem, calc(var(--grid-cell-size) * 0.3), 0.62rem);
        line-height: 1.1;
        box-shadow: none !important;
        transform: none !important;
        print-color-adjust: exact;
        -webkit-print-color-adjust: exact;
    }

    body.grid-print-mode .beach-grid-cell:hover {
        transform: none;
        box-shadow: none;
    }

    body.grid-print-mode .beach-grid-cell__content {
        gap: 0.01cm;
    }

    body.grid-print-mode .beach-grid-item__sunbeds {
        display: block;
        min-width: var(--grid-cell-size);
        font-size: clamp(0.64rem, calc(var(--grid-cell-size) * 0.52), 1.2rem);
        font-weight: 800;
        line-height: 1;
        text-align: center;
    }

    body.grid-print-mode .beach-grid-item__group {
        display: block;
        min-width: var(--grid-cell-size);
        font-size: clamp(0.64rem, calc(var(--grid-cell-size) * 0.52), 1.2rem);
        font-weight: 800;
        line-height: 1;
        text-align: center;
    }
}

body.app-body {
    background-color: var(--color-body-bg);
    color: var(--color-text);
    font-size: var(--font-size-body);
}

body.app-error-page {
    min-height: 100vh;
    margin: 0;
    background:
        radial-gradient(circle at top, #fff7d6 0, #ffe7a3 26%, #b8e2ff 58%, #f4f6f9 100%);
}

.is-hidden {
    display: none !important;
}

.print-title {
    display: none;
}

.app-shell {
    padding-bottom: var(--space-8);
}

.app-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    margin: clamp(1rem, 1.2vw, 1.5rem) 0;
    padding: clamp(1rem, 1.2vw + 0.6rem, 1.5rem) clamp(1rem, 2vw, 1.875rem);
    border-radius: var(--radius-md);
    background-color: var(--color-primary);
    color: var(--color-header-fg);
    box-shadow: 0 0.5rem 1.25rem var(--color-shadow-strong);
    transition: background-color 0.2s ease, color 0.2s ease;
}

.app-header.is-readonly {
    background-color: var(--color-surface-muted);
    color: var(--color-text);
}

.app-header__date-group {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-3);
    flex: 1 1 auto;
    min-width: 0;
}

.app-header__nav {
    display: flex;
    align-items: center;
    flex: 0 0 auto;
}

.app-header__actions {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    flex: 0 0 auto;
}

.day-status-icons {
    font-size: var(--font-size-large);
    line-height: 1;
    white-space: nowrap;
}

.app-header__date-button {
    border: 0;
    background: transparent;
    color: inherit;
    font-size: var(--font-size-title);
    font-weight: 700;
    text-transform: capitalize;
    line-height: 1.1;
    padding: 0;
    margin: 0 var(--space-2);
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.app-header__date-button:hover {
    text-decoration: underline;
    text-underline-offset: 0.375rem;
}

.app-header__date-button--static:hover {
    text-decoration: none;
}

.app-header__date-button:focus-visible,
.header-control-button:focus-visible,
.row-link:focus-visible,
.beach-grid-cell:focus-visible {
    outline: 0.1875rem solid var(--color-focus-ring);
    outline-offset: 0.25rem;
}

.app-header.is-readonly .app-header__date-button:focus-visible,
.app-header.is-readonly .header-control-button:focus-visible {
    outline-color: var(--color-focus-ring-readonly);
}

.header-control-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    min-width: clamp(3rem, 3vw, 4rem);
    min-height: clamp(3rem, 3vw, 4rem);
    padding: clamp(0.75rem, 1vw, 1rem) clamp(1rem, 2vw, 1.5rem);
    border: 0;
    border-radius: var(--radius-sm);
    background-color: #ffffff33;
    color: var(--color-header-fg);
    font-size: clamp(1.1rem, 0.8vw + 0.9rem, 1.65rem);
    transition: background-color 0.2s ease, transform 0.2s ease, opacity 0.2s ease;
}

.header-control-button:hover {
    background-color: #ffffff57;
    transform: translateY(-0.0625rem);
}

.header-control-button--secondary {
    background-color: var(--color-secondary);
}

.header-control-button--secondary:hover {
    background-color: var(--color-secondary-dark);
}

.header-control-button--success {
    background-color: var(--color-success);
}

.header-control-button--success:hover {
    background-color: var(--color-success-dark);
}

.header-control-button--menu {
    background-color: var(--color-menu);
}

.header-control-button--menu:hover {
    background-color: var(--color-menu-dark);
}

.header-control-button--info {
    background-color: var(--color-primary);
}

.header-control-button--info:hover {
    background-color: var(--color-primary-dark);
}

.app-header.is-readonly .header-control-button {
    background-color: var(--color-lock-surface);
    color: var(--color-text-subtle);
}

.app-header.is-readonly .header-control-button--secondary,
.app-header.is-readonly .header-control-button--success,
.app-header.is-readonly .header-control-button--menu {
    pointer-events: none;
    cursor: not-allowed;
    opacity: 0.45;
}

.app-easter-egg,
.app-day-summary,
.table-container {
    background-color: var(--color-surface);
    border: 0;
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-panel);
}

.app-info-banner {
    color: var(--color-text);
}

.app-table-head th {
    background-color: #1f2937 !important;
    color: var(--color-header-fg) !important;
}

.table-container {
    padding: clamp(0.75rem, 1vw, 1rem);
    overflow-x: auto;
}

.app-day-summary {
    margin-top: var(--space-5);
}

.app-sold-out-banner {
    display: inline-block;
    margin-top: var(--space-4);
    padding: 0.75rem 1.35rem;
    border: 0.15rem solid var(--color-danger);
    border-radius: 999px;
    background-color: whitesmoke;
    color: var(--color-danger);
    font-size: 1.2rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    box-shadow: 0 0.35rem 0.9rem #dc354526;
}

.app-sold-out-banner--header {
    margin-top: 0;
    margin-left: var(--space-2);
    padding: 0.62rem 1rem;
    font-size: 1rem;
    line-height: 1;
    vertical-align: middle;
}

.modal-body {
    font-size: var(--font-size-large);
}

.app-modal-header {
    color: var(--color-header-fg);
    border-bottom: 0;
}

.app-modal-header--info {
    background-color: var(--color-info);
}

.app-modal-header--primary {
    background-color: var(--color-primary);
}

.app-modal-header--secondary {
    background-color: var(--color-secondary);
}

.app-modal-close {
    filter: brightness(0) invert(1);
}

.form-control,
.form-select {
    font-size: var(--font-size-large);
    padding: 0.6875rem 0.875rem;
    background-color: var(--color-surface) !important;
}

.form-control,
.form-select,
.form-check-input {
    border-color: var(--color-border-soft);
}

.toggle-label,
.helper-text,
.details-state-text,
.details-meta-text {
    color: var(--color-text-muted);
}

.helper-text {
    font-size: 0.95em;
}

.app-form-check {
    padding-top: var(--space-4);
}

.btn-action,
.modal-action-button {
    font-size: var(--font-size-button);
}

.btn-action {
    margin: var(--space-1);
}

.modal-action-button,
.modal-close-button {
    width: 100%;
}

.app-button {
    border: 0;
    color: var(--color-header-fg);
}

.app-button:hover,
.app-button:focus-visible {
    color: var(--color-header-fg);
}

.app-button--primary {
    background-color: var(--color-primary);
}

.app-button--primary:hover {
    background-color: var(--color-primary-dark);
}

.app-button--success {
    background-color: var(--color-success);
}

.app-button--success:hover {
    background-color: var(--color-success-dark);
}

.app-button--warning {
    background-color: var(--color-warning);
}

.app-button--warning:hover {
    background-color: var(--color-warning-dark);
}

.app-button--danger {
    background-color: var(--color-danger);
}

.app-button--danger:hover {
    background-color: var(--color-danger-dark);
}

.app-button--neutral {
    background-color: var(--color-secondary);
}

.app-button--neutral:hover {
    background-color: var(--color-secondary-dark);
}

.app-button--neutral-outline {
    background-color: transparent;
    border: 0.0625rem solid var(--color-secondary);
    color: var(--color-secondary);
}

.app-button--neutral-outline:hover,
.app-button--neutral-outline:focus-visible {
    background-color: var(--color-secondary);
    color: var(--color-header-fg);
}

.error-shell {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: clamp(1.5rem, 2vw, 2.5rem);
    min-height: 100vh;
    padding: 2rem;
    text-align: center;
}

.error-scene {
    position: relative;
    width: min(28rem, 92vw);
    aspect-ratio: 1.25;
}

.error-scene__sun,
.error-scene__umbrella,
.error-scene__glasses {
    position: absolute;
    line-height: 1;
}

.error-scene__sun {
    top: 0;
    right: 5%;
    font-size: clamp(4rem, 8vw, 7rem);
}

.error-scene__umbrella {
    left: 18%;
    bottom: 8%;
    font-size: clamp(6rem, 13vw, 11rem);
}

.error-scene__glasses {
    right: 14%;
    bottom: 16%;
    font-size: clamp(3.6rem, 7vw, 6rem);
}

.error-copy {
    max-width: 42rem;
}

/*
.error-copy__code {
    margin: 0;
    font-size: clamp(5rem, 14vw, 9rem);
    font-weight: 900;
    letter-spacing: 0.08em;
    color: #0f172a;
}
*/

.error-copy__title {
    margin: 0;
    font-size: clamp(2rem, 4vw, 3.75rem);
    font-weight: 800;
    text-transform: uppercase;
    color: #1e3a8a;
}

.error-copy__text {
    margin: 1rem 0 0;
    font-size: clamp(1rem, 1vw + 0.8rem, 1.35rem);
    color: #334155;
}

.flatpickr-calendar {
    z-index: 1060 !important;
}

.modal-feedback .modal-content {
    border: 0;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-modal);
}

.modal-feedback .modal-header,
.modal-feedback .modal-footer {
    border: 0;
    justify-content: center;
}

.modal-feedback .modal-header {
    padding-bottom: 0;
}

.modal-feedback .modal-body {
    text-align: center;
    padding: 0.625rem 1.875rem 1.25rem;
    font-size: var(--font-size-large);
    line-height: 1.6;
}

.modal-feedback .modal-footer {
    padding-top: 0;
    padding-bottom: 1.5625rem;
    gap: var(--space-3);
}

.feedback-icon {
    font-size: clamp(3rem, 2vw + 2.2rem, 3.75rem);
    margin: 0.9375rem 0 0.3125rem;
}

.feedback-icon-symbol--warning {
    color: var(--color-warning);
}

.feedback-icon-symbol--danger {
    color: var(--color-danger);
}

.input-group-text label {
    font-size: 0.85rem;
    user-select: none;
}

.table-search-wrapper {
    padding-top: 0.5%;
    padding-left: 10%;
    padding-bottom: 1%;
}

th.arrived-col,
td.arrived-col {
    width: 2.375rem !important;
    min-width: 2.375rem !important;
    text-align: center;
    vertical-align: middle;
}

th.state-col,
td.state-col {
    width: 3.25rem !important;
    min-width: 3.25rem !important;
    text-align: center;
    vertical-align: middle;
}

.arrived-checkbox {
    width: 1.2rem;
    height: 1.2rem;
    cursor: pointer;
}

.arrived-checkbox:disabled {
    cursor: not-allowed;
    opacity: 0.6;
}

.table-status-lock {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
}

.booking-state {
    display: inline-block;
    position: relative;
    width: 1.125rem;
    height: 1.125rem;
    border-radius: 999px;
    border: 0.125rem solid #0000001f;
    box-shadow: inset 0 0.0625rem 0.125rem #0000001f;
    vertical-align: middle;
}

.booking-state--standard {
    background-color: var(--color-booking-standard);
}

.booking-state--subscriber {
    background-color: var(--color-booking-subscriber);
}

.booking-state--arrived {
    background-color: var(--color-booking-arrived);
}

.booking-state__marker {
    position: absolute;
    inset: 50% auto auto 50%;
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 999px;
    border: 0.0625rem solid #00000026;
    transform: translate(-50%, -50%);
}

.booking-state__marker--standard {
    background-color: var(--color-booking-standard);
}

.booking-state__marker--subscriber {
    background-color: var(--color-booking-subscriber);
}

.row-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    padding: 0;
    border: 0;
    background: transparent;
    color: var(--color-primary-dark);
    font-weight: 700;
    line-height: 1.2;
    text-align: left;
}

.row-link:hover {
    text-decoration: underline;
    text-underline-offset: 0.25rem;
}

.details-label {
    font-weight: 700;
    color: var(--color-text-muted);
}

.details-value {
    color: var(--color-text);
    word-break: break-word;
}

.legend-list {
    display: grid;
    gap: 0.875rem;
}

.legend-item {
    display: flex;
    align-items: center;
    gap: 0.875rem;
}

.legend-item__dot {
    display: inline-flex;
    width: 1.375rem;
    height: 1.375rem;
    flex: 0 0 1.375rem;
    border-radius: 999px;
    border: 0.2875rem solid #0000001f;
    background-color: var(--color-booking-free);
    box-shadow: inset 0 0.0625rem 0.125rem #00000014;
}

.legend-item__dot--booked {
    background-color: var(--color-booking-standard);
}

.legend-item__dot--subscriber {
    background-color: var(--color-booking-subscriber);
}

.legend-item__dot--arrived {
    border-color: var(--color-booking-arrived);
    background-color: var(--color-booking-free);
    box-shadow: inset 0 0 0 0.0625rem #0000001a;
}

.legend-item__label {
    font-weight: 700;
    color: var(--color-text);
}

.guest-link {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    color: var(--color-text);
    font-weight: 700;
    text-decoration: none;
}

.guest-link:hover {
    text-decoration: underline;
}

.app-icon--phone {
    color: var(--color-phone);
}

.details-empty {
    color: var(--color-text-subtle);
}

.table-action-group {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
}

.btn-readonly {
    background-color: var(--color-secondary) !important;
    opacity: 0.75;
}

.confirm-delete-options {
    display: flex;
    justify-content: center;
    width: 100%;
    margin: 0 auto;
}

.confirm-delete-option {
    display: inline-flex;
    align-items: flex-start;
    max-width: 100%;
}

.confirm-delete-option .form-check-input {
    border-color: var(--color-checkbox-border);
    flex-shrink: 0;
}

.confirm-delete-label {
    color: var(--color-danger);
    word-break: break-word;
}

.row-capacity-label {
    font-weight: 700;
    color: var(--color-primary);
}

/* Grid */
#gridSea {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    min-height: 10vh;
    padding: clamp(0.75rem, 1vw, 1.25rem) 0;
    overflow-x: auto;
    background-color: var(--color-grid-sea-surface);
}

#mainBeachGrid,
#greenBeachGrid {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: clamp(0.75rem, 1vw, 1rem);
    overflow-x: auto;
    overflow-y: hidden;
    padding-block: clamp(0.875rem, 1vw, 1rem);
}

#mainBeachGrid {
    min-block-size: clamp(18rem, 44vh, 34rem);
    background-color: var(--color-grid-beach-surface);
    container-type: inline-size;
}

#greenBeachGrid {
    min-block-size: clamp(11rem, 24vh, 20rem);
    align-items: stretch;
    background-color: var(--color-grid-grass-surface);
}

.beach-grid-row {
    display: flex;
    align-items: center;
    gap: clamp(0.5rem, 0.9vw, 0.875rem);
    width: max-content;
    min-width: 100%;
    padding-inline: clamp(0.25rem, 1vw, 0.75rem);
}

.green-grid-group {
    display: flex;
    flex: 0 0 auto;
    gap: clamp(0.5rem, 0.9vw, 0.875rem);
}

.beach-grid-row--green {
    flex: 1 0 auto;
    align-items: stretch;
    justify-content: flex-start;
    gap: var(--green-grid-gap);
    width: max-content;
    min-width: 100%;
    --green-grid-gap: clamp(1rem, 3vw, 3rem);
}

.green-grid-group--lead {
    align-items: flex-end;
    flex-direction: row;
    justify-content: space-between;
    flex: 0 0 calc((100% - (var(--green-grid-gap) * 4)) * 0.6);
    min-width: calc(var(--grid-cell-size, 4rem) * 6);
}

.green-grid-parking-column {
    --grid-cell-size: var(--grid-cell-size-screen);
    display: flex;
    flex: 0 0 auto;
    flex-direction: column;
    justify-content: space-between;
    min-height: calc(var(--grid-cell-size) * 3 + clamp(0.5rem, 0.9vw, 0.875rem) * 2);
}

.green-grid-group--stack {
    align-items: center;
    flex-direction: column;
    justify-content: space-between;
    flex: 0 0 calc(((100% - (var(--green-grid-gap) * 4)) * 0.4) / 4);
}

.beach-grid-item {
    display: inline-flex;
    flex: 0 0 auto;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.2rem;
}

.beach-grid-cell {
    --grid-cell-size: var(--grid-cell-size-screen);
    display: inline-flex;
    flex: 0 0 var(--grid-cell-size);
    align-items: center;
    justify-content: center;
    width: var(--grid-cell-size);
    height: var(--grid-cell-size);
    padding: 0.25rem;
    border: 0;
    border-radius: 999px;
    background-color: var(--color-booking-free);
    color: var(--color-grid-cell-text);
    font-size: clamp(0.58rem, 0.2vw + 0.56rem, 0.78rem);
    font-weight: 600;
    line-height: 1.2;
    text-align: center;
    word-break: break-word;
    cursor: pointer;
    user-select: none;
    touch-action: manipulation;
    transition: transform 0.15s ease, box-shadow 0.15s ease, outline-color 0.15s ease;
}

.beach-grid-cell:hover {
    transform: scale(1.08);
    box-shadow: 0 0.375rem 1rem var(--color-grid-cell-hover-shadow);
}

.beach-grid-cell.is-selected {
    outline: 0.1875rem solid var(--color-grid-cell-selected);
    outline-offset: 0.125rem;
}

.beach-grid-cell--move-source {
    outline: 0.1875rem solid var(--color-success);
    outline-offset: 0.125rem;
}

.beach-grid-cell--move-target {
    box-shadow: inset 0 0 0 0.125rem var(--color-success);
}

.beach-grid-cell--parking {
    background-color: var(--color-grid-parking-surface-idle);
    color: var(--color-grid-parking-icon);
}

.beach-grid-cell--parking-occupied {
    background-color: var(--color-grid-parking-surface-occupied);
    color: var(--color-grid-parking-icon-active);
}

.beach-grid-cell--booked {
    background-color: var(--color-booking-standard);
}

.beach-grid-cell--subscriber {
    background-color: var(--color-booking-subscriber);
}

.beach-grid-cell--arrived {
    box-shadow: inset 0 0 0 0.3125rem var(--color-booking-arrived);
}

.beach-grid-cell__content {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.125rem;
    width: 100%;
}

.beach-grid-cell__number {
    margin-top: 0;
    padding-top: 0;
    display: block;
    font-weight: 800;
    line-height: 1;
}

.beach-grid-cell__name {
    display: block;
    line-height: 1.05;
}

.beach-grid-item__sunbeds {
    display: block;
    min-width: var(--grid-cell-size);
    color: var(--color-text-subtle);
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1;
    text-align: center;
}

.beach-grid-item__meta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    min-width: 0;
    width: 100%;
    flex-wrap: nowrap;
    white-space: nowrap;
}

.beach-grid-item__group {
    display: block;
    min-width: 0;
    color: var(--color-text-subtle);
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1;
    text-align: center;
}

.beach-grid-cell__parking-icon {
    font-size: 1.55em;
    line-height: 1;
}

.beach-grid-cell__parking-warning {
    color: var(--color-grid-parking-warning);
    font-size: 0.9em;
    line-height: 1;
}

.sea-row {
    display: flex;
    align-items: center;
    justify-content: space-around;
    gap: clamp(0.5rem, 1vw, 1rem);
    width: max-content;
    min-width: 100%;
    min-height: 2.5rem;
    padding-inline: clamp(0.5rem, 1vw, 1rem);
    font-size: clamp(1rem, 1vw + 0.8rem, 2rem);
}

.sea-cell {
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: clamp(1.5rem, 2vw, 2.5rem);
    min-width: 1.5rem;
}

@media (min-width: 768px) {
    .modal-action-button,
    .modal-close-button {
        width: auto;
    }
}

@media (min-width: 992px) {
    #mainBeachGrid .beach-grid-row {
        justify-content: space-between;
        width: 100%;
        min-width: 0;
        gap: clamp(0.25rem, 0.45vw, 0.5rem);
        padding-inline: clamp(0.125rem, 0.4vw, 0.375rem);
    }
}

@media (max-width: 991px) {
    .app-header {
        flex-wrap: wrap;
        align-items: center;
    }

    .app-header__date-group {
        order: 2;
        justify-content: center;
        width: auto;
        flex: 1 1 20rem;
    }

    .app-header__nav {
        order: 1;
        width: auto;
        justify-content: flex-start;
    }

    .app-header__actions {
        order: 3;
        width: auto;
        justify-content: stretch;
        margin-left: auto;
    }

    .app-header__actions .header-control-button {
        flex: 0 1 auto;
    }

    .table-container {
        padding: 0.9375rem;
    }

    .btn-action {
        padding: 0.375rem 0.5rem;
    }

    div.dataTables_wrapper .row:first-child > div {
        width: 100% !important;
        margin-bottom: 0.9375rem;
    }

    div.dataTables_wrapper div.dataTables_length,
    div.dataTables_wrapper div.dataTables_filter {
        text-align: left !important;
    }

    div.dataTables_wrapper div.dataTables_filter label {
        display: block;
        width: 100%;
    }

    div.dataTables_wrapper div.dataTables_filter input {
        display: block;
        width: 100% !important;
        margin-left: 0;
        margin-top: 0.5rem;
    }
}

@media (max-width: 767px) {
    .beach-grid-row {
        min-width: max-content;
    }

    .beach-grid-row--green {
        --green-grid-gap: 1rem;
    }

    .beach-grid-cell {
        --grid-cell-size: var(--grid-cell-size-screen-compact);
    }
}

@media (max-width: 575px) {
    .app-shell {
        padding-inline: 0.75rem !important;
    }

    .app-header {
        flex-direction: column;
        align-items: stretch;
        gap: 0.875rem;
        padding: 0.875rem;
    }

    .app-header__date-group {
        order: 2;
        width: 100%;
        justify-content: space-between;
        gap: 0.375rem;
        flex: 1 1 auto;
    }

    .app-header__nav {
        order: 1;
        width: 100%;
        justify-content: flex-start;
    }

    .app-header__actions {
        order: 3;
        width: 100%;
        margin-left: 0;
    }

    .app-header__actions .header-control-button {
        flex: 1 1 0;
    }

    .day-status-icons {
        font-size: 1rem;
    }

    .app-header__date-button {
        max-width: min(100%, 12rem);
        font-size: clamp(1.1rem, 4.6vw, 1.45rem);
        margin: 0;
    }

    .header-control-button {
        min-width: 2.75rem;
        min-height: 2.75rem;
        padding-inline: 0.875rem;
    }

    .table-search-wrapper {
        padding-left: 0;
    }

    th.arrived-col,
    td.arrived-col {
        width: 2.125rem !important;
        min-width: 2.125rem !important;
    }

    th.state-col,
    td.state-col {
        width: 2.75rem !important;
        min-width: 2.75rem !important;
    }
}

@media (max-width: 479px) {
    .beach-grid-cell {
        --grid-cell-size: 3rem;
        font-size: 0.56rem;
    }

    .beach-grid-row {
        gap: 0.4375rem;
    }

    .beach-grid-row--green {
        justify-content: flex-start;
    }
}
