578 lines
13 KiB
CSS
578 lines
13 KiB
CSS
.desktop-presence-page {
|
|
container-name: desktop-presence;
|
|
container-type: inline-size;
|
|
display: flex;
|
|
min-height: calc(100% - 46px);
|
|
flex-direction: column;
|
|
gap: var(--sycm-page-section-gap);
|
|
background: var(--sycm-bg-page-soft);
|
|
}
|
|
|
|
.desktop-presence-page__header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
min-height: 84px;
|
|
gap: var(--sycm-space-lg);
|
|
margin: calc(var(--sycm-page-padding-y) * -1) calc(var(--sycm-page-padding-x) * -1) 0;
|
|
padding: 14px calc(var(--sycm-page-padding-x) + 2px);
|
|
border-bottom: 1px solid var(--sycm-border-base);
|
|
background: var(--sycm-bg-container);
|
|
}
|
|
|
|
.desktop-presence-page__heading > div {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.desktop-presence-page__header h1 {
|
|
margin: 0;
|
|
color: var(--sycm-text-strong);
|
|
font-size: var(--sycm-font-size-page);
|
|
font-weight: var(--sycm-font-weight-semibold);
|
|
line-height: var(--sycm-line-height-tight);
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.desktop-presence-page__header p {
|
|
margin: 5px 0 0;
|
|
color: var(--sycm-text-secondary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
}
|
|
|
|
.desktop-presence-live-label,
|
|
.desktop-presence-device-state {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
color: var(--sycm-color-success);
|
|
font-size: var(--sycm-font-size-caption);
|
|
font-weight: var(--sycm-font-weight-medium);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.desktop-presence-live-label {
|
|
height: 22px;
|
|
border: 1px solid var(--sycm-color-success-border);
|
|
border-radius: var(--sycm-radius-pill);
|
|
padding: 0 8px;
|
|
background: var(--sycm-color-success-bg);
|
|
}
|
|
|
|
.desktop-presence-live-label i,
|
|
.desktop-presence-device-state i {
|
|
width: 6px;
|
|
height: 6px;
|
|
flex: 0 0 6px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
}
|
|
|
|
.desktop-presence-live-label i {
|
|
box-shadow: 0 0 0 4px rgba(27, 181, 116, 0.12);
|
|
animation: desktop-presence-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
.desktop-presence-page__actions {
|
|
display: flex;
|
|
flex: 0 0 auto;
|
|
align-items: center;
|
|
gap: var(--sycm-space-sm);
|
|
}
|
|
|
|
.desktop-presence-sync-time {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 2px;
|
|
}
|
|
|
|
.desktop-presence-sync-time span {
|
|
color: var(--sycm-text-tertiary);
|
|
font-size: var(--sycm-font-size-micro);
|
|
}
|
|
|
|
.desktop-presence-sync-time strong {
|
|
color: var(--sycm-text-secondary);
|
|
font-family: var(--sycm-font-family-number);
|
|
font-size: var(--sycm-font-size-caption);
|
|
font-weight: var(--sycm-font-weight-medium);
|
|
}
|
|
|
|
.desktop-presence-refresh.ant-btn {
|
|
width: var(--sycm-control-height);
|
|
min-width: var(--sycm-control-height);
|
|
padding: 0;
|
|
border-color: var(--sycm-border-base);
|
|
border-radius: var(--sycm-radius-md);
|
|
color: var(--sycm-text-secondary);
|
|
}
|
|
|
|
.desktop-presence-refresh.ant-btn:hover {
|
|
border-color: var(--sycm-color-primary);
|
|
background: var(--sycm-color-primary-soft);
|
|
color: var(--sycm-color-primary);
|
|
}
|
|
|
|
.desktop-presence-status-band {
|
|
display: grid;
|
|
min-height: 104px;
|
|
grid-template-columns: minmax(250px, 1.35fr) repeat(3, minmax(160px, 0.75fr));
|
|
align-items: stretch;
|
|
overflow: hidden;
|
|
border: 1px solid var(--sycm-border-base);
|
|
border-radius: var(--sycm-radius-lg);
|
|
background: var(--sycm-bg-container);
|
|
box-shadow: var(--sycm-shadow-card);
|
|
}
|
|
|
|
.desktop-presence-service,
|
|
.desktop-presence-metric {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
gap: 14px;
|
|
padding: 16px 20px;
|
|
border-right: 1px solid var(--sycm-border-light);
|
|
}
|
|
|
|
.desktop-presence-service {
|
|
position: relative;
|
|
background: #fbfffd;
|
|
}
|
|
|
|
.desktop-presence-service::before {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: 3px;
|
|
background: var(--sycm-color-success);
|
|
content: '';
|
|
}
|
|
|
|
.desktop-presence-service.is-error {
|
|
background: #fffafa;
|
|
}
|
|
|
|
.desktop-presence-service.is-error::before {
|
|
background: var(--sycm-color-danger);
|
|
}
|
|
|
|
.desktop-presence-service__icon,
|
|
.desktop-presence-metric__icon,
|
|
.desktop-presence-device__icon {
|
|
display: grid;
|
|
place-items: center;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.desktop-presence-service__icon {
|
|
width: 42px;
|
|
height: 42px;
|
|
place-items: center;
|
|
border-radius: 50%;
|
|
background: var(--sycm-color-success-bg);
|
|
color: var(--sycm-color-success);
|
|
font-size: 20px;
|
|
}
|
|
|
|
.desktop-presence-service.is-error .desktop-presence-service__icon {
|
|
background: var(--sycm-color-danger-bg);
|
|
color: var(--sycm-color-danger);
|
|
}
|
|
|
|
.desktop-presence-service.is-loading .desktop-presence-service__icon .anticon {
|
|
animation: desktop-presence-spin 1s linear infinite;
|
|
}
|
|
|
|
.desktop-presence-service > div,
|
|
.desktop-presence-metric > div {
|
|
display: flex;
|
|
min-width: 0;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
|
|
.desktop-presence-service span,
|
|
.desktop-presence-metric > div > span {
|
|
color: var(--sycm-text-secondary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
}
|
|
|
|
.desktop-presence-service strong {
|
|
color: var(--sycm-text-strong);
|
|
font-size: var(--sycm-font-size-body-strong);
|
|
font-weight: var(--sycm-font-weight-semibold);
|
|
}
|
|
|
|
.desktop-presence-service small {
|
|
color: var(--sycm-text-tertiary);
|
|
font-size: var(--sycm-font-size-micro);
|
|
}
|
|
|
|
.desktop-presence-metric:last-child {
|
|
border-right: 0;
|
|
}
|
|
|
|
.desktop-presence-metric__icon {
|
|
width: 36px;
|
|
height: 36px;
|
|
border-radius: var(--sycm-radius-lg);
|
|
background: var(--sycm-color-primary-soft);
|
|
color: var(--sycm-color-primary);
|
|
font-size: 18px;
|
|
}
|
|
|
|
.desktop-presence-metric.is-users .desktop-presence-metric__icon {
|
|
background: #eef8ff;
|
|
color: #1479b8;
|
|
}
|
|
|
|
.desktop-presence-metric.is-offline .desktop-presence-metric__icon {
|
|
background: var(--sycm-color-warning-bg);
|
|
color: var(--sycm-color-warning);
|
|
}
|
|
|
|
.desktop-presence-metric strong {
|
|
color: var(--sycm-text-strong);
|
|
font-family: var(--sycm-font-family-number);
|
|
font-size: 24px;
|
|
font-weight: var(--sycm-font-weight-semibold);
|
|
line-height: 1.15;
|
|
}
|
|
|
|
.desktop-presence-metric strong small {
|
|
margin-left: 5px;
|
|
color: var(--sycm-text-tertiary);
|
|
font-family: var(--sycm-font-family);
|
|
font-size: var(--sycm-font-size-caption);
|
|
font-weight: var(--sycm-font-weight-regular);
|
|
}
|
|
|
|
.desktop-presence-table-panel {
|
|
display: flex;
|
|
min-height: 410px;
|
|
flex: 1 1 auto;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
border: 1px solid var(--sycm-border-base);
|
|
border-radius: var(--sycm-radius-lg);
|
|
}
|
|
|
|
.desktop-presence-table-panel > .sycm-business-panel__header {
|
|
min-height: 58px;
|
|
}
|
|
|
|
.desktop-presence-table-panel > .sycm-business-panel__body {
|
|
display: flex;
|
|
min-height: 0;
|
|
flex: 1 1 auto;
|
|
flex-direction: column;
|
|
padding: 0;
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table-wrapper {
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table,
|
|
.desktop-presence-table-panel .ant-table-container,
|
|
.desktop-presence-table-panel .ant-table-content {
|
|
border-radius: 0;
|
|
overflow-x: hidden !important;
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table-thead > tr > th {
|
|
height: 38px;
|
|
padding: 8px 12px;
|
|
background: var(--sycm-bg-table-head);
|
|
color: var(--sycm-text-secondary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
font-weight: var(--sycm-font-weight-medium);
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table-tbody > tr > td {
|
|
min-height: 58px;
|
|
padding: 10px 12px;
|
|
border-bottom-color: var(--sycm-border-light);
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table-tbody > tr:hover > td {
|
|
background: #fafcff;
|
|
}
|
|
|
|
.desktop-presence-table-panel .ant-table-placeholder > td {
|
|
height: clamp(300px, calc(100vh - 430px), 560px);
|
|
padding: 0 !important;
|
|
background: var(--sycm-bg-container) !important;
|
|
}
|
|
|
|
.desktop-presence-filter.ant-segmented {
|
|
border: 1px solid var(--sycm-border-light);
|
|
border-radius: var(--sycm-radius-md);
|
|
padding: 2px;
|
|
background: var(--sycm-bg-subtle);
|
|
color: var(--sycm-text-secondary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
}
|
|
|
|
.desktop-presence-filter .ant-segmented-item {
|
|
min-width: 74px;
|
|
}
|
|
|
|
.desktop-presence-filter .ant-segmented-item-selected {
|
|
color: var(--sycm-text-strong);
|
|
font-weight: var(--sycm-font-weight-medium);
|
|
}
|
|
|
|
.desktop-presence-empty {
|
|
display: flex;
|
|
min-height: clamp(300px, calc(100vh - 430px), 560px);
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-direction: column;
|
|
padding: 36px 20px;
|
|
text-align: center;
|
|
}
|
|
|
|
.desktop-presence-empty__icon {
|
|
display: grid;
|
|
width: 58px;
|
|
height: 58px;
|
|
margin-bottom: 14px;
|
|
place-items: center;
|
|
border: 1px solid var(--sycm-color-primary-border);
|
|
border-radius: 50%;
|
|
background: var(--sycm-color-primary-soft);
|
|
color: var(--sycm-color-primary);
|
|
font-size: 25px;
|
|
}
|
|
|
|
.desktop-presence-empty strong {
|
|
color: var(--sycm-text-strong);
|
|
font-size: var(--sycm-font-size-body-strong);
|
|
font-weight: var(--sycm-font-weight-semibold);
|
|
}
|
|
|
|
.desktop-presence-empty p {
|
|
margin: 6px 0 10px;
|
|
color: var(--sycm-text-tertiary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
}
|
|
|
|
.desktop-presence-empty .ant-btn {
|
|
color: var(--sycm-color-primary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
}
|
|
|
|
.desktop-presence-user,
|
|
.desktop-presence-device,
|
|
.desktop-presence-version,
|
|
.desktop-presence-duration,
|
|
.desktop-presence-heartbeat {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.desktop-presence-user > div,
|
|
.desktop-presence-device > div,
|
|
.desktop-presence-version,
|
|
.desktop-presence-duration,
|
|
.desktop-presence-heartbeat {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 2px;
|
|
}
|
|
|
|
.desktop-presence-user .ant-avatar {
|
|
flex: 0 0 36px;
|
|
background: var(--sycm-color-primary-soft);
|
|
color: var(--sycm-color-primary);
|
|
font-weight: var(--sycm-font-weight-semibold);
|
|
}
|
|
|
|
.desktop-presence-user strong,
|
|
.desktop-presence-device strong,
|
|
.desktop-presence-duration strong,
|
|
.desktop-presence-heartbeat strong {
|
|
color: var(--sycm-text-strong);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.desktop-presence-user span,
|
|
.desktop-presence-device span,
|
|
.desktop-presence-version span,
|
|
.desktop-presence-duration span,
|
|
.desktop-presence-heartbeat span {
|
|
color: var(--sycm-text-tertiary);
|
|
font-size: var(--sycm-font-size-micro);
|
|
white-space: normal;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.desktop-presence-user strong,
|
|
.desktop-presence-user span,
|
|
.desktop-presence-device strong,
|
|
.desktop-presence-device span,
|
|
.desktop-presence-version span {
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.desktop-presence-device__icon {
|
|
width: 30px;
|
|
height: 30px;
|
|
border-radius: var(--sycm-radius-md);
|
|
background: var(--sycm-bg-subtle);
|
|
color: var(--sycm-text-secondary);
|
|
font-size: 15px;
|
|
}
|
|
|
|
.desktop-presence-version .ant-tag {
|
|
margin: 0;
|
|
border-color: var(--sycm-color-primary-border);
|
|
border-radius: var(--sycm-radius-sm);
|
|
background: var(--sycm-color-primary-soft);
|
|
color: var(--sycm-color-primary);
|
|
font-family: var(--sycm-font-family-number);
|
|
font-size: var(--sycm-font-size-micro);
|
|
}
|
|
|
|
.desktop-presence-department {
|
|
color: var(--sycm-text-secondary);
|
|
font-size: var(--sycm-font-size-caption);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.desktop-presence-ip {
|
|
display: inline-block;
|
|
border-radius: var(--sycm-radius-sm);
|
|
padding: 3px 6px;
|
|
background: var(--sycm-bg-subtle);
|
|
color: var(--sycm-text-secondary);
|
|
font-family: var(--sycm-font-family-number);
|
|
font-size: var(--sycm-font-size-micro);
|
|
word-break: break-all;
|
|
}
|
|
|
|
.desktop-presence-device-state {
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.desktop-presence-device-state.is-offline {
|
|
color: var(--sycm-text-tertiary);
|
|
}
|
|
|
|
.desktop-presence-row-offline > td {
|
|
background: #fcfcfd;
|
|
}
|
|
|
|
.desktop-presence-row-offline .desktop-presence-user .ant-avatar,
|
|
.desktop-presence-row-offline .desktop-presence-device__icon {
|
|
background: var(--sycm-bg-subtle);
|
|
color: var(--sycm-text-tertiary);
|
|
}
|
|
|
|
.desktop-presence-row-offline .desktop-presence-heartbeat strong {
|
|
color: var(--sycm-text-secondary);
|
|
}
|
|
|
|
.desktop-presence-heartbeat strong {
|
|
color: var(--sycm-color-success);
|
|
}
|
|
|
|
@keyframes desktop-presence-pulse {
|
|
0%,
|
|
100% {
|
|
box-shadow: 0 0 0 3px rgba(27, 181, 116, 0.1);
|
|
}
|
|
|
|
50% {
|
|
box-shadow: 0 0 0 6px rgba(27, 181, 116, 0.03);
|
|
}
|
|
}
|
|
|
|
@keyframes desktop-presence-spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@container desktop-presence (max-width: 980px) {
|
|
.desktop-presence-status-band {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
|
|
.desktop-presence-service,
|
|
.desktop-presence-metric {
|
|
border-bottom: 1px solid var(--sycm-border-light);
|
|
}
|
|
|
|
.desktop-presence-service,
|
|
.desktop-presence-metric:nth-child(3) {
|
|
border-right: 0;
|
|
}
|
|
|
|
.desktop-presence-metric:nth-child(3),
|
|
.desktop-presence-metric:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
}
|
|
|
|
@container desktop-presence (max-width: 680px) {
|
|
.desktop-presence-page__header {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.desktop-presence-status-band {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.desktop-presence-service,
|
|
.desktop-presence-metric,
|
|
.desktop-presence-service:nth-child(n),
|
|
.desktop-presence-metric:nth-child(n) {
|
|
min-height: 82px;
|
|
border-right: 0;
|
|
border-bottom: 1px solid var(--sycm-border-light);
|
|
}
|
|
|
|
.desktop-presence-metric:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.desktop-presence-sync-time {
|
|
display: none;
|
|
}
|
|
|
|
.desktop-presence-table-panel > .sycm-business-panel__header {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.desktop-presence-table-panel .sycm-business-panel__extra,
|
|
.desktop-presence-filter.ant-segmented {
|
|
width: 100%;
|
|
}
|
|
|
|
.desktop-presence-filter .ant-segmented-group {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
}
|
|
|
|
.desktop-presence-filter .ant-segmented-item {
|
|
min-width: 0;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.desktop-presence-live-label i,
|
|
.desktop-presence-service.is-loading .desktop-presence-service__icon .anticon {
|
|
animation: none;
|
|
}
|
|
}
|