Files

633 lines
14 KiB
CSS

.fluent-dashboard {
--fluent-dashboard-border: var(--fluent-card-border, var(--inputborder-color, color-mix(in srgb, currentColor 16%, transparent)));
--fluent-dashboard-muted: var(--fluent-text-secondary, color-mix(in srgb, currentColor 68%, transparent));
--fluent-dashboard-surface: var(--fluent-card-bg, rgba(var(--primary-rgbbody, 255, 255, 255), .7));
--fluent-dashboard-shadow: var(--fluent-card-shadow, 0 .1rem .3rem var(--input-boxcolor, color-mix(in srgb, CanvasText 8%, transparent)));
color: var(--fluent-text, CanvasText);
container-type: inline-size;
}
.fluent-dashboard, .fluent-dashboard * {
box-sizing: border-box;
}
.fluent-dashboard__header {
z-index: 0;
color: highlighttext;
background: linear-gradient(120deg, Highlight, color-mix(in srgb, Highlight 68%, CanvasText));
border-radius: .75rem;
justify-content: space-between;
align-items: end;
gap: 1rem;
margin-block-end: 1rem;
padding: 1.25rem;
display: flex;
position: relative;
overflow: hidden;
}
.fluent-dashboard__header h1, .fluent-dashboard__header p {
color: inherit;
margin: 0;
}
.fluent-dashboard__header h1 {
font-size: clamp(1.5rem, 4vw, 2.25rem);
line-height: 1.1;
}
.fluent-dashboard__header h1 + p {
opacity: .82;
margin-block-start: .4rem;
}
.fluent-dashboard__updated {
opacity: .86;
flex: none;
font-size: .85rem;
}
.fluent-dashboard__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
display: grid;
}
.fluent-dashboard__card {
min-width: 0;
color: inherit;
background: var(--fluent-dashboard-surface);
border: 1px solid var(--fluent-dashboard-border);
box-shadow: var(--fluent-dashboard-shadow);
border-radius: .75rem;
overflow: hidden;
}
.fluent-dashboard__card--wide {
grid-column: 1 / -1;
}
.fluent-dashboard__card-title {
color: inherit;
border-block-end: 1px solid var(--fluent-dashboard-border);
margin: 0;
padding: 1rem 1.1rem .85rem 1.35rem;
font-size: 1rem;
font-weight: 650;
line-height: 1.25;
position: relative;
}
.fluent-dashboard__card-title:before {
content: "";
background: highlight;
border-radius: 1rem;
width: .2rem;
position: absolute;
inset: 1rem auto .85rem .7rem;
}
.fluent-dashboard__card-content {
padding: 1rem 1.1rem;
}
.fluent-dashboard__details {
grid-template-columns: minmax(8rem, 36%) minmax(0, 1fr);
gap: .6rem 1rem;
margin: 0;
display: grid;
}
.fluent-dashboard__details-label {
color: var(--fluent-dashboard-muted);
}
.fluent-dashboard__details-value {
overflow-wrap: anywhere;
min-width: 0;
font-weight: 550;
}
.fluent-dashboard__meter + .fluent-dashboard__meter {
margin-block-start: 1.1rem;
}
.fluent-dashboard__meter-label {
justify-content: space-between;
gap: 1rem;
margin-block-end: .45rem;
font-size: .85rem;
display: flex;
}
.fluent-dashboard__meter-label span:last-child {
color: var(--fluent-dashboard-muted);
font-variant-numeric: tabular-nums;
}
.fluent-dashboard__meter-track {
background: color-mix(in srgb, currentColor 12%, transparent);
border-radius: 1rem;
height: .5rem;
overflow: hidden;
}
.fluent-dashboard__meter-value {
border-radius: inherit;
background: highlight;
height: 100%;
transition: width .2s;
display: block;
}
.fluent-dashboard__table-wrap {
max-width: 100%;
overflow-x: auto;
}
.fluent-dashboard__table {
width: 100%;
color: inherit;
border-collapse: collapse;
margin: 0;
}
.fluent-dashboard__table th, .fluent-dashboard__table td {
text-align: start;
vertical-align: middle;
border-block-end: 1px solid var(--fluent-dashboard-border);
padding: .7rem .65rem;
}
.fluent-dashboard__table th {
color: var(--fluent-dashboard-muted);
letter-spacing: .02em;
text-transform: uppercase;
font-size: .78rem;
font-weight: 650;
}
.fluent-dashboard__table tbody tr:last-child td {
border-block-end: 0;
}
.fluent-dashboard__status {
white-space: nowrap;
align-items: center;
gap: .35rem;
font-size: .82rem;
font-weight: 600;
display: inline-flex;
}
.fluent-dashboard__status:before {
content: "";
background: currentColor;
border-radius: 50%;
width: .5rem;
height: .5rem;
}
.fluent-dashboard__status--up {
color: color-mix(in srgb, LinkText 75%, Highlight);
}
.fluent-dashboard__status--down {
color: color-mix(in srgb, currentColor 58%, transparent);
}
.fluent-dashboard__table .fluent-dashboard__empty {
color: var(--fluent-dashboard-muted);
text-align: center;
padding-block: 1.5rem;
font-style: italic;
}
@container (width <= 44rem) {
.fluent-dashboard__grid {
grid-template-columns: minmax(0, 1fr);
}
.fluent-dashboard__card--wide {
grid-column: auto;
}
}
@media (max-width: 575px) {
.fluent-dashboard__header {
flex-direction: column;
align-items: start;
padding: 1rem;
}
.fluent-dashboard__details {
grid-template-columns: minmax(0, 1fr);
gap: .2rem;
}
.fluent-dashboard__details-value + .fluent-dashboard__details-label {
margin-block-start: .45rem;
}
.fluent-dashboard__card-content {
padding: .85rem;
}
}
@media (prefers-reduced-motion: reduce) {
.fluent-dashboard__meter-value {
transition: none;
}
}
.fluent-dashboard {
--dash-card-bg: var(--fluent-card-bg, Canvas);
--dash-text: var(--fluent-text, CanvasText);
--dash-border: var(--fluent-card-border, color-mix(in srgb, CanvasText 18%, transparent));
--dash-gap: .75rem;
--dash-radius: var(--fluent-border-radius, .5rem);
color: var(--dash-text);
}
.fluent-dashboard__toolbar {
gap: var(--dash-gap);
margin-block: var(--dash-gap);
border: 0;
flex-wrap: wrap;
padding: 0;
display: flex;
}
.fluent-dashboard__workspace {
gap: var(--dash-gap);
grid-template-columns: minmax(0, 1fr);
display: grid;
}
.fluent-dashboard__canvas {
min-width: 0;
min-height: 12rem;
}
.fluent-dashboard__library, .fluent-dashboard__properties {
border: 1px solid var(--dash-border);
border-radius: var(--dash-radius);
min-width: 0;
padding: var(--dash-gap);
}
.fluent-dashboard__library > button, .fluent-dashboard__properties > button {
margin: .2rem;
}
.fluent-dashboard__field {
margin-block: var(--dash-gap);
display: block;
}
.fluent-dashboard__field > input {
width: 100%;
display: block;
}
.fluent-dashboard .grid-stack-item-content > .fluent-dashboard__card {
flex-direction: column;
height: 100%;
display: flex;
}
.fluent-dashboard__card-header {
flex: none;
justify-content: space-between;
align-items: center;
min-height: 2rem;
display: flex;
}
.fluent-dashboard__card-header > .fluent-dashboard__card-title {
border: 0;
flex: 1;
padding-block: .5rem;
}
.fluent-dashboard__card-header > button {
flex: none;
margin-inline-end: .5rem;
font-size: .75rem;
}
.fluent-dashboard__card-content {
min-height: 0;
overflow: auto;
}
.fluent-dashboard__widget-status {
padding-inline: var(--dash-gap);
margin: 0;
font-size: .85rem;
}
.fluent-dashboard__card--editing .fluent-dashboard__card-header {
cursor: move;
}
.fluent-dashboard__card--hidden {
opacity: .5;
}
.fluent-dashboard__card--locked .fluent-dashboard__card-header {
cursor: default;
}
.fluent-dashboard__tile--selected > .grid-stack-item-content {
outline-offset: -2px;
outline: 2px solid highlight;
}
.fluent-dashboard__group {
border: 1px solid var(--dash-border);
border-radius: var(--dash-radius);
background: var(--dash-card-bg);
flex-direction: column;
height: 100%;
display: flex;
}
.fluent-dashboard__group > .fluent-dashboard__card-header {
height: 40px;
}
.fluent-dashboard__group-description {
padding: .25rem var(--dash-gap);
margin: 0;
font-size: .85rem;
}
.fluent-dashboard__group-body {
flex: 1;
min-height: 80px;
}
.fluent-dashboard__metric, .fluent-dashboard__traffic {
padding: var(--dash-gap);
flex-direction: column;
gap: .4rem;
display: flex;
overflow: auto;
}
.fluent-dashboard__metric-value {
overflow-wrap: anywhere;
font-size: clamp(1rem, 1.5vw, 1.6rem);
}
.fluent-dashboard__metric-detail {
color: var(--dash-text);
opacity: .7;
overflow-wrap: anywhere;
}
.fluent-dashboard__metric progress {
width: 100%;
accent-color: var(--fluent-primary, Highlight);
}
.fluent-dashboard__traffic svg {
width: 100%;
height: 5rem;
min-height: 2rem;
}
.fluent-dashboard__traffic polyline {
fill: none;
stroke-width: 1.5px;
vector-effect: non-scaling-stroke;
}
.fluent-dashboard__traffic-rx {
stroke: var(--fluent-primary, Highlight);
}
.fluent-dashboard__traffic-tx {
stroke: var(--fluent-success, #26884a);
}
.fluent-dashboard__shortcuts {
gap: var(--dash-gap);
padding: var(--dash-gap);
flex-wrap: wrap;
display: flex;
}
.fluent-dashboard__shortcuts a {
border: 1px solid var(--dash-border);
border-radius: var(--dash-radius);
color: var(--dash-text);
align-items: center;
padding: .5rem;
display: inline-flex;
}
.fluent-dashboard__notice:empty, .fluent-dashboard [hidden] {
display: none;
}
.fluent-dashboard .grid-stack-item-content {
min-width: 0;
overflow: hidden;
}
.fluent-dashboard__canvas .grid-stack-item > .grid-stack-item-content {
overflow: visible;
}
.fluent-dashboard__group-body.grid-stack {
width: 100%;
min-width: 0;
}
.fluent-dashboard__workspace--editing .fluent-dashboard__canvas > .grid-stack-item {
touch-action: auto;
}
@media (min-width: 1400px) {
.fluent-dashboard__workspace--editing {
grid-template-columns: 12rem minmax(0, 1fr) 15rem;
align-items: start;
}
}
.fluent-dashboard .grid-stack {
position: relative;
}
.fluent-dashboard .grid-stack-rtl {
direction: ltr;
}
.fluent-dashboard .grid-stack-rtl > .grid-stack-item {
direction: rtl;
}
.fluent-dashboard .grid-stack-placeholder > .placeholder-content {
background-color: #0000001a;
width: auto;
margin: 0;
position: absolute;
z-index: 0 !important;
}
.fluent-dashboard .grid-stack > .grid-stack-item {
width: var(--gs-column-width);
height: var(--gs-cell-height);
padding: 0;
position: absolute;
top: 0;
left: 0;
}
.fluent-dashboard .grid-stack > .grid-stack-item > .grid-stack-item-content {
width: auto;
margin: 0;
position: absolute;
overflow: hidden auto;
}
.fluent-dashboard .grid-stack > .grid-stack-item.size-to-content:not(.size-to-content-max) > .grid-stack-item-content {
overflow-y: hidden;
}
.fluent-dashboard .grid-stack > .grid-stack-item > .grid-stack-item-content, .fluent-dashboard .grid-stack > .grid-stack-placeholder > .placeholder-content {
top: var(--gs-item-margin-top);
right: var(--gs-item-margin-right);
bottom: var(--gs-item-margin-bottom);
left: var(--gs-item-margin-left);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-handle {
-ms-touch-action: none;
touch-action: none;
font-size: .1px;
display: block;
position: absolute;
}
.fluent-dashboard .grid-stack-item.ui-resizable-disabled > .ui-resizable-handle, .fluent-dashboard .grid-stack-item.ui-resizable-autohide > .ui-resizable-handle {
display: none;
}
.fluent-dashboard .grid-stack-item > .ui-resizable-ne, .fluent-dashboard .grid-stack-item > .ui-resizable-nw, .fluent-dashboard .grid-stack-item > .ui-resizable-se, .fluent-dashboard .grid-stack-item > .ui-resizable-sw {
background-image: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"%23666\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 20 20\"><path d=\"m10 3 2 2H8l2-2v14l-2-2h4l-2 2\"/></svg>");
background-position: center;
background-repeat: no-repeat;
}
.fluent-dashboard .grid-stack-item > .ui-resizable-ne, .fluent-dashboard .grid-stack-item > .ui-resizable-sw {
transform: rotate(45deg);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-nw, .fluent-dashboard .grid-stack-item > .ui-resizable-se {
transform: rotate(-45deg);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-nw {
cursor: nw-resize;
width: 20px;
height: 20px;
top: var(--gs-item-margin-top);
left: var(--gs-item-margin-left);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-n {
cursor: n-resize;
height: 10px;
top: var(--gs-item-margin-top);
left: 25px;
right: 25px;
}
.fluent-dashboard .grid-stack-item > .ui-resizable-ne {
cursor: ne-resize;
width: 20px;
height: 20px;
top: var(--gs-item-margin-top);
right: var(--gs-item-margin-right);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-e {
cursor: e-resize;
width: 10px;
top: 15px;
bottom: 15px;
right: var(--gs-item-margin-right);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-se {
cursor: se-resize;
width: 20px;
height: 20px;
bottom: var(--gs-item-margin-bottom);
right: var(--gs-item-margin-right);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-s {
cursor: s-resize;
height: 10px;
left: 25px;
bottom: var(--gs-item-margin-bottom);
right: 25px;
}
.fluent-dashboard .grid-stack-item > .ui-resizable-sw {
cursor: sw-resize;
width: 20px;
height: 20px;
bottom: var(--gs-item-margin-bottom);
left: var(--gs-item-margin-left);
}
.fluent-dashboard .grid-stack-item > .ui-resizable-w {
cursor: w-resize;
width: 10px;
top: 15px;
bottom: 15px;
left: var(--gs-item-margin-left);
}
.fluent-dashboard .grid-stack-item.ui-draggable-dragging > .ui-resizable-handle {
display: none !important;
}
.fluent-dashboard .grid-stack-item.ui-draggable-dragging {
will-change: left,top;
}
.fluent-dashboard .grid-stack-item.ui-resizable-resizing {
will-change: width,height;
}
.fluent-dashboard .ui-draggable-dragging, .fluent-dashboard .ui-resizable-resizing {
z-index: 10000;
}
.fluent-dashboard .ui-draggable-dragging > .grid-stack-item-content, .fluent-dashboard .ui-resizable-resizing > .grid-stack-item-content {
opacity: .8;
box-shadow: 1px 4px 6px #0003;
}
.fluent-dashboard .grid-stack-animate, .fluent-dashboard .grid-stack-animate .grid-stack-item {
transition: left .3s, top .3s, height .3s, width .3s;
}
.fluent-dashboard .grid-stack-animate .grid-stack-item.ui-draggable-dragging, .fluent-dashboard .grid-stack-animate .grid-stack-item.ui-resizable-resizing, .fluent-dashboard .grid-stack-animate .grid-stack-item.grid-stack-placeholder {
transition: left, top, height, width;
}
.fluent-dashboard .grid-stack > .grid-stack-item[gs-y="0"] {
top: 0;
}
.fluent-dashboard .grid-stack > .grid-stack-item[gs-x="0"] {
left: 0%;
}