/* DoliPortal – Public CSS
   CSS custom properties are injected by DoliPortal_Theming::output_css_variables()
   Defaults here serve as fallback when the admin hasn't saved theming yet.
   =========================================================================== */

.doliportal-wrap {
    --dp-bg:         #121212;
    --dp-primary:    #e53935;
    --dp-accent:     #e53935;
    --dp-text:       #f5f5f5;
    --dp-text-light: #b0b0b0;
    --dp-nav-bg:     #1a1a1a;
    --dp-nav-text:   #ffffff;
    --dp-card-bg:    #1e1e1e;
    --dp-border:     #333333;
    --dp-success:    #81c784;
    --dp-danger:     #ef5350;
    --dp-warning:    #ffb74d;
    --dp-info:       #81d4fa;
    --dp-font:       system-ui, sans-serif;
    --dp-size:       16px;
    --dp-radius:     8px;
    --dp-shadow:     0 2px 12px rgba(0,0,0,.4);
    --dp-on-primary: #ffffff;
    --dp-on-card:    #f5f5f5;

    font-family:  var(--dp-font);
    font-size:    var(--dp-size);
    color:        var(--dp-text);
    background:   var(--dp-bg);
    line-height:  1.6;
    max-width:    1100px;
    margin:       0 auto;
    padding:      0 16px 40px;
    box-sizing:   border-box;
}

.doliportal-wrap *,
.doliportal-wrap *::before,
.doliportal-wrap *::after {
    box-sizing: inherit;
}

/* ── Anti-Divi animation kill ────────────────────────────────────────────── */
/* Divi sets opacity:0 on PARENT containers (.et_pb_text, .et_pb_module)    */
/* then animates on scroll. CSS opacity is multiplicative so child can't    */
/* override parent opacity:0. We target the parents using :has() and also   */
/* add JS fallback for older browsers.                                      */

/* Target Divi parent containers that CONTAIN our portal */
.et_pb_text:has(.doliportal-wrap),
.et_pb_module:has(.doliportal-wrap),
.et_pb_text_inner:has(.doliportal-wrap),
.et_pb_section:has(.doliportal-wrap),
.et_pb_row:has(.doliportal-wrap),
.et_pb_column:has(.doliportal-wrap) {
    opacity: 1 !important;
    visibility: visible !important;
    animation: none !important;
    -webkit-animation: none !important;
    transform: none !important;
    -webkit-transform: none !important;
}

/* And the portal itself + all children */
.doliportal-wrap,
.doliportal-wrap * {
    opacity: 1 !important;
    visibility: visible !important;
}

/* ── Divi / Elementor / theme color override reset ───────────────────────── */
/* These builders aggressively set color on all elements. We force our vars. */
.doliportal-wrap,
.doliportal-wrap p,
.doliportal-wrap span,
.doliportal-wrap div,
.doliportal-wrap li,
.doliportal-wrap dt,
.doliportal-wrap dd,
.doliportal-wrap td,
.doliportal-wrap label,
.doliportal-wrap h1,
.doliportal-wrap h2,
.doliportal-wrap h3,
.doliportal-wrap h4 {
    color: var(--dp-text) !important;
}

.doliportal-wrap a {
    color: var(--dp-accent) !important;
    text-decoration: none;
}

.doliportal-wrap a:hover {
    opacity: .85;
}

/* Re-apply specific colors after the reset */
.doliportal-wrap .dp-nav,
.doliportal-wrap .dp-nav span,
.doliportal-wrap .dp-nav div,
.doliportal-wrap .dp-nav a {
    color: var(--dp-nav-text) !important;
}

.doliportal-wrap .dp-badge-success { color: var(--dp-success) !important; }
.doliportal-wrap .dp-badge-warning { color: var(--dp-warning) !important; }
.doliportal-wrap .dp-badge-danger  { color: var(--dp-danger) !important; }
.doliportal-wrap .dp-badge-info    { color: var(--dp-info) !important; }
.doliportal-wrap .dp-badge-neutral { color: var(--dp-text-light) !important; }

