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