/* =============================================================================
   Caversham Wildlife Park - Gift Card System Styles
   Layered on top of Bootstrap 5
   Replace the colour values to match the production brand palette exactly.
   ============================================================================= */

:root {
    --cwp-primary:   #2D5016;   /* deep forest green */
    --cwp-primary-d: #1A2E0A;   /* darker forest */
    --cwp-secondary: #8B6F47;   /* warm earth brown */
    --cwp-accent:    #F4B942;   /* golden yellow */
    --cwp-cream:     #F5F0E1;   /* cream */
    --cwp-text:      #2C2416;
    --cwp-muted:     #6B5D4F;

    --cwp-radius: 12px;
    --cwp-shadow-sm: 0 2px 8px rgba(45, 80, 22, 0.08);
    --cwp-shadow-md: 0 6px 24px rgba(45, 80, 22, 0.12);
    --cwp-shadow-lg: 0 16px 48px rgba(45, 80, 22, 0.16);
}

body {
    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    color: var(--cwp-text);
    background: var(--cwp-cream);
    -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6, .display-1, .display-2, .display-3, .display-4 {
    font-family: 'Merriweather', Georgia, 'Times New Roman', serif;
    color: var(--cwp-primary-d);
    font-weight: 700;
}

a { color: var(--cwp-primary); text-decoration: none; }
a:hover { color: var(--cwp-primary-d); text-decoration: underline; }

/* ---------- Site Header ---------- */
.site-header {
    background: linear-gradient(135deg, var(--cwp-primary) 0%, var(--cwp-primary-d) 100%);
    color: #fff;
    padding: 1.25rem 0;
    box-shadow: var(--cwp-shadow-sm);
}
.site-header .logo {
    font-family: 'Merriweather', serif;
    font-weight: 700;
    font-size: 1.5rem;
    color: #fff;
}
.site-header .logo span { color: var(--cwp-accent); }

/* ---------- Hero ---------- */
.hero {
    position: relative;
    background: linear-gradient(rgba(26, 46, 10, 0.6), rgba(45, 80, 22, 0.7)),
                url('../images/hero-wildlife.jpg') center/cover no-repeat;
    color: #fff;
    padding: 5rem 0 4rem;
    text-align: center;
}
.hero h1 {
    color: #fff;
    font-size: clamp(2rem, 5vw, 3.5rem);
    margin-bottom: 1rem;
    text-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
}
.hero p.lead {
    font-size: 1.25rem;
    max-width: 640px;
    margin: 0 auto 1.5rem;
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.3);
}
.hero .accent-bar {
    display: inline-block;
    width: 80px;
    height: 4px;
    background: var(--cwp-accent);
    margin-bottom: 1.5rem;
    border-radius: 2px;
}

/* ---------- Cards / Form ---------- */
.purchase-card {
    background: #fff;
    border: none;
    border-radius: var(--cwp-radius);
    box-shadow: var(--cwp-shadow-md);
    overflow: hidden;
}
.purchase-card .card-header {
    background: linear-gradient(135deg, var(--cwp-primary) 0%, var(--cwp-primary-d) 100%);
    color: #fff;
    padding: 1.25rem 1.5rem;
    border: none;
}
.purchase-card .card-header h3 {
    color: #fff;
    margin: 0;
    font-size: 1.25rem;
}
.purchase-card .card-body { padding: 2rem; }

.section-title {
    font-size: 1.1rem;
    color: var(--cwp-primary);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    border-bottom: 2px solid var(--cwp-accent);
    padding-bottom: 0.5rem;
    margin-bottom: 1.25rem;
    display: inline-block;
}

