/*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ // Card frame. .sparklineCard is a new class, so it's safe to style directly; the element keeps // the legacy .sparkline class only for initializeSparklines() click-to-evolution wiring. .widget .widgetContent .sparkline.sparklineCard, .sparkline.sparklineCard { // Override legacy `div.sparkline { display: flex }` (Morpheus main.less) so the card stacks in // block flow. As a flex item its min-width:auto would size to the nowrap title, so long titles // would overflow instead of truncating. display: block; box-sizing: border-box; padding: 16px; background: @theme-color-widget-background; border: 1px solid @theme-color-border-alternative; border-radius: 8px; width: 100%; margin-top: 0; margin-bottom: 0; // Clickable cards (initializeSparklines adds .linked): pointer cursor + hover border so they // read as interactive. Theme tokens keep it correct in light and dark mode. &.linked { cursor: pointer; border-bottom-color: @theme-color-border-alternative; &:hover, &:focus { border-color: @theme-color-focus-ring-alternative; border-bottom: 1px solid @theme-color-focus-ring-alternative; } } } // No-comparison body: metric value stacked over a full-width sparkline. .noComparison { // Sparkline dimensions. The height is the fixed slot height; the width is the base size the // image scales from, and must match the passed in NoComparison.vue. @_sparkline-height: 40px; @_sparkline-width: 380px; // Fixed height (title 24 + primary 36 + secondary 24) so cards line up whether or not the // optional secondary line is present. .metricValue { height: 84px; margin-bottom: 12px; } // Clamp the title to one line so it can't grow the card; the full title shows on hover. .metricValue__title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; height: 24px; } // Fixed-height slot keeps the card height constant regardless of the image. Centering the image // sits it mid-slot once it becomes shorter than the slot; align-items also stops flex's default // `stretch` from forcing the image back to full height. .sparklineSlot { height: @_sparkline-height; display: flex; align-items: center; } // Fluid width with height derived from the 380x40 aspect ratio (via the img's width/height // attributes) so the sparkline scales without distortion, becoming shorter than the slot on // narrow cards. Capping the width at the base stops it rendering taller than the fixed slot on // very wide monitors. The 2x (760x80) source stays crisp as it scales. .sparklineImg { display: block; width: 100%; height: auto; max-width: @_sparkline-width; } }