feat(admin): cleanup page — remove 'Fichiers temporaires' level, promote sections to h2 TOC entries

This commit is contained in:
Pontoporeia
2026-09-18 16:26:49 +02:00
parent 1ed69a2c1a
commit 3f352b0d26
18 changed files with 650 additions and 252 deletions
+34
View File
@@ -1142,6 +1142,31 @@ th.admin-ap-col {
margin-left: var(--space-2xs);
}
/* Stat line rendered as a card under a cleanup-section heading. */
.cleanup-stat-card {
margin: 0 0 var(--space-m);
padding: var(--space-s) var(--space-l);
background: var(--bg-secondary);
border: 1px solid var(--border-primary);
border-radius: var(--radius);
font-size: var(--step-1);
font-weight: 700;
color: var(--accent-primary);
display: flex;
flex-wrap: wrap;
gap: var(--space-2xs) var(--space-m);
align-items: baseline;
}
/* Short French explanation shown under a cleanup-section heading. */
.cleanup-section-desc {
margin: 0 0 var(--space-m);
font-size: var(--step--1);
line-height: 1.5;
color: var(--text-secondary);
max-width: 70ch;
}
.n-grid {
display: block;
}
@@ -2284,6 +2309,15 @@ th.admin-ap-col {
margin-bottom: var(--space-m);
}
/* Cleanup page: sections are loaded asynchronously into a wrapper div, so
give them the same top-level spacing as direct article sections. */
#tmp-cleanup-stats-wrapper > section[aria-labelledby] {
margin-bottom: var(--space-xl);
border: none;
border-radius: 0;
padding: 0;
}
/* Admin TOC: same <details class="toc"> as public pages, positioned sticky */
#admin-toc .toc-list {
padding-top: var(--space-2xs);
@@ -167,3 +167,59 @@
.btn--red:hover {
filter: brightness(0.9);
}
/* Tooltips — display when a .btn carries a data-tip attribute.
Shown below the button on hover/focus, positioned above the
toolbar so it never clips inside the scrollable table. */
.btn[data-tip] {
position: relative;
}
.btn[data-tip]::after {
content: attr(data-tip);
position: absolute;
left: 50%;
bottom: calc(100% + 8px);
transform: translateX(-50%);
width: max-content;
max-width: 260px;
padding: var(--space-3xs) var(--space-xs);
border-radius: var(--radius);
background: var(--text-primary);
color: var(--bg-primary);
font-size: var(--step--2);
font-weight: 500;
letter-spacing: 0.02em;
line-height: 1.3;
text-align: center;
opacity: 0;
pointer-events: none;
z-index: 1000;
transition: opacity 0.12s ease;
}
.btn[data-tip]:hover::after,
.btn[data-tip]:focus::after {
opacity: 1;
}
/* Small arrow below the bubble pointing at the button */
.btn[data-tip]::before {
content: '';
position: absolute;
left: 50%;
bottom: calc(100% + 4px);
transform: translateX(-50%);
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 4px solid var(--text-primary);
opacity: 0;
pointer-events: none;
z-index: 1000;
transition: opacity 0.12s ease;
}
.btn[data-tip]:hover::before,
.btn[data-tip]:focus::before {
opacity: 1;
}