xref: /plugin/annotations/style.css (revision 563f3b4cdab433de36fec30ddf346093d60b9ccd)
143d2073cStracker-user/**
243d2073cStracker-user * Annotations plugin — stylesheet.
343d2073cStracker-user *
443d2073cStracker-user * Colour tokens use DokuWiki's __xxx__ replacement syntax so the theme
543d2073cStracker-user * controls the palette.  Hard-coded colours are limited to the annotation-
643d2073cStracker-user * specific highlights (amber / green) which are intentionally opinionated.
743d2073cStracker-user *
843d2073cStracker-user * FF78 ESR safe: no :has(), :not() with selectors, aspect-ratio, container
943d2073cStracker-user * queries, or CSS nesting.
1043d2073cStracker-user */
1143d2073cStracker-user
1243d2073cStracker-user/* =========================================================================
1343d2073cStracker-user   Highlight spans
1443d2073cStracker-user   ========================================================================= */
1543d2073cStracker-user
1643d2073cStracker-user.ann-highlight-open {
1743d2073cStracker-user    background-color: rgba(251, 191, 36, 0.35);   /* amber-300 @ 35% */
1843d2073cStracker-user    border-bottom: 2px solid rgba(245, 158, 11, 0.7);
1943d2073cStracker-user    border-radius: 2px;
2043d2073cStracker-user    cursor: pointer;
2143d2073cStracker-user    transition: background-color 0.15s ease;
2243d2073cStracker-user}
2343d2073cStracker-user
2443d2073cStracker-user.ann-highlight-open:hover {
2543d2073cStracker-user    background-color: rgba(251, 191, 36, 0.55);
2643d2073cStracker-user}
2743d2073cStracker-user
2843d2073cStracker-user.ann-highlight-resolved {
2943d2073cStracker-user    background-color: rgba(134, 239, 172, 0.30);  /* green-300 @ 30% */
3043d2073cStracker-user    border-bottom: 2px solid rgba(74, 222, 128, 0.6);
3143d2073cStracker-user    border-radius: 2px;
3243d2073cStracker-user    cursor: pointer;
3343d2073cStracker-user    transition: background-color 0.15s ease;
3443d2073cStracker-user}
3543d2073cStracker-user
3643d2073cStracker-user.ann-highlight-resolved:hover {
3743d2073cStracker-user    background-color: rgba(134, 239, 172, 0.50);
3843d2073cStracker-user}
3943d2073cStracker-user
4043d2073cStracker-user/* =========================================================================
4143d2073cStracker-user   Counter bar
4243d2073cStracker-user   ========================================================================= */
4343d2073cStracker-user
4443d2073cStracker-user#ann-counter-bar {
4543d2073cStracker-user    display: flex;
4643d2073cStracker-user    align-items: center;
4743d2073cStracker-user    flex-wrap: wrap;
4843d2073cStracker-user    gap: 0.5em;
4943d2073cStracker-user    padding: 0.4em 0.75em;
5043d2073cStracker-user    margin-bottom: 0.75em;
5143d2073cStracker-user    background: __background_alt__;
5243d2073cStracker-user    border: 1px solid __border__;
5343d2073cStracker-user    border-radius: 4px;
5443d2073cStracker-user    color: __text__;
5543d2073cStracker-user}
5643d2073cStracker-user
5743d2073cStracker-user.ann-orphan-link {
5843d2073cStracker-user    color: __link__;
5943d2073cStracker-user    text-decoration: underline;
6043d2073cStracker-user    cursor: pointer;
6143d2073cStracker-user}
6243d2073cStracker-user
6343d2073cStracker-user/* =========================================================================
6443d2073cStracker-user   Gutter markers
6543d2073cStracker-user   ========================================================================= */
6643d2073cStracker-user
67*563f3b4cStracker-user/* Markers are appended to document.body as position:absolute elements so
68*563f3b4cStracker-user   that no template overflow:hidden can clip them. Top/left are set inline
69*563f3b4cStracker-user   via JS using getBoundingClientRect() + scroll offsets. All markers share
70*563f3b4cStracker-user   the same X position (left edge of the .page column) so they form a tidy
71*563f3b4cStracker-user   vertical column in the document margin. */
7243d2073cStracker-user.ann-gutter-marker {
7343d2073cStracker-user    position: absolute;
7443d2073cStracker-user    padding: 0;
7543d2073cStracker-user    border: none;
76*563f3b4cStracker-user    background: none;
77*563f3b4cStracker-user    color: rgba(245, 158, 11, 0.8); /* amber — open */
7843d2073cStracker-user    cursor: pointer;
79*563f3b4cStracker-user    display: flex;
80*563f3b4cStracker-user    align-items: center;
81*563f3b4cStracker-user    justify-content: center;
82*563f3b4cStracker-user    z-index: 1000;
83*563f3b4cStracker-user    transition: color 0.15s ease, transform 0.12s ease;
84*563f3b4cStracker-user}
85*563f3b4cStracker-user
86*563f3b4cStracker-user/* Suppress any UA button background on all interactive states. */
87*563f3b4cStracker-user.ann-gutter-marker:hover,
88*563f3b4cStracker-user.ann-gutter-marker:focus,
89*563f3b4cStracker-user.ann-gutter-marker:active {
90*563f3b4cStracker-user    background: none;
91*563f3b4cStracker-user    outline: none;
92*563f3b4cStracker-user    box-shadow: none;
9343d2073cStracker-user}
9443d2073cStracker-user
9543d2073cStracker-user.ann-gutter-marker:hover {
96*563f3b4cStracker-user    color: rgba(245, 158, 11, 1);
97*563f3b4cStracker-user}
98*563f3b4cStracker-user
99*563f3b4cStracker-user.ann-gutter-marker[data-status="resolved"] {
100*563f3b4cStracker-user    color: rgba(74, 222, 128, 0.8); /* green — resolved */
101*563f3b4cStracker-user}
102*563f3b4cStracker-user
103*563f3b4cStracker-user.ann-gutter-marker[data-status="resolved"]:hover {
104*563f3b4cStracker-user    color: rgba(74, 222, 128, 1);
10543d2073cStracker-user}
10643d2073cStracker-user
10743d2073cStracker-user/* =========================================================================
10843d2073cStracker-user   Annotation panel
10943d2073cStracker-user   ========================================================================= */
11043d2073cStracker-user
11143d2073cStracker-user.ann-panel {
11243d2073cStracker-user    margin: 0.75em 0 1em;
11343d2073cStracker-user    border: 1px solid __border__;
11443d2073cStracker-user    border-left: 3px solid rgba(245, 158, 11, 0.7);
11543d2073cStracker-user    background: __background_alt__;
116*563f3b4cStracker-user    box-shadow: 0 2px 8px rgba(0,0,0,0.10);
117*563f3b4cStracker-user    contain: layout;
11843d2073cStracker-user}
11943d2073cStracker-user
12043d2073cStracker-user/* =========================================================================
12143d2073cStracker-user   Thread entries (annotation + replies)
12243d2073cStracker-user   ========================================================================= */
12343d2073cStracker-user
12443d2073cStracker-user.ann-thread-entry {
12543d2073cStracker-user    padding: 0.65em 0.85em;
12643d2073cStracker-user    border-bottom: 1px solid __border__;
12743d2073cStracker-user}
12843d2073cStracker-user
12943d2073cStracker-user.ann-thread-entry:last-of-type {
13043d2073cStracker-user    border-bottom: none;
13143d2073cStracker-user}
13243d2073cStracker-user
133*563f3b4cStracker-user/* Root annotation entry: lighter background so it stands out from the panel. */
134*563f3b4cStracker-user.ann-thread-entry.ann-annotation {
135*563f3b4cStracker-user    background: __background__;
136*563f3b4cStracker-user}
137*563f3b4cStracker-user
138*563f3b4cStracker-user/* Reply entries: inset card with the same lighter background. */
13943d2073cStracker-user.ann-reply {
14043d2073cStracker-user    margin-left: 1.5em;
14143d2073cStracker-user    background: __background__;
14243d2073cStracker-user    border-left: 2px solid __border__;
14343d2073cStracker-user}
14443d2073cStracker-user
14543d2073cStracker-user/* =========================================================================
146*563f3b4cStracker-user   Meta row (avatar, author, time, status, close button)
14743d2073cStracker-user   ========================================================================= */
14843d2073cStracker-user
14943d2073cStracker-user.ann-meta {
15043d2073cStracker-user    display: flex;
15143d2073cStracker-user    align-items: center;
15243d2073cStracker-user    gap: 0.4em;
15343d2073cStracker-user    margin-bottom: 0.35em;
15443d2073cStracker-user    flex-wrap: wrap;
15543d2073cStracker-user}
15643d2073cStracker-user
15743d2073cStracker-user.ann-avatar {
15843d2073cStracker-user    display: inline-flex;
15943d2073cStracker-user    align-items: center;
16043d2073cStracker-user    justify-content: center;
16143d2073cStracker-user    width: 1.8em;
16243d2073cStracker-user    height: 1.8em;
16343d2073cStracker-user    border-radius: 50%;
16443d2073cStracker-user    background: __link__;
16543d2073cStracker-user    color: #fff;
16643d2073cStracker-user    font-size: 0.75em;
16743d2073cStracker-user    font-weight: 700;
16843d2073cStracker-user    flex-shrink: 0;
16943d2073cStracker-user}
17043d2073cStracker-user
17143d2073cStracker-user.ann-author {
17243d2073cStracker-user    font-weight: 600;
17343d2073cStracker-user    color: __text__;
17443d2073cStracker-user}
17543d2073cStracker-user
17643d2073cStracker-user.ann-time {
17743d2073cStracker-user    color: __text_alt__;
17843d2073cStracker-user    font-size: 0.85em;
17943d2073cStracker-user}
18043d2073cStracker-user
18143d2073cStracker-user.ann-status {
18243d2073cStracker-user    display: inline-block;
18343d2073cStracker-user    padding: 0.1em 0.45em;
18443d2073cStracker-user    border-radius: 10em;
18543d2073cStracker-user    font-size: 0.78em;
18643d2073cStracker-user    font-weight: 600;
18743d2073cStracker-user    letter-spacing: 0.02em;
18843d2073cStracker-user}
18943d2073cStracker-user
19043d2073cStracker-user.ann-status-open {
19143d2073cStracker-user    background: rgba(251, 191, 36, 0.25);
19243d2073cStracker-user    color: #92400e;
19343d2073cStracker-user    border: 1px solid rgba(245, 158, 11, 0.5);
19443d2073cStracker-user}
19543d2073cStracker-user
19643d2073cStracker-user.ann-status-resolved {
19743d2073cStracker-user    background: rgba(134, 239, 172, 0.25);
19843d2073cStracker-user    color: #166534;
19943d2073cStracker-user    border: 1px solid rgba(74, 222, 128, 0.4);
20043d2073cStracker-user}
20143d2073cStracker-user
20243d2073cStracker-user/* =========================================================================
20343d2073cStracker-user   Body text and quoted selection
20443d2073cStracker-user   ========================================================================= */
20543d2073cStracker-user
20643d2073cStracker-user.ann-body {
20743d2073cStracker-user    white-space: pre-wrap;
20843d2073cStracker-user    word-break: break-word;
20943d2073cStracker-user    color: __text__;
21043d2073cStracker-user    margin-bottom: 0.4em;
21143d2073cStracker-user}
21243d2073cStracker-user
21343d2073cStracker-user.ann-quote {
214*563f3b4cStracker-user    margin-bottom: 0.65em;
21543d2073cStracker-user    padding: 0.25em 0.6em;
21643d2073cStracker-user    border-left: 3px solid rgba(245, 158, 11, 0.6);
217*563f3b4cStracker-user    color: __text__;
21843d2073cStracker-user    font-style: italic;
21943d2073cStracker-user    font-size: 0.9em;
22043d2073cStracker-user    background: rgba(251, 191, 36, 0.08);
22143d2073cStracker-user    border-radius: 0 2px 2px 0;
22243d2073cStracker-user}
22343d2073cStracker-user
22443d2073cStracker-user/* =========================================================================
22543d2073cStracker-user   Action buttons row
22643d2073cStracker-user   ========================================================================= */
22743d2073cStracker-user
22843d2073cStracker-user.ann-actions {
22943d2073cStracker-user    display: flex;
230*563f3b4cStracker-user    gap: 0.5em;
23143d2073cStracker-user    flex-wrap: wrap;
232*563f3b4cStracker-user    margin-top: 0.65em;
23343d2073cStracker-user}
23443d2073cStracker-user
23543d2073cStracker-user.ann-btn {
23643d2073cStracker-user    display: inline-block;
23743d2073cStracker-user    padding: 0.2em 0.55em;
238*563f3b4cStracker-user    font-size: 0.85em;
23943d2073cStracker-user    border: 1px solid __border__;
24043d2073cStracker-user    border-radius: 3px;
241*563f3b4cStracker-user    background: __background__ !important;
24243d2073cStracker-user    color: __text__;
24343d2073cStracker-user    cursor: pointer;
24443d2073cStracker-user    line-height: 1.4;
24543d2073cStracker-user    transition: background-color 0.12s ease;
24643d2073cStracker-user}
24743d2073cStracker-user
24843d2073cStracker-user.ann-btn:hover {
249*563f3b4cStracker-user    background: __background_alt__ !important;
25043d2073cStracker-user}
25143d2073cStracker-user
25243d2073cStracker-user.ann-btn-primary {
253*563f3b4cStracker-user    background: __link__ !important;
25443d2073cStracker-user    border-color: __link__;
25543d2073cStracker-user    color: #fff;
25643d2073cStracker-user}
25743d2073cStracker-user
25843d2073cStracker-user.ann-btn-primary:hover {
259*563f3b4cStracker-user    background: __link__ !important;
260*563f3b4cStracker-user    color: #fff;
26143d2073cStracker-user    opacity: 0.88;
26243d2073cStracker-user}
26343d2073cStracker-user
264*563f3b4cStracker-user/* Disabled state: prevent UA-stylesheet background overrides and ensure
265*563f3b4cStracker-user   primary buttons keep their link colour. */
266*563f3b4cStracker-user.ann-btn:disabled,
267*563f3b4cStracker-user.ann-btn[disabled] {
268*563f3b4cStracker-user    background: __background__;
269*563f3b4cStracker-user    opacity: 0.55;
270*563f3b4cStracker-user    cursor: not-allowed;
271*563f3b4cStracker-user}
272*563f3b4cStracker-user
273*563f3b4cStracker-user.ann-btn:disabled:hover,
274*563f3b4cStracker-user.ann-btn[disabled]:hover {
275*563f3b4cStracker-user    background: __background__;
276*563f3b4cStracker-user}
277*563f3b4cStracker-user
278*563f3b4cStracker-user.ann-btn-primary:disabled,
279*563f3b4cStracker-user.ann-btn-primary[disabled] {
280*563f3b4cStracker-user    background: __link__;
281*563f3b4cStracker-user    color: #fff;
282*563f3b4cStracker-user}
283*563f3b4cStracker-user
284*563f3b4cStracker-user.ann-btn-primary:disabled:hover,
285*563f3b4cStracker-user.ann-btn-primary[disabled]:hover {
286*563f3b4cStracker-user    background: __link__;
287*563f3b4cStracker-user    opacity: 0.55;
288*563f3b4cStracker-user}
289*563f3b4cStracker-user
290*563f3b4cStracker-user/* Spinner shown while an AJAX request is in flight (set by setBusy()).
291*563f3b4cStracker-user   The translate(-50%,-50%) is baked into every keyframe so it stays perfectly
292*563f3b4cStracker-user   centred regardless of sub-pixel rounding and never jigles. */
293*563f3b4cStracker-user@keyframes ann-spin {
294*563f3b4cStracker-user    from { transform: translate(-50%, -50%) rotate(0deg); }
295*563f3b4cStracker-user    to   { transform: translate(-50%, -50%) rotate(360deg); }
296*563f3b4cStracker-user}
297*563f3b4cStracker-user
298*563f3b4cStracker-user.ann-btn-busy {
299*563f3b4cStracker-user    position: relative;
300*563f3b4cStracker-user    color: transparent;
301*563f3b4cStracker-user}
302*563f3b4cStracker-user
303*563f3b4cStracker-user.ann-btn-busy::after {
304*563f3b4cStracker-user    content: '';
305*563f3b4cStracker-user    position: absolute;
306*563f3b4cStracker-user    top: 50%;
307*563f3b4cStracker-user    left: 50%;
308*563f3b4cStracker-user    width: 0.75em;
309*563f3b4cStracker-user    height: 0.75em;
310*563f3b4cStracker-user    border: 2px solid rgba(0, 0, 0, 0.25);
311*563f3b4cStracker-user    border-top-color: rgba(0, 0, 0, 0.75);
312*563f3b4cStracker-user    border-radius: 50%;
313*563f3b4cStracker-user    animation: ann-spin 0.6s linear infinite;
314*563f3b4cStracker-user}
315*563f3b4cStracker-user
316*563f3b4cStracker-user.ann-btn-primary.ann-btn-busy::after {
317*563f3b4cStracker-user    border-color: rgba(255, 255, 255, 0.35);
318*563f3b4cStracker-user    border-top-color: rgba(255, 255, 255, 0.9);
319*563f3b4cStracker-user}
320*563f3b4cStracker-user
32143d2073cStracker-user.ann-btn-danger {
32243d2073cStracker-user    border-color: #dc2626;
32343d2073cStracker-user    color: #dc2626;
32443d2073cStracker-user}
32543d2073cStracker-user
32643d2073cStracker-user.ann-btn-danger:hover {
32743d2073cStracker-user    background: rgba(220, 38, 38, 0.08);
32843d2073cStracker-user}
32943d2073cStracker-user
33043d2073cStracker-user.ann-btn-admin {
33143d2073cStracker-user    border-color: __border__;
332*563f3b4cStracker-user    color: __text__;
33343d2073cStracker-user}
33443d2073cStracker-user
335*563f3b4cStracker-user/* Close button — lives inside .ann-meta, pushed right via margin-left:auto (set in JS). */
33643d2073cStracker-user.ann-close {
337*563f3b4cStracker-user    font-size: 1.35em;
33843d2073cStracker-user    line-height: 1;
339*563f3b4cStracker-user    padding: 0.05em 0.3em;
34043d2073cStracker-user    border: none;
341*563f3b4cStracker-user    background: none !important;
34243d2073cStracker-user    color: __text_alt__;
34343d2073cStracker-user    cursor: pointer;
344*563f3b4cStracker-user    flex-shrink: 0;
34543d2073cStracker-user}
34643d2073cStracker-user
34743d2073cStracker-user.ann-close:hover {
34843d2073cStracker-user    color: __text__;
349*563f3b4cStracker-user    background: none !important;
35043d2073cStracker-user}
35143d2073cStracker-user
35243d2073cStracker-user/* =========================================================================
35343d2073cStracker-user   Reply form + new-annotation form
35443d2073cStracker-user   ========================================================================= */
35543d2073cStracker-user
35643d2073cStracker-user.ann-reply-form,
35743d2073cStracker-user.ann-new-form {
35843d2073cStracker-user    padding: 0.65em 0.85em;
35943d2073cStracker-user}
36043d2073cStracker-user
36143d2073cStracker-user.ann-new-form {
36243d2073cStracker-user    margin: 0.75em 0 1em;
36343d2073cStracker-user    border: 1px solid __border__;
36443d2073cStracker-user    border-left: 3px solid rgba(245, 158, 11, 0.7);
36543d2073cStracker-user    background: __background_alt__;
366*563f3b4cStracker-user    contain: layout;
36743d2073cStracker-user}
36843d2073cStracker-user
36943d2073cStracker-user.ann-body-input {
37043d2073cStracker-user    display: block;
37143d2073cStracker-user    width: 100%;
37243d2073cStracker-user    box-sizing: border-box;
37343d2073cStracker-user    padding: 0.4em 0.6em;
37443d2073cStracker-user    font: inherit;
37543d2073cStracker-user    border: 1px solid __border__;
37643d2073cStracker-user    background: __background__;
37743d2073cStracker-user    color: __text__;
37843d2073cStracker-user    resize: vertical;
379*563f3b4cStracker-user    margin-bottom: 0.65em;
38043d2073cStracker-user}
38143d2073cStracker-user
38243d2073cStracker-user.ann-body-input:focus {
383*563f3b4cStracker-user    outline: 1px solid __link__;
38443d2073cStracker-user}
38543d2073cStracker-user
38643d2073cStracker-user.ann-form-row {
38743d2073cStracker-user    display: flex;
38843d2073cStracker-user    gap: 0.4em;
38943d2073cStracker-user}
39043d2073cStracker-user
391*563f3b4cStracker-user.ann-form-row + .ann-quote {
392*563f3b4cStracker-user    margin-top: 0.65em;
393*563f3b4cStracker-user}
394*563f3b4cStracker-user
39543d2073cStracker-user/* =========================================================================
39643d2073cStracker-user   Selection tooltip
39743d2073cStracker-user   ========================================================================= */
39843d2073cStracker-user
39943d2073cStracker-user.ann-tooltip {
40043d2073cStracker-user    position: absolute;
40143d2073cStracker-user    z-index: 9000;
40243d2073cStracker-user    border-radius: 4px;
40343d2073cStracker-user    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
40443d2073cStracker-user}
40543d2073cStracker-user
40643d2073cStracker-user/* =========================================================================
40743d2073cStracker-user   Orphan drawer
40843d2073cStracker-user   ========================================================================= */
40943d2073cStracker-user
41043d2073cStracker-user.ann-orphan-drawer {
411*563f3b4cStracker-user    display: flow-root; /* BFC: shrinks to avoid overlapping the floated TOC */
412*563f3b4cStracker-user    margin-bottom: 0.65em;
41343d2073cStracker-user    padding: 0.75em 1em;
41443d2073cStracker-user    border: 1px dashed __border__;
41543d2073cStracker-user    border-radius: 4px;
41643d2073cStracker-user    background: __background_alt__;
41743d2073cStracker-user}
41843d2073cStracker-user
41943d2073cStracker-user.ann-orphan-drawer h4 {
42043d2073cStracker-user    margin: 0 0 0.3em;
42143d2073cStracker-user    font-size: 0.95em;
422*563f3b4cStracker-user    color: __text__;
42343d2073cStracker-user}
42443d2073cStracker-user
42543d2073cStracker-user.ann-orphan-note {
42643d2073cStracker-user    font-size: 0.85em;
427*563f3b4cStracker-user    color: __text__;
42843d2073cStracker-user    margin-bottom: 0.75em;
42943d2073cStracker-user}
43043d2073cStracker-user
43143d2073cStracker-user/* =========================================================================
43243d2073cStracker-user   Resolved annotation panels: shift to green accent
43343d2073cStracker-user   ========================================================================= */
43443d2073cStracker-user
43543d2073cStracker-user.ann-panel[data-status="resolved"] {
43643d2073cStracker-user    border-left-color: rgba(74, 222, 128, 0.6);
43743d2073cStracker-user}
438