.doliportal-wrap .dp-alert-success,
.doliportal-wrap .dp-alert-success a { color: var(--dp-success) !important; }
.doliportal-wrap .dp-alert-warning,
.doliportal-wrap .dp-alert-warning a { color: var(--dp-warning) !important; }
.doliportal-wrap .dp-alert-danger,
.doliportal-wrap .dp-alert-danger a  { color: var(--dp-danger) !important; }
.doliportal-wrap .dp-alert-info,
.doliportal-wrap .dp-alert-info a    { color: var(--dp-info) !important; }

.doliportal-wrap .dp-btn-primary {
    color: var(--dp-on-primary) !important;
    background: var(--dp-accent) !important;
}
.doliportal-wrap .dp-btn-secondary {
    color: var(--dp-accent) !important;
    background: transparent !important;
}
.doliportal-wrap .dp-btn-danger {
    color: #fff !important;
}

.doliportal-wrap .dp-tab-link {
    color: var(--dp-text-light) !important;
}
.doliportal-wrap .dp-tab-link.active {
    color: var(--dp-accent) !important;
}
.doliportal-wrap .dp-tab-link:hover {
    color: var(--dp-text) !important;
}

.doliportal-wrap .dp-stat-number {
    color: var(--dp-accent) !important;
}
.doliportal-wrap .dp-stat-label {
    color: var(--dp-text-light) !important;
}

.doliportal-wrap .dp-table th {
    color: var(--dp-text-light) !important;
}

.doliportal-wrap .dp-form-group label {
    color: var(--dp-text-light) !important;
}

.doliportal-wrap .dp-auth-logo {
    color: var(--dp-accent) !important;
}

.doliportal-wrap .dp-message-avatar {
    color: var(--dp-on-primary) !important;
}

.doliportal-wrap .dp-event-date-box,
.doliportal-wrap .dp-event-date-box div {
    color: var(--dp-on-primary) !important;
}

.doliportal-wrap .dp-pagination .current {
    color: var(--dp-on-primary) !important;
}

/* ── Navigation ─────────────────────────────────────────────────────────── */

.dp-nav {
    display:         flex;
    align-items:     center;
    justify-content: space-between;
    background:      var(--dp-nav-bg);
    color:           var(--dp-nav-text);
    padding:         0 20px;
    border-radius:   0 0 var(--dp-radius) var(--dp-radius);
    margin:          0 -16px 32px;
    flex-wrap:       wrap;
    gap:             8px;
}

.dp-nav-brand {
    font-weight: 700;
    font-size:   1.15em;
    padding:     14px 0;
    color:       var(--dp-nav-text);
    text-decoration: none;
}

.dp-nav ul {
    list-style:  none;
    margin:      0;
    padding:     0;
    display:     flex;
    flex-wrap:   wrap;
    gap:         4px;
}

.dp-nav ul li a {
    color:           var(--dp-nav-text);
    text-decoration: none;
    padding:         12px 14px;
    display:         block;
    border-radius:   var(--dp-radius);
    font-size:       .9em;
    opacity:         .88;
    transition:      opacity .15s, background .15s;
}

.dp-nav ul li a:hover,
.dp-nav ul li a.active {
    opacity:    1;
    background: rgba(255,255,255,.15);
}

.dp-nav-user {
    display:     flex;
    align-items: center;
    gap:         10px;
    padding:     8px 0;
    font-size:   .9em;
    color:       var(--dp-nav-text);
    opacity:     .9;
}

/* ── Cards & Layout ──────────────────────────────────────────────────────── */

.dp-card {
    background:    var(--dp-card-bg);
    color:         var(--dp-on-card);
    border:        1px solid var(--dp-border);
    border-radius: var(--dp-radius);
    padding:       24px;
    margin-bottom: 20px;
    box-shadow:    var(--dp-shadow);
}

.dp-card h2,
.dp-card h3 {
    margin:      0 0 16px;
    color:       var(--dp-text);
    font-weight: 600;
}