/* ---------- Gift Card Type Selector ---------- */
.giftcard-type-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 1rem;
    margin-bottom: 1rem;
}
.giftcard-type-option {
    display: block;
    cursor: pointer;
    border: 2px solid #e3ddd0;
    border-radius: var(--cwp-radius);
    padding: 1.25rem;
    text-align: center;
    background: #fff;
    transition: all .2s ease;
    position: relative;
}
.giftcard-type-option:hover {
    border-color: var(--cwp-accent);
    transform: translateY(-2px);
    box-shadow: var(--cwp-shadow-sm);
}
.giftcard-type-option input[type="radio"] {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.giftcard-type-option .gc-name {
    font-family: 'Merriweather', serif;
    font-weight: 700;
    color: var(--cwp-primary-d);
    font-size: 1.1rem;
}
.giftcard-type-option .gc-price {
    font-size: 2rem;
    font-weight: 700;
    color: var(--cwp-primary);
    margin: 0.25rem 0;
}
.giftcard-type-option input[type="radio"]:checked ~ .gc-content,
.giftcard-type-option:has(input:checked) {
    border-color: var(--cwp-primary);
    background: linear-gradient(135deg, #fff 0%, var(--cwp-cream) 100%);
    box-shadow: var(--cwp-shadow-sm);
}

/* ---------- Mixed-type cart (stepper rows) ---------- */
.cart-type-row {
    background: #fff;
    border: 1.5px solid #d8d0bf !important;
    transition: border-color .15s, box-shadow .15s;
}
.cart-type-row:has(.qty-input:not([value="0"])) {
    border-color: var(--cwp-primary) !important;
    box-shadow: var(--cwp-shadow-sm);
}
.cart-type-row .gc-name {
    font-size: 1.05rem;
    color: var(--cwp-text);
}
.cart-type-row .gc-price {
    color: var(--cwp-primary);
    font-size: 1.1rem;
}
.qty-stepper .qty-input {
    -moz-appearance: textfield;
    font-weight: 600;
    font-size: 1.05rem;
    border: 1.5px solid #d8d0bf;
}
.qty-stepper .qty-input::-webkit-outer-spin-button,
.qty-stepper .qty-input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.qty-stepper .qty-btn {
    width: 38px;
    height: 38px;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.type-section {
    background: var(--cwp-cream);
    border-left: 4px solid var(--cwp-primary);
    border-radius: 8px;
    padding: 14px 16px;
}
.type-section .type-section-heading {
    color: var(--cwp-primary);
    font-size: 1rem;
    font-weight: 700;
    margin-bottom: 12px;
}
.type-section .recipient-block {
    background: #fff;
}

/* ---------- Form fields ---------- */
.form-label {
    font-weight: 600;
    color: var(--cwp-text);
    margin-bottom: 0.4rem;
}
.form-label .required { color: #c0392b; }
.form-control, .form-select {
    border: 1.5px solid #d8d0bf;
    border-radius: 8px;
    padding: 0.65rem 0.9rem;
    font-size: 1rem;
    transition: border-color .15s, box-shadow .15s;
}
.form-control:focus, .form-select:focus {
    border-color: var(--cwp-primary);
    box-shadow: 0 0 0 3px rgba(45, 80, 22, 0.15);
}
.form-text { color: var(--cwp-muted); }

/* ---------- Buttons ---------- */
.btn-cwp-primary {
    background: linear-gradient(135deg, var(--cwp-primary) 0%, var(--cwp-primary-d) 100%);
    color: #fff;
    border: none;
    font-weight: 600;
    letter-spacing: 0.02em;
    padding: 0.85rem 1.75rem;
    border-radius: 8px;
    transition: transform .15s, box-shadow .15s;
}
.btn-cwp-primary:hover {
    color: #fff;
    transform: translateY(-1px);
    box-shadow: var(--cwp-shadow-md);
}
.btn-cwp-accent {
    background: var(--cwp-accent);
    color: var(--cwp-primary-d);
    border: none;
    font-weight: 700;
    padding: 0.85rem 1.75rem;
    border-radius: 8px;
}
.btn-cwp-accent:hover {
    background: #e8a929;
    color: var(--cwp-primary-d);
}

/* ---------- Order Summary Sidebar ---------- */
.order-summary {
    position: sticky;
    top: 1.5rem;
    background: #fff;
    border-radius: var(--cwp-radius);
    box-shadow: var(--cwp-shadow-sm);
    padding: 1.5rem;
    border-top: 4px solid var(--cwp-accent);
}
.order-summary h4 { font-size: 1.1rem; color: var(--cwp-primary-d); }
.order-summary .summary-row {
    display: flex;
    justify-content: space-between;
    padding: 0.5rem 0;
    border-bottom: 1px dashed #e3ddd0;
}
.order-summary .summary-row.total {
    font-weight: 700;
    font-size: 1.25rem;
    color: var(--cwp-primary-d);
    border-bottom: none;
    border-top: 2px solid var(--cwp-primary);
    padding-top: 0.75rem;
    margin-top: 0.5rem;
}

/* ---------- Trust Indicators ---------- */
.trust-strip {
    background: #fff;
    padding: 1rem;
    border-radius: var(--cwp-radius);
    box-shadow: var(--cwp-shadow-sm);
    text-align: center;
}
.trust-strip .trust-item {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.25rem 0.75rem;
    color: var(--cwp-muted);
    font-size: 0.9rem;
}
.trust-strip .trust-item svg { color: var(--cwp-primary); }

/* ---------- Footer ---------- */
.site-footer {
    background: var(--cwp-primary-d);
    color: rgba(255, 255, 255, 0.8);
    padding: 2rem 0;
    margin-top: 4rem;
}
.site-footer a { color: var(--cwp-accent); }

/* ---------- Admin Specific ---------- */
.admin-sidebar {
    background: var(--cwp-primary-d);
    color: #fff;
    min-height: 100vh;
    padding: 1.5rem 0;
}
.admin-sidebar .nav-link {
    color: rgba(255, 255, 255, 0.85);
    padding: 0.75rem 1.25rem;
    border-left: 3px solid transparent;
    transition: all .15s;
}
.admin-sidebar .nav-link:hover {
    background: rgba(255, 255, 255, 0.05);
    color: #fff;
}
.admin-sidebar .nav-link.active {
    background: rgba(244, 185, 66, 0.1);
    border-left-color: var(--cwp-accent);
    color: #fff;
}
.admin-sidebar .nav-link i { width: 20px; text-align: center; margin-right: 0.5rem; }

.stat-card {
    background: #fff;
    border-radius: var(--cwp-radius);
    padding: 1.5rem;
    box-shadow: var(--cwp-shadow-sm);
    border-top: 4px solid var(--cwp-primary);
    transition: transform .15s, box-shadow .15s;
}
.stat-card:hover { transform: translateY(-2px); box-shadow: var(--cwp-shadow-md); }
.stat-card.accent { border-top-color: var(--cwp-accent); }
.stat-card.secondary { border-top-color: var(--cwp-secondary); }
.stat-card .stat-value {
    font-family: 'Merriweather', serif;
    font-size: 2.25rem;
    font-weight: 700;
    color: var(--cwp-primary-d);
    line-height: 1;
}
.stat-card .stat-label {
    color: var(--cwp-muted);
    text-transform: uppercase;
    font-size: 0.8rem;
    letter-spacing: 0.05em;
    margin-top: 0.5rem;
}

/* Scan result big banners */
.scan-result {
    text-align: center;
    padding: 3rem 1.5rem;
    border-radius: var(--cwp-radius);
    margin-bottom: 1.5rem;
    color: #fff;
}
.scan-result.valid     { background: linear-gradient(135deg, #2D5016, #1A2E0A); }
.scan-result.warning   { background: linear-gradient(135deg, #d68910, #9c640c); }
.scan-result.invalid   { background: linear-gradient(135deg, #c0392b, #7b241c); }
.scan-result .icon {
    font-size: 4rem;
    margin-bottom: 1rem;
}
.scan-result h2 {
    color: #fff;
    font-size: 2rem;
    margin: 0 0 0.5rem 0;
}

/* ---------- Responsive ---------- */
@media (max-width: 768px) {
    .hero { padding: 3rem 0 2.5rem; }
    .purchase-card .card-body { padding: 1.25rem; }
    .order-summary { position: static; margin-top: 1.5rem; }
}

/* ---------- Admin Layout (extended) ---------- */
.admin-body { background: #f4f6f4; font-family: 'Open Sans', sans-serif; }

.admin-sidebar {
    background: var(--cwp-primary-d);
    color: #fff;
    width: 240px;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}
.admin-brand {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 1.4rem 1.25rem 1.25rem;
    border-bottom: 1px solid rgba(255,255,255,0.08);
}
.admin-brand-mark {
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, var(--cwp-accent) 0%, #c8961f 100%);
    color: var(--cwp-dark);
    border-radius: 9px;
    font-size: 1.25rem;
    box-shadow: 0 2px 6px rgba(0,0,0,0.18);
}
.admin-brand-text {
    min-width: 0;
    line-height: 1.1;
}
.admin-brand-text strong {
    display: block;
    font-family: 'Plus Jakarta Sans', 'Open Sans', sans-serif;
    font-weight: 700;
    font-size: 1.05rem;
    letter-spacing: -0.01em;
    color: #ffffff;
}
.admin-brand-text span {
    display: block;
    margin-top: 2px;
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-weight: 500;
    font-size: 0.68rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--cwp-accent);
}

.admin-nav { flex-grow: 1; padding: 0.5rem 0; overflow-y: auto; }
.admin-nav-link {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.7rem 1.25rem;
    color: rgba(255,255,255,0.78);
    text-decoration: none;
    border-left: 3px solid transparent;
    transition: all .15s;
    font-size: 0.92rem;
}
.admin-nav-link i { width: 18px; text-align: center; font-size: 1.05rem; }
.admin-nav-link:hover { background: rgba(255,255,255,0.05); color: #fff; }
.admin-nav-link.active {
    background: rgba(244, 185, 66, 0.12);
    border-left-color: var(--cwp-accent);
    color: #fff;
}

.admin-user {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 1rem 1.25rem;
    border-top: 1px solid rgba(255,255,255,0.08);
    color: #fff;
    font-size: 0.85rem;
}
.admin-user i { font-size: 1.5rem; color: var(--cwp-accent); }
.admin-user strong { font-size: 0.9rem; }

.admin-main {
    background: #f4f6f4;
    min-width: 0;
}
.admin-topbar {
    background: #fff;
    padding: 1rem 1.5rem;
    border-bottom: 1px solid #e5e7e5;
    box-shadow: 0 1px 3px rgba(0,0,0,0.03);
}
.admin-content { padding: 1.5rem; }

@media (max-width: 768px) {
    .admin-sidebar {
        width: 100%;
        min-height: auto;
        flex-direction: column;
    }
    .admin-nav { display: flex; flex-wrap: wrap; padding: 0.25rem; }
    .admin-nav-link { flex: 1 1 auto; padding: 0.6rem 0.75rem; font-size: 0.85rem; }
    .admin-nav-link span { display: none; }
    .admin-nav-link i { margin: 0; }
    .admin-user { padding: 0.75rem 1rem; }
}

/* Tables */
.admin-content .table { background: #fff; }
.admin-content .table thead th {
    background: #f9faf9;
    border-bottom: 2px solid #e5e7e5;
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--cwp-muted);
}

/* Login page */
.login-wrap {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, var(--cwp-primary-d), var(--cwp-primary));
    padding: 1rem;
}
.login-card {
    background: #fff;
    padding: 2.5rem;
    border-radius: var(--cwp-radius);
    box-shadow: 0 10px 40px rgba(0,0,0,0.25);
    width: 100%;
    max-width: 400px;
}
.login-card h1 {
    font-family: 'Merriweather', serif;
    color: var(--cwp-primary-d);
    font-size: 1.4rem;
    margin-bottom: 0.25rem;
}

/* Scanner page extras */
#qr-reader { max-width: 100%; border-radius: var(--cwp-radius); overflow: hidden; }
#qr-reader__dashboard_section_csr button { margin: 0.25rem; }
.scan-meta {
    background: #fff;
    border-radius: var(--cwp-radius);
    padding: 1.25rem;
    margin-top: 1rem;
}

/* Filters row */
.filter-bar {
    background: #fff;
    padding: 1rem 1.25rem;
    border-radius: var(--cwp-radius);
    margin-bottom: 1rem;
    box-shadow: var(--cwp-shadow-sm);
}

/* ---------- Order-scan card list (gate scanner) ---------- */
.order-cards-list {
    max-height: 380px;
    overflow-y: auto;
    background: #fff;
}
.order-card-row {
    cursor: pointer;
    margin: 0;
    transition: background-color .12s;
}
.order-card-row:hover { background: #f8f9fa; }
.order-card-row:last-child { border-bottom: 0 !important; }
.order-card-row-disabled {
    opacity: 0.55;
    cursor: not-allowed;
    background: #f8f9fa;
}
.order-card-row-disabled strong { text-decoration: line-through; }

/* ---------- Multi-card order grouping (admin gift-cards list) ---------- */
/* Subtle alternating tints so cards belonging to the same multi-card order
   share a background colour, switching when a new order starts. Single-card
   orders have no tint and show as plain white rows in between. */
.table tbody tr.order-group-a > td {
    background-color: #faf6ec;   /* warm cream */
}
.table tbody tr.order-group-b > td {
    background-color: #f1f4ed;   /* pale sage */
}
/* Keep hover effect subtly visible above the tint */
.table tbody tr.order-group-a:hover > td,
.table tbody tr.order-group-b:hover > td {
    background-color: #ece6d3;
}

/* ---------- Sibling rows on giftcard_view.php ---------- */
.sibling-row {
    transition: background-color .12s;
}
.sibling-row:not(.is-current):hover {
    background-color: #f8f9fa;
    cursor: pointer;
}
.sibling-row .bi-chevron-right {
    opacity: 0;
    transition: opacity .12s, transform .12s;
}
.sibling-row:not(.is-current):hover .bi-chevron-right {
    opacity: 1;
    transform: translateX(2px);
}

/* ---------- Force tab-pane visibility correctness ----------
   The tab-panes are nested inside a .card-body wrapper, so the standard
   ".tab-content > .tab-pane" direct-child selector doesn't match.  Use
   a descendant combinator so the rule applies through the wrapper.
   
   Bootstrap 5 uses the .show class (not .active) to control tab-pane
   display.  !important is required because something else in the cascade
   sets display:block on tab-panes (likely Bootstrap's own .show rule
   without the .important, or a fade-class transition default). */
.tab-content .tab-pane {
    display: none !important;
}
.tab-content .tab-pane.show {
    display: block !important;
}

/* ============================================================
   ADMIN UI MODERNISATION
   ============================================================ */

/* Use the modern sans for admin headings instead of the serif
   that's intended for the customer-facing site.  Scoped to the
   admin layout so the public website is unaffected. */
.admin-main h1,
.admin-main h2,
.admin-main h3,
.admin-main h4,
.admin-main h5,
.admin-main h6,
.admin-topbar h1 {
    font-family: 'Plus Jakarta Sans', 'Open Sans', sans-serif;
    font-weight: 700;
    letter-spacing: -0.015em;
    color: var(--cwp-primary-d);
}

.admin-main .card-header strong {
    font-family: 'Plus Jakarta Sans', 'Open Sans', sans-serif;
    font-weight: 600;
    font-size: 0.95rem;
    letter-spacing: -0.005em;
}

/* ---------- Card / panel polish ---------- */
.admin-main .card {
    border: 1px solid #e8ebe6;
    border-radius: 10px;
    box-shadow: 0 1px 2px rgba(20, 30, 15, 0.04);
}
.admin-main .card-header {
    padding: 0.9rem 1.1rem;
    border-bottom: 1px solid #eef0eb;
    background: #ffffff;
}
.admin-main .card-body {
    padding: 1.1rem;
}

/* ---------- Tables (Recent Orders / Recent Scans / etc.) ---------- */
.admin-main .table {
    margin-bottom: 0;
    font-size: 0.875rem;
}
.admin-main .table thead th {
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-weight: 600;
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: #6b7568;
    background: #fafbf9;
    border-bottom: 1px solid #e8ebe6;
    padding: 0.7rem 1rem;
    white-space: nowrap;
}
.admin-main .table tbody td {
    padding: 0.85rem 1rem;
    border-top: 1px solid #f0f2ed;
    vertical-align: middle;
}
.admin-main .table tbody tr:first-child td {
    border-top: 0;
}
.admin-main .table.table-sm thead th {
    padding: 0.6rem 1rem;
}
.admin-main .table.table-sm tbody td {
    padding: 0.7rem 1rem;
}
.admin-main .table tbody tr:hover {
    background-color: #fafbf9;
}
.admin-main .table code {
    background: #f4f6f2;
    color: #2D5016;
    padding: 0.15rem 0.4rem;
    border-radius: 4px;
    font-size: 0.82em;
}

/* Badges sit a bit larger and softer */
.admin-main .badge {
    font-weight: 600;
    font-size: 0.7rem;
    padding: 0.35em 0.6em;
    letter-spacing: 0.02em;
}

/* Empty-state cell ("No orders yet") */
.admin-main .table tbody tr td.text-muted.text-center {
    padding: 2rem 1rem;
    color: #98a092;
    font-style: italic;
}
