:root {
    --necro-ink: #252a2e;
    --necro-muted: #6c6f6b;
    --necro-paper: #f7f4ee;
    --necro-surface: #fffdf9;
    --necro-line: #e4ddd1;
    --necro-sage: #5f7464;
    --necro-sage-dark: #46584a;
    --necro-gold: #8a6a3a;
    --necro-danger: #933f3f;
    --necro-shadow: 0 8px 30px rgba(37, 42, 46, .06);
    --necro-serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
    --necro-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

html { scroll-behavior: smooth; }

body {
    background: var(--necro-paper);
    color: var(--necro-ink);
    font-family: var(--necro-sans);
    font-size: 1rem;
    line-height: 1.7;
    -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, .necro-serif {
    font-family: var(--necro-serif);
    font-weight: 600;
    letter-spacing: -.01em;
    color: var(--necro-ink);
}

a { color: var(--necro-sage-dark); }
a:hover { color: var(--necro-sage); }

:focus-visible {
    outline: 3px solid var(--necro-gold);
    outline-offset: 3px;
}

.necro-skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 2000;
    background: var(--necro-ink);
    color: #fff;
    padding: .7rem 1rem;
}
.necro-skip-link:focus { left: 1rem; top: 1rem; }

/* Header */
.necro-header {
    background: rgba(255, 253, 249, .96);
    border-bottom: 1px solid var(--necro-line);
    position: sticky;
    top: 0;
    z-index: 1000;
    backdrop-filter: blur(10px);
}
.necro-navbar { padding-top: .85rem; padding-bottom: .85rem; }
.necro-brand { display: inline-flex; align-items: center; gap: .7rem; color: var(--necro-ink); text-decoration: none; }
.necro-brand:hover { color: var(--necro-ink); }
.necro-brand-mark { color: var(--necro-sage); display: inline-flex; }
.necro-brand-text { display: flex; flex-direction: column; line-height: 1.1; }
.necro-brand-name { font-family: var(--necro-serif); font-size: 1.35rem; font-weight: 700; letter-spacing: .02em; }
.necro-brand-tagline { font-size: .7rem; color: var(--necro-muted); letter-spacing: .14em; text-transform: uppercase; }
.necro-navbar .nav-link { color: var(--necro-ink); font-size: .92rem; padding: .45rem .7rem; }
.necro-navbar .nav-link:hover, .necro-navbar .nav-link.active { color: var(--necro-sage-dark); }
.necro-navbar .nav-link.active { font-weight: 600; }
.necro-lang { display: flex; gap: .2rem; align-items: center; margin: 0 .6rem; }
.necro-lang-link {
    font-size: .72rem;
    letter-spacing: .08em;
    text-decoration: none;
    color: var(--necro-muted);
    padding: .2rem .3rem;
    border-radius: .25rem;
}
.necro-lang-link.active, .necro-lang-link:hover { color: var(--necro-ink); background: #efe9df; }
.necro-badge { background: var(--necro-sage); color: #fff; font-size: .65rem; }

/* Buttons */
.necro-btn, .necro-btn-outline, .necro-btn-ghost, .necro-btn-danger {
    border-radius: 999px;
    padding: .55rem 1.15rem;
    font-size: .9rem;
    font-weight: 600;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    border: 1px solid transparent;
    transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.necro-btn { background: var(--necro-sage-dark); color: #fff; }
.necro-btn:hover { background: var(--necro-ink); color: #fff; }
.necro-btn-outline { border-color: var(--necro-sage); color: var(--necro-sage-dark); background: transparent; }
.necro-btn-outline:hover { background: var(--necro-sage); color: #fff; }
.necro-btn-ghost { color: var(--necro-muted); background: transparent; border-color: var(--necro-line); }
.necro-btn-ghost:hover { background: #efe9df; color: var(--necro-ink); }
.necro-btn-danger { background: transparent; border-color: #d8b4b4; color: var(--necro-danger); }
.necro-btn-danger:hover { background: var(--necro-danger); color: #fff; }
.necro-btn-sm { padding: .32rem .8rem; font-size: .8rem; }

/* Alerts */
.necro-alert { border: 1px solid var(--necro-line); background: var(--necro-surface); color: var(--necro-ink); border-radius: .6rem; }
.alert-danger.necro-alert { border-color: #e3c4c4; background: #fbf3f3; color: #6e2c2c; }
.alert-success.necro-alert { border-color: #cdddcf; background: #f3f8f3; color: #33513a; }

/* Main */
.necro-main { min-height: 62vh; }

/* Hero */
.necro-hero {
    padding: 3rem 0 2rem;
    border-bottom: 1px solid var(--necro-line);
    margin-bottom: 2.5rem;
}
.necro-kicker {
    text-transform: uppercase;
    letter-spacing: .18em;
    font-size: .72rem;
    color: var(--necro-gold);
    font-weight: 700;
    margin-bottom: .8rem;
}
.necro-hero h1 {
    font-size: clamp(2rem, 4vw, 3.3rem);
    line-height: 1.12;
    margin-bottom: 1rem;
}
.necro-hero p { max-width: 46rem; color: var(--necro-muted); font-size: 1.06rem; }
.necro-hero-date {
    font-family: var(--necro-serif);
    font-size: 1.15rem;
    color: var(--necro-sage-dark);
    margin-top: 1.3rem;
}

/* Commémoration annuelle du 2 novembre */
.necro-all-souls {
    background: #2f3a33;
    color: #fffdf9;
    border-top: 3px solid var(--necro-gold);
    border-bottom: 1px solid #3d4a41;
    padding: 1.1rem 0;
}
.necro-all-souls-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .3rem;
    text-align: center;
}
.necro-all-souls-kicker {
    margin: 0;
    color: #d9c7a3;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
}
.necro-all-souls-message {
    margin: 0;
    color: #fffdf9;
    font-family: var(--necro-serif);
    font-size: clamp(1.05rem, 2vw, 1.45rem);
    line-height: 1.35;
}
.necro-all-souls-link {
    color: #e8ddc8;
    font-size: .8rem;
    text-decoration: underline;
    text-underline-offset: .18em;
}
.necro-all-souls-link:hover { color: #fff; }
.necro-hero-commemoration { border-bottom-color: var(--necro-gold); }
.necro-hero-commemoration h1 { font-size: clamp(1.75rem, 3.4vw, 2.8rem); max-width: 52rem; }

/* Section headings */
.necro-section-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 1rem; margin-bottom: 1.5rem; }
.necro-section-head h2 { font-size: clamp(1.5rem, 2.5vw, 2.1rem); margin: 0; }
.necro-section-head p { color: var(--necro-muted); margin: 0; }
.necro-section { margin-bottom: 3rem; }

/* Cards */
.necro-grid { display: grid; grid-template-columns: repeat(1, minmax(0, 1fr)); gap: 1.2rem; }
@media (min-width: 576px) { .necro-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 992px) { .necro-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1400px) { .necro-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

.necro-card {
    background: var(--necro-surface);
    border: 1px solid var(--necro-line);
    border-radius: .8rem;
    overflow: hidden;
    box-shadow: var(--necro-shadow);
    display: flex;
    flex-direction: column;
    height: 100%;
    transition: transform .2s ease, box-shadow .2s ease;
}
.necro-card:hover { transform: translateY(-3px); box-shadow: 0 14px 40px rgba(37, 42, 46, .1); }
.necro-card-media {
    display: block;
    aspect-ratio: 4 / 5;
    background: #eee8dd;
    overflow: hidden;
}
.necro-card-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.necro-card-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(145deg, #e9e2d6, #f4efe7);
    color: var(--necro-sage);
    font-family: var(--necro-serif);
    font-size: 2.4rem;
    letter-spacing: .05em;
}
.necro-card-body { padding: 1.15rem 1.2rem 1.25rem; display: flex; flex-direction: column; flex: 1; }
.necro-card-name { font-family: var(--necro-serif); font-size: 1.25rem; line-height: 1.25; margin-bottom: .25rem; }
.necro-card-name a { color: var(--necro-ink); text-decoration: none; }
.necro-card-name a:hover { color: var(--necro-sage-dark); }
.necro-card-years { color: var(--necro-muted); font-size: .88rem; margin-bottom: .55rem; }
.necro-card-meta { color: var(--necro-muted); font-size: .82rem; margin-bottom: .9rem; }
.necro-card-link { margin-top: auto; font-size: .88rem; font-weight: 600; text-decoration: none; }
.necro-card-link:hover { text-decoration: underline; }
.necro-observed { color: var(--necro-gold); font-size: .78rem; margin-top: .35rem; }

/* Empty state */
.necro-empty {
    border: 1px dashed #d8cfc1;
    border-radius: .9rem;
    padding: 3rem 1.5rem;
    text-align: center;
    background: rgba(255, 253, 249, .6);
}
.necro-empty-mark { font-size: 2rem; color: var(--necro-sage); margin-bottom: .8rem; }
.necro-empty h2, .necro-empty h3 { font-size: 1.5rem; }
.necro-empty p { max-width: 38rem; margin: .6rem auto 1.2rem; color: var(--necro-muted); }

/* Search */
.necro-search-form {
    display: grid;
    grid-template-columns: 1fr;
    gap: .8rem;
    background: var(--necro-surface);
    border: 1px solid var(--necro-line);
    border-radius: .8rem;
    padding: 1rem;
    margin-bottom: 2rem;
}
@media (min-width: 768px) { .necro-search-form { grid-template-columns: 1fr 12rem auto; align-items: end; } }
.necro-label { font-size: .82rem; font-weight: 600; color: var(--necro-ink); margin-bottom: .3rem; }
.necro-input, .necro-select, .necro-textarea {
    border: 1px solid #d8cfc1;
    background: #fffefa;
    border-radius: .45rem;
    padding: .6rem .75rem;
    width: 100%;
    color: var(--necro-ink);
}
.necro-input:focus, .necro-select:focus, .necro-textarea:focus { border-color: var(--necro-sage); outline: 3px solid rgba(95,116,100,.18); }
.necro-textarea { min-height: 9rem; resize: vertical; }
.necro-help { font-size: .8rem; color: var(--necro-muted); margin-top: .3rem; }

/* Memorial detail */
.necro-cover {
    position: relative;
    border-radius: .9rem;
    overflow: hidden;
    background: #e9e2d6;
    margin-bottom: 2rem;
    border: 1px solid var(--necro-line);
}
.necro-cover img { width: 100%; max-height: 32rem; object-fit: cover; display: block; }
.necro-cover-placeholder {
    min-height: 16rem;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(145deg, #e7dfd2, #f5f0e8);
    color: var(--necro-sage);
    font-family: var(--necro-serif);
    font-size: 4rem;
}
.necro-memorial-header { margin-bottom: 2rem; }
.necro-memorial-header h1 { font-size: clamp(2rem, 4vw, 3.2rem); margin-bottom: .4rem; }
.necro-dates { color: var(--necro-muted); font-size: 1.02rem; }
.necro-dates span + span::before { content: "·"; margin: 0 .5rem; color: #b9afa0; }
.necro-memorial-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 1.2rem; }
.necro-preview-banner {
    background: #fbf3e4;
    border: 1px solid #e5cfa9;
    color: #6b4d1f;
    border-radius: .6rem;
    padding: .75rem 1rem;
    margin-bottom: 1.2rem;
    font-size: .9rem;
}
.necro-prose { font-size: 1.04rem; color: #333a3e; }
.necro-prose p { margin-bottom: 1.1rem; }
.necro-panel {
    background: var(--necro-surface);
    border: 1px solid var(--necro-line);
    border-radius: .8rem;
    padding: 1.4rem;
    margin-bottom: 1.5rem;
}
.necro-panel h2 { font-size: 1.45rem; margin-bottom: .9rem; }
.necro-panel h3 { font-size: 1.15rem; margin-bottom: .6rem; }
.necro-tribute { border-left: 3px solid var(--necro-gold); padding-left: 1rem; }

/* Gallery */
.necro-gallery { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .7rem; }
@media (min-width: 768px) { .necro-gallery { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1200px) { .necro-gallery { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.necro-gallery-item { display: block; border-radius: .5rem; overflow: hidden; background: #eee8dd; border: 1px solid var(--necro-line); }
.necro-gallery-item img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; display: block; }
.necro-gallery-caption { font-size: .78rem; color: var(--necro-muted); padding: .4rem .5rem; }

/* Comments */
.necro-comment { border-bottom: 1px solid var(--necro-line); padding: 1rem 0; }
.necro-comment:last-child { border-bottom: 0; }
.necro-comment-head { display: flex; flex-wrap: wrap; gap: .5rem; align-items: baseline; margin-bottom: .35rem; }
.necro-comment-author { font-weight: 700; }
.necro-comment-date { font-size: .8rem; color: var(--necro-muted); }
.necro-comment-body { margin-bottom: .5rem; }
.necro-comment-actions { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.necro-comment-actions form { display: inline; }
.necro-link-button {
    background: none;
    border: 0;
    padding: 0;
    color: var(--necro-muted);
    font-size: .8rem;
    text-decoration: underline;
    cursor: pointer;
}
.necro-link-button:hover { color: var(--necro-danger); }

/* Reports */
.necro-report details { margin-top: .6rem; }
.necro-report summary { cursor: pointer; color: var(--necro-muted); font-size: .82rem; }
.necro-report-form { margin-top: .8rem; padding: .9rem; background: #faf7f1; border: 1px solid var(--necro-line); border-radius: .5rem; }

/* Forms */
.necro-form-section { border-top: 1px solid var(--necro-line); padding-top: 1.5rem; margin-top: 1.5rem; }
.necro-form-section:first-of-type { border-top: 0; margin-top: 0; padding-top: 0; }
.necro-form-section h2 { font-size: 1.25rem; margin-bottom: 1rem; }
.necro-required { color: var(--necro-danger); }
.necro-error { color: var(--necro-danger); font-size: .82rem; margin-top: .25rem; }
.necro-form-actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.5rem; }

/* Dashboard */
.necro-page-head { margin-bottom: 2rem; }
.necro-page-head h1 { font-size: clamp(1.8rem, 3vw, 2.6rem); }
.necro-toolbar { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; justify-content: space-between; margin-bottom: 1.2rem; }
.necro-table { width: 100%; border-collapse: collapse; background: var(--necro-surface); }
.necro-table th, .necro-table td { padding: .75rem .7rem; border-bottom: 1px solid var(--necro-line); vertical-align: top; text-align: left; }
.necro-table th { font-size: .72rem; text-transform: uppercase; letter-spacing: .08em; color: var(--necro-muted); font-weight: 700; }
.necro-table tr:last-child td { border-bottom: 0; }
.necro-table-actions { display: flex; flex-wrap: wrap; gap: .35rem; }
.necro-status { display: inline-block; padding: .15rem .55rem; border-radius: 999px; font-size: .72rem; font-weight: 600; border: 1px solid var(--necro-line); background: #f4efe7; color: var(--necro-muted); }
.necro-status-published { background: #eef5ef; color: #3d6245; border-color: #cdddcf; }
.necro-status-pending { background: #fbf3e4; color: #7a5a24; border-color: #e5cfa9; }
.necro-status-draft { background: #f1f0ee; color: #5c5a55; }
.necro-status-hidden { background: #f7ecec; color: #7a3a3a; border-color: #e3c4c4; }
.necro-status-deleted { background: #eee; color: #666; }
.necro-profile-grid { display: grid; grid-template-columns: 1fr; gap: 1.2rem; }
@media (min-width: 992px) { .necro-profile-grid { grid-template-columns: 2fr 1fr; } }
.necro-stat-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; }
@media (min-width: 768px) { .necro-stat-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.necro-stat { background: var(--necro-surface); border: 1px solid var(--necro-line); border-radius: .7rem; padding: 1rem; }
.necro-stat-value { font-family: var(--necro-serif); font-size: 1.9rem; line-height: 1; }
.necro-stat-label { font-size: .78rem; color: var(--necro-muted); margin-top: .3rem; }

/* Pager */
.necro-pager { display: flex; flex-wrap: wrap; gap: .35rem; align-items: center; margin-top: 1.5rem; }
.necro-pager a, .necro-pager span {
    min-width: 2.2rem;
    text-align: center;
    padding: .35rem .55rem;
    border: 1px solid var(--necro-line);
    border-radius: .4rem;
    text-decoration: none;
    color: var(--necro-ink);
    font-size: .88rem;
    background: var(--necro-surface);
}
.necro-pager .current { background: var(--necro-sage-dark); color: #fff; border-color: var(--necro-sage-dark); }
.necro-pager .disabled { color: #b8b2a8; background: transparent; }

/* Footer */
.necro-footer { border-top: 1px solid var(--necro-line); background: #f2ede4; padding: 2.2rem 0; margin-top: 3rem; }
.necro-footer-title { font-family: var(--necro-serif); font-size: 1.05rem; margin-bottom: .3rem; }
.necro-footer-note { color: #555a55; font-size: .85rem; }
.necro-footer-links { list-style: none; padding: 0; margin: 0 0 .5rem; display: flex; flex-wrap: wrap; gap: .8rem; font-size: .85rem; }
.necro-footer-links a { color: #4f554f; text-decoration: none; }
.necro-footer-links a:hover { color: var(--necro-ink); text-decoration: underline; }
.necro-footer-copy { color: #656058; font-size: .78rem; margin: 0; }

/* Admin */
.necro-admin-body { background: #f4f2ed; }
.necro-admin-shell { display: flex; min-height: 100vh; }
.necro-admin-sidebar {
    width: 230px;
    flex: 0 0 230px;
    background: #222a26;
    color: #c7cec8;
    padding: 1.2rem 0;
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
}
.necro-admin-brand { padding: 0 1.2rem 1.1rem; border-bottom: 1px solid #333d38; }
.necro-admin-brand span { display: block; font-family: var(--necro-serif); font-size: 1.25rem; color: #fff; }
.necro-admin-brand small { color: #8d9a91; font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; }
.necro-admin-nav { padding: .8rem 0; }
.necro-admin-nav a {
    display: flex; align-items: center; gap: .6rem;
    padding: .55rem 1.2rem; color: #b7c1ba; text-decoration: none; font-size: .88rem;
}
.necro-admin-nav a:hover, .necro-admin-nav a.active { background: #2e3933; color: #fff; }
.necro-admin-main { flex: 1; min-width: 0; }
.necro-admin-topbar { background: #fffdf9; border-bottom: 1px solid var(--necro-line); padding: .8rem 1.4rem; display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; justify-content: space-between; }
.necro-admin-topbar h1 { font-size: 1.1rem; margin: 0; }
.necro-admin-content { padding: 1.4rem; }
@media (max-width: 991px) {
    .necro-admin-shell { display: block; }
    .necro-admin-sidebar { width: 100%; height: auto; position: static; }
    .necro-admin-nav { display: flex; flex-wrap: wrap; }
    .necro-admin-nav a { padding: .45rem .8rem; }
}

/* Utilities */
.necro-muted { color: var(--necro-muted); }
.necro-small { font-size: .85rem; }
.necro-divider { border-top: 1px solid var(--necro-line); margin: 1.4rem 0; }
.necro-hidden { display: none !important; }
.necro-text-right { text-align: right; }
.necro-nowrap { white-space: nowrap; }

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
    .necro-card:hover { transform: none; }
}
