- Admin-tabs: kein rahmen/box/outline in irgendeinem zustand mehr - nur die untere unterstreichung markiert den aktiven tab (WP-default-borders ueber- schrieben, auch :focus/:active). - Scan deckt jetzt ALLE veroeffentlichten seiten/beitraege (alle public post types) ab statt nur 4. Backend: limit 10 -> 60 URLs und PARALLELE abfrage (concurrency 12, 8s/seite), plugin-AJAX-timeout 45 -> 90s. - Platzhalter-button: border-radius in hover/focus/active festgenagelt (3px) -> theme kann die ecken beim hover nicht mehr veraendern. + version 1.5.3. (Backend-redeploy noetig fuer den scan.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
242 lines
6.0 KiB
CSS
242 lines
6.0 KiB
CSS
/**
|
||
* Content Blocker – frontend.css
|
||
* Design: minimalist black/white with accent #2043B7
|
||
* Colors come from CSS custom properties set inline by PHP.
|
||
*
|
||
* Note on specificity: every visible rule is scoped under `.cb-blocker`
|
||
* (specificity 0,2,0) so theme button/link styles (typically 0,1,1) cannot
|
||
* override the plugin. Your Custom-CSS is injected AFTER this file, so it can
|
||
* still override everything — use the same `.cb-blocker …` prefix to be safe.
|
||
*/
|
||
|
||
:root {
|
||
--cb-text: #ffffff;
|
||
--cb-bg: #111111;
|
||
--cb-btn-bg: #2043B7;
|
||
--cb-btn-text: #ffffff;
|
||
--cb-btn-hover-bg: #1a369a;
|
||
--cb-btn-hover-text: #ffffff;
|
||
}
|
||
|
||
/* ── Wrapper / placeholder ── */
|
||
.cb-blocker {
|
||
position: relative; /* anchor for the bottom-right badge */
|
||
display: flex;
|
||
align-items: flex-start; /* pin content to the top */
|
||
justify-content: center;
|
||
width: 100%;
|
||
background-color: var(--cb-bg);
|
||
color: var(--cb-text);
|
||
box-sizing: border-box;
|
||
padding: 24px 8px 22px; /* min 20px top/bottom, 8px sides */
|
||
font-family: inherit;
|
||
border-radius: 4px;
|
||
/* No reserved height: the placeholder is exactly as tall as its content. */
|
||
}
|
||
|
||
/* ── Promo badge (bottom-right) ── (locked against theme a:hover scaling) */
|
||
.cb-blocker .cb-blocker__badge,
|
||
.cb-blocker .cb-blocker__badge:hover,
|
||
.cb-blocker .cb-blocker__badge:focus {
|
||
position: absolute;
|
||
right: 8px;
|
||
bottom: 5px;
|
||
font-size: 0.6875rem;
|
||
line-height: 1;
|
||
font-weight: 400;
|
||
letter-spacing: normal;
|
||
color: var(--cb-text);
|
||
background: none;
|
||
white-space: nowrap;
|
||
transform: none;
|
||
}
|
||
.cb-blocker .cb-blocker__badge {
|
||
opacity: 0.55;
|
||
text-decoration: none;
|
||
}
|
||
.cb-blocker .cb-blocker__badge:hover,
|
||
.cb-blocker .cb-blocker__badge:focus {
|
||
opacity: 1;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
/* ── Inner content ── */
|
||
.cb-blocker .cb-blocker__inner {
|
||
width: 100%;
|
||
max-width: 520px;
|
||
text-align: var(--cb-align, center); /* set in Appearance: center|left|right */
|
||
}
|
||
|
||
/* ── Text elements ── */
|
||
.cb-blocker .cb-blocker__text,
|
||
.cb-blocker .cb-blocker__recipient,
|
||
.cb-blocker .cb-blocker__purpose {
|
||
margin: 0 0 0.65em;
|
||
font-size: 0.875rem;
|
||
line-height: 1.6;
|
||
color: var(--cb-text);
|
||
}
|
||
|
||
.cb-blocker .cb-blocker__text {
|
||
font-size: 0.9375rem;
|
||
}
|
||
|
||
.cb-blocker .cb-blocker__third-country {
|
||
display: block; /* own line, no separator needed */
|
||
margin-top: 0.25em;
|
||
font-size: 0.875rem; /* same as the rest of the text */
|
||
color: var(--cb-text); /* same colour as the rest of the text */
|
||
}
|
||
|
||
/* ── Privacy link ── (locked so the theme's a:hover can't restyle/resize it) */
|
||
.cb-blocker .cb-blocker__privacy-link,
|
||
.cb-blocker .cb-blocker__privacy-link:hover,
|
||
.cb-blocker .cb-blocker__privacy-link:focus {
|
||
display: inline-block;
|
||
margin-bottom: 0.75em;
|
||
font-size: 0.8125rem;
|
||
line-height: 1.5;
|
||
font-weight: 400;
|
||
letter-spacing: normal;
|
||
color: var(--cb-btn-bg);
|
||
background: none;
|
||
text-decoration: underline;
|
||
text-decoration-thickness: 1px;
|
||
text-underline-offset: 3px;
|
||
transform: none;
|
||
}
|
||
|
||
/* ── Button ── */
|
||
.cb-blocker .cb-blocker__button {
|
||
display: inline-block;
|
||
margin-top: 1em;
|
||
padding: 0.6em 1.4em;
|
||
background-color: var(--cb-btn-bg);
|
||
color: var(--cb-btn-text);
|
||
border: none; /* never a border/frame */
|
||
outline: none;
|
||
box-shadow: none;
|
||
transform: none; /* no size change, even with theme hover styles */
|
||
border-radius: 3px;
|
||
font-size: 0.9375rem;
|
||
font-weight: 600;
|
||
cursor: pointer;
|
||
transition: background-color 0.18s ease, color 0.18s ease;
|
||
letter-spacing: 0.01em;
|
||
}
|
||
|
||
/* Hover: only the colour changes — no frame, no resize, same corners. */
|
||
.cb-blocker .cb-blocker__button:hover,
|
||
.cb-blocker .cb-blocker__button:focus,
|
||
.cb-blocker .cb-blocker__button:active {
|
||
background-color: var(--cb-btn-hover-bg);
|
||
color: var(--cb-btn-hover-text);
|
||
border: none;
|
||
outline: none;
|
||
box-shadow: none;
|
||
transform: none;
|
||
border-radius: 3px; /* lock the corners — theme hover must not round them */
|
||
}
|
||
|
||
/* Keyboard focus keeps a subtle, accessible ring (not shown on mouse hover). */
|
||
.cb-blocker .cb-blocker__button:focus-visible {
|
||
outline: 2px solid var(--cb-btn-hover-bg);
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* "Remember this service" checkbox under the button */
|
||
.cb-blocker .cb-blocker__remember {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: var(--cb-justify, center); /* follows the text alignment */
|
||
gap: 6px;
|
||
margin-top: 0.8em;
|
||
font-size: 0.8rem;
|
||
color: var(--cb-text); /* same colour as the rest of the text */
|
||
cursor: pointer;
|
||
}
|
||
.cb-blocker .cb-blocker__remember input {
|
||
margin: 0;
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* ── Revoke button ── */
|
||
.cb-revoke-btn {
|
||
display: inline-block;
|
||
padding: 0.5em 1.2em;
|
||
background-color: #111111;
|
||
color: #ffffff;
|
||
border: 2px solid #111111;
|
||
border-radius: 3px;
|
||
font-size: 0.875rem;
|
||
font-weight: 600;
|
||
cursor: pointer;
|
||
transition: background-color 0.18s ease, color 0.18s ease;
|
||
}
|
||
|
||
.cb-revoke-btn:hover,
|
||
.cb-revoke-btn:focus-visible {
|
||
background-color: #ffffff;
|
||
color: #111111;
|
||
}
|
||
|
||
/* ── Revoke as a visible text link (default) ── */
|
||
.cb-revoke-link {
|
||
display: inline-block;
|
||
color: var(--cb-btn-bg);
|
||
font-weight: 600;
|
||
text-decoration: underline;
|
||
text-underline-offset: 3px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.cb-revoke-link:hover,
|
||
.cb-revoke-link:focus-visible {
|
||
color: var(--cb-btn-hover-bg);
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.cb-revoke-note {
|
||
display: block;
|
||
margin-top: 6px;
|
||
font-size: 0.8125rem;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
/* ── Services overview (for the privacy policy) ── */
|
||
.cb-services-list {
|
||
list-style: none;
|
||
margin: 1em 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry {
|
||
margin: 0 0 1.1em;
|
||
padding: 0 0 1.1em;
|
||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry:last-child {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry__name {
|
||
font-weight: 700;
|
||
font-size: 1.02em;
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry dl {
|
||
margin: 0.4em 0 0;
|
||
display: grid;
|
||
grid-template-columns: max-content 1fr;
|
||
gap: 2px 14px;
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry dt {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.cb-services-list .cb-service-entry dd {
|
||
margin: 0;
|
||
}
|