.dp-grid {
    display:               grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap:                   16px;
    margin-bottom:         24px;
}

.dp-stat-card {
    background:    var(--dp-card-bg);
    color:         var(--dp-on-card);
    border:        1px solid var(--dp-border);
    border-radius: var(--dp-radius);
    padding:       20px;
    text-align:    center;
}

.dp-stat-number {
    font-size:   2em;
    font-weight: 700;
    color:       var(--dp-accent);
    display:     block;
}

.dp-stat-label {
    font-size: .85em;
    color:     var(--dp-text-light);
    margin-top: 4px;
}

/* ── Buttons ─────────────────────────────────────────────────────────────── */

.dp-btn {
    display:         inline-flex;
    align-items:     center;
    gap:             6px;
    padding:         9px 20px;
    border-radius:   var(--dp-radius);
    border:          none;
    cursor:          pointer;
    font-size:       .95em;
    font-family:     var(--dp-font);
    font-weight:     500;
    text-decoration: none;
    transition:      filter .15s, opacity .15s;
    line-height:     1;
}

.dp-btn:hover { filter: brightness(.85); }
.dp-btn:disabled { opacity: .55; cursor: not-allowed; }

.dp-btn-primary {
    background: var(--dp-accent);
    color:      var(--dp-on-primary);
}

.dp-btn-secondary {
    background: transparent;
    color:      var(--dp-accent);
    border:     1.5px solid var(--dp-accent);
}

.dp-btn-danger {
    background: var(--dp-danger);
    color:      #fff;
}

.dp-btn-sm { padding: 6px 14px; font-size: .85em; }

/* ── Badges ──────────────────────────────────────────────────────────────── */

.dp-badge {
    display:       inline-block;
    padding:       3px 10px;
    border-radius: 20px;
    font-size:     .78em;
    font-weight:   600;
    letter-spacing: .02em;
}

.dp-badge-success { background: color-mix(in srgb, var(--dp-success) 20%, var(--dp-card-bg)); color: var(--dp-success); }
.dp-badge-warning { background: color-mix(in srgb, var(--dp-warning) 20%, var(--dp-card-bg)); color: var(--dp-warning); }
.dp-badge-danger  { background: color-mix(in srgb, var(--dp-danger)  20%, var(--dp-card-bg)); color: var(--dp-danger);  }
.dp-badge-info    { background: color-mix(in srgb, var(--dp-info)    20%, var(--dp-card-bg)); color: var(--dp-info);    }
.dp-badge-neutral { background: color-mix(in srgb, var(--dp-text)    15%, var(--dp-card-bg)); color: var(--dp-text-light); }

/* ── Alerts ──────────────────────────────────────────────────────────────── */

.dp-alert {
    padding:       14px 18px;
    border-radius: var(--dp-radius);
    margin-bottom: 16px;
    font-size:     .95em;
    border-left:   4px solid currentColor;
}

.dp-alert a { color: inherit; font-weight: 600; }
.dp-alert-success { background: color-mix(in srgb, var(--dp-success) 15%, var(--dp-bg)); color: var(--dp-success); }
.dp-alert-warning { background: color-mix(in srgb, var(--dp-warning) 15%, var(--dp-bg)); color: var(--dp-warning); }
.dp-alert-danger  { background: color-mix(in srgb, var(--dp-danger)  15%, var(--dp-bg)); color: var(--dp-danger);  }
.dp-alert-info    { background: color-mix(in srgb, var(--dp-info)    15%, var(--dp-bg)); color: var(--dp-info);    }

/* ── Tables ──────────────────────────────────────────────────────────────── */

.dp-table {
    width:           100%;
    border-collapse: collapse;
    font-size:       .95em;
    color:           var(--dp-text);
}

.dp-table th,
.dp-table td {
    text-align:  left;
    padding:     10px 14px;
    border-bottom: 1px solid var(--dp-border);
    color:       var(--dp-text);
}

