SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
a1b6014 verified
Raw History Blame Contribute Delete
1.69 kB
/* THE POINTED-AT THING.
A tip has no scrim and no spotlight β€” the arrow is the whole mechanism β€” so
the subject gets marked rather than the rest of the app getting dimmed. The
host hangs `data-tip-target` on the subject β€” the arrow's anchor, or the
region that anchor defers to β€” and takes it off when the tip goes. Nothing
here knows what that element is.
`outline` and not a border, ring or glow: it draws outside the box without
taking part in layout, so nothing shifts when a tip lands, and it inherits
whatever `border-radius` the target already has instead of imposing one.
A glow was the first attempt and read as noise at every intensity β€” the
targets sit on busy surfaces, and a soft accent haze looks like more of the
same. A hard line does not. */
[data-tip-target] {
outline: 2px solid var(--dt-primary);
outline-offset: 3px;
animation: hermes-tip-outline-pulse 1.8s ease-in-out infinite;
}
/* A region is a whole area β€” a nav row, the sidebar, the composer β€” and those
are the elements sitting flush against a scroller or an `overflow-hidden`
parent, where an outline drawn 3px OUTSIDE the box is the outline you can't
see. Inset it and it always lands on its own surface. Applies whether the
region was deferred to or anchored directly. */
[data-tip-target][data-tip-region] {
outline-offset: -2px;
}
@keyframes hermes-tip-outline-pulse {
50% {
outline-color: color-mix(in srgb, var(--dt-primary) 45%, transparent);
}
}
/* Marked, not breathing. The outline is the signal; the pulse is only flavour. */
@media (prefers-reduced-motion: reduce) {
[data-tip-target] {
animation: none;
}
}