1

Sécuriser et documenter les liens morts

Rend les liens supprimés non cliquables, améliore le rapport des liens morts et accélère la génération du site.

Closes #2
Closes #3
Closes #4
This commit is contained in:
2026-04-02 22:23:16 +02:00
parent 0e4e8cd076
commit fe8037bb73
40 changed files with 423 additions and 112 deletions

View File

@@ -169,7 +169,11 @@
margin-top: var(--space-3);
}
.article-header .article-origin-link-button > a {
.article-header .article-origin-link-button > del {
display: block;
}
.article-header .article-origin-link-button .article-origin-link-button-link {
width: 100%;
min-height: 2.8rem;
padding: 0.5rem 1rem;
@@ -184,21 +188,21 @@
letter-spacing: normal;
}
.article-header .article-origin-link-button > a.ui-button {
.article-header .article-origin-link-button .article-origin-link-button-link.ui-button {
border-color: color-mix(in srgb, var(--color-section-divider-1) 62%, var(--color-border-strong));
background: linear-gradient(180deg, rgba(217, 122, 63, 0.36) 0%, rgba(17, 27, 42, 0.94) 100%);
}
.article-header .article-origin-link-button > a.ui-button:is(:hover, :focus-visible) {
.article-header .article-origin-link-button .article-origin-link-button-link.ui-button:is(:hover, :focus-visible) {
background: linear-gradient(180deg, rgba(217, 122, 63, 0.52) 0%, rgba(17, 27, 42, 0.98) 100%);
}
.article-header .article-origin-link-button > a.ui-button:visited {
.article-header .article-origin-link-button a.article-origin-link-button-link.ui-button:visited {
color: var(--color-heading);
}
.article-header .article-origin-link-button > a.ui-button:hover .article-origin-link-button-url,
.article-header .article-origin-link-button > a.ui-button:focus-visible .article-origin-link-button-url {
.article-header .article-origin-link-button .article-origin-link-button-link.ui-button:hover .article-origin-link-button-url,
.article-header .article-origin-link-button .article-origin-link-button-link.ui-button:focus-visible .article-origin-link-button-url {
color: #ffffff;
}

View File

@@ -122,6 +122,28 @@ a.link-external:not(.link-affiliated):is(:hover, :focus-visible) {
color: var(--color-link-external-hover);
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) a.link-archive:not(.ui-button) {
color: var(--color-link-archive);
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) a.link-archive:not(.ui-button):is(:hover, :focus-visible) {
color: var(--color-link-archive-hover);
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) a.link-archive:not(.ui-button)::after {
content: "";
display: inline-block;
width: 0.9em;
height: 0.9em;
margin-left: 0.22em;
vertical-align: -0.08em;
background-color: currentColor;
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 9h18v2h-1v8h2v2H2v-2h2v-8H3V9zm3 2v8h2v-8H6zm5 0v8h2v-8h-2zm5 0v8h2v-8h-2zM12 2l10 5v1H2V7l10-5zm0 2.2L7.2 6h9.6L12 4.2z' fill='%23000'/%3E%3C/svg%3E");
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
}
a.link-affiliated {
color: var(--color-link-affiliated);
}
@@ -130,7 +152,8 @@ a.link-affiliated:is(:hover, :focus-visible) {
color: var(--color-link-affiliated-hover);
}
a.link-dead {
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) :is(a, span).link-dead:not(.ui-button),
body:has(> main.listing-page) > main.listing-page table span.link-dead {
text-decoration-line: underline;
text-decoration-style: wavy;
text-decoration-thickness: 1px;
@@ -138,23 +161,49 @@ a.link-dead {
text-underline-offset: 0.2em;
}
a.link-dead:is(:hover, :focus-visible) {
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) :is(a, span).link-dead:not(.ui-button):is(:hover, :focus-visible),
body:has(> main.listing-page) > main.listing-page table span.link-dead:is(:hover, :focus-visible) {
text-decoration-line: underline;
text-decoration-style: wavy;
text-decoration-thickness: 2px;
text-decoration-color: currentColor;
}
a.link-dead.link-dead-404 {
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) :is(a, span).link-dead.link-dead-404:not(.ui-button),
body:has(> main.listing-page) > main.listing-page table span.link-dead.link-dead-404 {
color: var(--color-link-dead-404);
text-decoration-color: color-mix(in srgb, var(--color-link-dead-404) 78%, transparent);
}
a.link-dead.link-dead-404:is(:hover, :focus-visible) {
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) :is(a, span).link-dead.link-dead-404:not(.ui-button):is(:hover, :focus-visible),
body:has(> main.listing-page) > main.listing-page table span.link-dead.link-dead-404:is(:hover, :focus-visible) {
color: var(--color-link-dead-404-hover);
text-decoration-color: currentColor;
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) del.link-dead.link-dead-marked,
body:has(> main.listing-page) > main.listing-page table del.link-dead.link-dead-marked {
color: var(--color-link-dead-marked);
text-decoration-color: color-mix(in srgb, var(--color-link-dead-marked) 82%, transparent);
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) del.link-dead.link-dead-marked > span.link-dead.link-dead-marked:not(.ui-button),
body:has(> main.listing-page) > main.listing-page table del.link-dead.link-dead-marked > span.link-dead.link-dead-marked {
color: inherit;
text-decoration-line: underline;
text-decoration-style: solid;
text-decoration-thickness: 1px;
text-decoration-color: inherit;
text-underline-offset: 0.2em;
cursor: help;
}
body:has(> header.article-header) > main > article > :not(footer):not(section.article-asides) del.link-dead.link-dead-marked > span.link-dead.link-dead-marked:not(.ui-button):is(:hover, :focus-visible),
body:has(> main.listing-page) > main.listing-page table del.link-dead.link-dead-marked > span.link-dead.link-dead-marked:is(:hover, :focus-visible) {
color: var(--color-link-dead-marked-hover);
text-decoration-color: currentColor;
}
img,
video,
audio,

View File

@@ -13,10 +13,14 @@
--color-link-hover: #fff1b8;
--color-link-external: #6de0b8;
--color-link-external-hover: #9ef7d6;
--color-link-archive: #d4c4a0;
--color-link-archive-hover: #eadab5;
--color-link-affiliated: #e792ff;
--color-link-affiliated-hover: #f3b8ff;
--color-link-dead-404: #ff9fb3;
--color-link-dead-404-hover: #ffd4df;
--color-link-dead-marked: #ff5b6e;
--color-link-dead-marked-hover: #ff96a3;
--color-accent-1: #76a7d7;
--color-accent-2: #5d86ad;
--color-accent-3: #c3d0df;