.dp-table th {
    font-weight: 600;
    color:       var(--dp-text-light);
    font-size:   .85em;
    text-transform: uppercase;
    letter-spacing: .04em;
    background:  var(--dp-card-bg);
}

.dp-table tr:hover td { background: color-mix(in srgb, var(--dp-accent) 8%, var(--dp-bg)); }

/* ── Forms ───────────────────────────────────────────────────────────────── */

.dp-form-group {
    margin-bottom: 18px;
}

.dp-form-group label {
    display:     block;
    font-weight: 500;
    margin-bottom: 6px;
    font-size:   .9em;
    color:       var(--dp-text-light);
}

.dp-form-group input,
.dp-form-group select,
.dp-form-group textarea {
    width:         100%;
    padding:       9px 13px;
    border:        1.5px solid var(--dp-border);
    border-radius: var(--dp-radius);
    font-size:     var(--dp-size);
    font-family:   var(--dp-font);
    color:         var(--dp-text);
    background:    var(--dp-bg);
    transition:    border-color .15s;
    outline:       none;
}

.dp-form-group input:focus,
.dp-form-group select:focus,
.dp-form-group textarea:focus {
    border-color: var(--dp-accent);
    box-shadow:   0 0 0 3px color-mix(in srgb, var(--dp-accent) 20%, transparent);
}

.dp-form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

@media (max-width: 600px) {
    .dp-form-row { grid-template-columns: 1fr; }
}

/* ── Messages ────────────────────────────────────────────────────────────── */

.dp-message-item {
    display:        flex;
    gap:            14px;
    padding:        14px 0;
    border-bottom:  1px solid var(--dp-border);
    cursor:         pointer;
}

.dp-message-item:last-child { border-bottom: none; }

.dp-message-avatar {
    width:         40px;
    height:        40px;
    border-radius: 50%;
    background:    var(--dp-accent);
    color:         var(--dp-on-primary);
    display:       flex;
    align-items:   center;
    justify-content: center;
    font-weight:   700;
    font-size:     1em;
    flex-shrink:   0;
}

.dp-message-meta {
    font-size:  .8em;
    color:      var(--dp-text-light);
    margin-top: 2px;
}

.dp-message-subject { font-weight: 600; color: var(--dp-text); }
.dp-message-item.unread .dp-message-subject { color: var(--dp-accent); }
.dp-message-unread-dot {
    width:         8px;
    height:        8px;
    border-radius: 50%;
    background:    var(--dp-accent);
    flex-shrink:   0;
    margin-top:    6px;
}

/* ── Events calendar card ────────────────────────────────────────────────── */

.dp-event-card {
    display:       flex;
    gap:           16px;
    border:        1px solid var(--dp-border);
    border-radius: var(--dp-radius);
    padding:       16px;
    margin-bottom: 12px;
    background:    var(--dp-card-bg);
    color:         var(--dp-on-card);
}

.dp-event-date-box {
    text-align:    center;
    min-width:     52px;
    background:    var(--dp-accent);
    color:         var(--dp-on-primary);
    border-radius: var(--dp-radius);
    padding:       8px;
}

.dp-event-day   { font-size: 1.6em; font-weight: 700; line-height: 1; }
.dp-event-month { font-size: .75em; text-transform: uppercase; opacity: .9; }

.dp-event-info h4 { margin: 0 0 4px; color: var(--dp-text); }
.dp-event-info p  { margin: 0; font-size: .9em; color: var(--dp-text-light); }

/* ── Payment cards ───────────────────────────────────────────────────────── */

.dp-payment-method {
    border:        1.5px solid var(--dp-border);
    border-radius: var(--dp-radius);
    padding:       16px 20px;
    cursor:        pointer;
    transition:    border-color .15s, background .15s;
    margin-bottom: 10px;
    display:       flex;
    align-items:   center;
    gap:           14px;
    color:         var(--dp-text);
}

.dp-payment-method:hover,
.dp-payment-method.selected {
    border-color: var(--dp-accent);
    background:   color-mix(in srgb, var(--dp-accent) 10%, var(--dp-bg));
}

.dp-payment-method input[type="radio"] { accent-color: var(--dp-accent); }

/* ── Login / Register ────────────────────────────────────────────────────── */

.dp-auth-wrap {
    max-width:     420px;
    margin:        40px auto;
}

.dp-auth-wrap .dp-card { padding: 32px; }
.dp-auth-logo { text-align: center; margin-bottom: 24px; font-size: 1.3em; font-weight: 700; color: var(--dp-accent); }

/* ── Voting ──────────────────────────────────────────────────────────────── */

.dp-poll-option {
    display:       flex;
    align-items:   center;
    gap:           12px;
    padding:       12px 16px;
    border:        1.5px solid var(--dp-border);
    border-radius: var(--dp-radius);
    margin-bottom: 8px;
    cursor:        pointer;
    transition:    border-color .15s;
    color:         var(--dp-text);
}

.dp-poll-option:hover { border-color: var(--dp-accent); }
.dp-poll-option input[type="radio"] { accent-color: var(--dp-accent); }

.dp-poll-bar-wrap { flex: 1; }
.dp-poll-bar {
    height:        8px;
    border-radius: 4px;
    background:    var(--dp-accent);
    transition:    width .4s ease;
}
.dp-poll-bar-bg {
    background:    var(--dp-border);
    border-radius: 4px;
    overflow:      hidden;
    height:        8px;
}

/* ── Tabs ────────────────────────────────────────────────────────────────── */

.dp-tabs-nav {
    display:       flex;
    flex-wrap:     wrap;
    gap:           0;
    border-bottom: 2px solid var(--dp-border);
    margin-bottom: 24px;
    overflow-x:    auto;
    -webkit-overflow-scrolling: touch;
}

.dp-tab-link {
    padding:         12px 18px;
    font-size:       .9em;
    font-weight:     500;
    color:           var(--dp-text-light);
    text-decoration: none;
    border-bottom:   2px solid transparent;
    margin-bottom:   -2px;
    white-space:     nowrap;
    transition:      color .15s, border-color .15s;
    cursor:          pointer;
}

.dp-tab-link:hover {
    color: var(--dp-text);
}

.dp-tab-link.active {
    color:        var(--dp-accent);
    border-color: var(--dp-accent);
    font-weight:  600;
}

.dp-tab-panel {
    display: none;
}

.dp-tab-panel.active {
    display: block;
}

/* ── Responsive ──────────────────────────────────────────────────────────── */

@media (max-width: 768px) {
    .dp-nav { flex-direction: column; align-items: flex-start; }
    .dp-nav ul { gap: 0; }
    .dp-grid { grid-template-columns: 1fr; }
    .dp-table { font-size: .85em; }
    .dp-table th, .dp-table td { padding: 8px 10px; }
}

/* ── Loading / spinner ────────────────────────────────────────────────────── */

.dp-loading {
    display:     inline-block;
    width:       20px;
    height:      20px;
    border:      2.5px solid var(--dp-border);
    border-top:  2.5px solid var(--dp-accent);
    border-radius: 50%;
    animation:   dp-spin .7s linear infinite;
    vertical-align: middle;
    margin-left: 8px;
}

@keyframes dp-spin { to { transform: rotate(360deg); } }

/* ── Pagination ──────────────────────────────────────────────────────────── */

.dp-pagination {
    display:     flex;
    gap:         6px;
    margin-top:  20px;
    justify-content: center;
}

.dp-pagination a,
.dp-pagination span {
    padding:       6px 12px;
    border:        1px solid var(--dp-border);
    border-radius: var(--dp-radius);
    font-size:     .9em;
    text-decoration: none;
    color:         var(--dp-text);
}

.dp-pagination a:hover  { background: var(--dp-card-bg); }
.dp-pagination .current { background: var(--dp-accent); color: var(--dp-on-primary); border-color: var(--dp-accent); }
