"data": [
Browse files{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:49:45.095436Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Status": "Suspended",
"ActiveVersion": 0
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Type": "Suspended",
"RequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"specversion": "1.0",
"datacontenttype": "application/json",
"serviceversion": "1.0.0",
"id": "9761792f-b732-44b5-90b6-a3ce2323d478",
"tracespanid": "acfac6d409c0e2ce",
"type": "eidas.ssa.credential.lifecycle.event",
"source": "urn.smartgov.eidas.ssa.admin.api.producer",
"traceid": "89cfa9e4480acc231040eef970a88206",
"servicename": "ep.ssa.admin.api",
"environment": "Development",
"@timestamp": "2025-11-28T15:49:49.272510170Z",
"time": "2025-11-28T15:49:45.0959124Z"
},
{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:49:44.4111312Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"ReasonCode": null,
"CredentialId": "9d5c2053-78a8-40e1-89e3-3433ca4277f2",
"CreatedAt": "2025-11-28T15:49:44.3735803Z",
"Details": {
"OriginalRequest": {
"Until": "2026-09-13T07:01:07+00:00",
"Reason": "Teste "
},
"EventResponse": {
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Status": "Suspended",
"ActiveVersion": 0
}
},
"Actor": "IdP",
"ModifiedAt": null,
"Credential": null,
"Type": "Suspended",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Tenant": null,
"Id": "00000000-0000-0000-0000-000000000000",
"IsDeleted": false,
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Type": "Suspended",
"RequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"specversion": "1.0",
"datacontenttype": "application/json",
"serviceversion": "1.0.0",
"id": "90df64d7-cbf3-42b8-9b70-8b9afd6e1cba",
"tracespanid": "acfac6d409c0e2ce",
"type": "eidas.ssa.credential.lifecycle.event",
"source": "urn.smartgov.eidas.ssa.admin.api.producer",
"traceid": "89cfa9e4480acc231040eef970a88206",
"servicename": "ep.ssa.admin.api",
"environment": "Development",
"@timestamp": "2025-11-28T15:49:49.153379799Z",
"time": "2025-11-28T15:49:44.8945537Z"
},
{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:45:31.1542226Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"ReasonCode": null,
"CredentialId": "9d5c2053-78a8-40e1-89e3-3433ca4277f2",
"CreatedAt": "2025-11-28T15:45:31.1367978Z",
"Details": {
"OriginalRequest": {
"Header": {
"ClientId": "IdP",
"XRequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"UserName": null,
"XTenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"XCorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so"
},
"EventResponse": {
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Status": "Active",
"ActiveVersion": 1
}
},
"Actor": "IdP",
"ModifiedAt": null,
"Credential": null,
"Type": "Resumed",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Tenant": null,
"Id": "00000000-0000-0000-0000-000000000000",
"IsDeleted": false,
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Type": "Resumed",
"RequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"specversion": "1.0",
"datacontenttype": "application/json",
"serviceversion": "1.0.0",
"id": "1e659ca1-33a8-4528-995e-8c78771f9e7b",
"tracespanid": "f1b6c657357e1c54",
"type": "eidas.ssa.credential.lifecycle.event",
"source": "urn.smartgov.eidas.ssa.admin.api.producer",
"traceid": "35f0fb84d4be4d415ae4c524ee6a82e7",
"servicename": "ep.ssa.admin.api",
"environment": "Development",
"@timestamp": "2025-11-28T15:45:35.407546460Z",
"time": "2025-11-28T15:45:31.2348672Z"
},
{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:45:12.9676542Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Status": "Active",
"ActiveVersion": 0
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Type": "Suspended",
"RequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"specversion": "1.0",
"datacontenttype": "application/json",
"serviceversion": "1.0.0",
"id": "57d4b340-d4d3-4f7d-af0a-77b0893cb8d1",
"tracespanid": "d1c0d5780b757223",
"type": "eidas.ssa.credential.lifecycle.event",
"source": "urn.smartgov.eidas.ssa.admin.api.producer",
"traceid": "5e5e2710c9d5568803714a04019c5e0d",
"servicename": "ep.ssa.admin.api",
"environment": "Development",
"@timestamp": "2025-11-28T15:45:17.135512962Z",
"time": "2025-11-28T15:45:12.9679318Z"
},
{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:45:12.0850613Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"ReasonCode": null,
"CredentialId": "39a122e4-15b3-4c3b-b96a-911edc94740e",
"CreatedAt": "2025-11-28T15:45:12.0640691Z",
"Details": {
"OriginalRequest": {
"Until": "2026-09-13T07:01:07+00:00",
"Reason": "Teste "
},
"EventResponse": {
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Status": "Active",
"ActiveVersion": 0
}
},
"Actor": "IdP",
"ModifiedAt": null,
"Credential": null,
"Type": "Suspended",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Tenant": null,
"Id": "00000000-0000-0000-0000-000000000000",
"IsDeleted": false,
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"TenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Type": "Suspended",
"RequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"specversion": "1.0",
"datacontenttype": "application/json",
"serviceversion": "1.0.0",
"id": "8097fcd6-bd76-4c08-96a9-38187bf8173c",
"tracespanid": "d1c0d5780b757223",
"type": "eidas.ssa.credential.lifecycle.event",
"source": "urn.smartgov.eidas.ssa.admin.api.producer",
"traceid": "5e5e2710c9d5568803714a04019c5e0d",
"servicename": "ep.ssa.admin.api",
"environment": "Development",
"@timestamp": "2025-11-28T15:45:17.046197507Z",
"time": "2025-11-28T15:45:12.8432575Z"
},
{
"traceflags": "0",
"dataschema": "urn:smartgov:eidas:ssa:admin:api:producer:CredentialLifecycleEventMessage",
"@version": "1",
"data": {
"RaIdentifier": "IdP",
"CorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"ReasonCode": null,
"Timestamp": "2025-11-28T15:20:06.7420145Z",
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so",
"Details": {
"ReasonCode": null,
"CredentialId": "9d5c2053-78a8-40e1-89e3-3433ca4277f2",
"CreatedAt": "2025-11-28T15:20:06.7194913Z",
"Details": {
"OriginalRequest": {
"RenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"Header": {
"ClientId": "IdP",
"XRequestId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"UserName": null,
"XTenantId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c",
"XCorrelationId": "d3888b90-7059-4783-bdb6-01fb5ebafe3c"
},
"CredentialId": "MD96JIAmEPTBenvtwFbixrEG2ORV5Byr4HlgqmtW2byZ5so"
},
"EventResponse": {
- README.md +8 -5
- components/credential-card.js +113 -0
- index.html +31 -19
- script.js +16 -0
- style.css +26 -19
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title: Credential Lifecycle Tracker
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Credential Lifecycle Tracker π
|
| 3 |
+
colorFrom: pink
|
| 4 |
+
colorTo: purple
|
| 5 |
+
emoji: π³
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CredentialCard extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
const event = JSON.parse(this.getAttribute('data-event'));
|
| 4 |
+
const status = event.data.Type.toLowerCase();
|
| 5 |
+
|
| 6 |
+
this.attachShadow({ mode: 'open' });
|
| 7 |
+
this.shadowRoot.innerHTML = `
|
| 8 |
+
<style>
|
| 9 |
+
.card {
|
| 10 |
+
border-radius: 0.5rem;
|
| 11 |
+
overflow: hidden;
|
| 12 |
+
transition: transform 0.3s ease;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.card:hover {
|
| 16 |
+
transform: translateY(-5px);
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
.status-badge {
|
| 20 |
+
padding: 0.25rem 0.5rem;
|
| 21 |
+
border-radius: 9999px;
|
| 22 |
+
font-size: 0.75rem;
|
| 23 |
+
font-weight: 600;
|
| 24 |
+
text-transform: uppercase;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.detail-item {
|
| 28 |
+
display: flex;
|
| 29 |
+
justify-content: space-between;
|
| 30 |
+
padding: 0.5rem 0;
|
| 31 |
+
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.detail-item:last-child {
|
| 35 |
+
border-bottom: none;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
.detail-label {
|
| 39 |
+
font-weight: 500;
|
| 40 |
+
color: #4B5563;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
.detail-value {
|
| 44 |
+
color: #111827;
|
| 45 |
+
text-align: right;
|
| 46 |
+
max-width: 60%;
|
| 47 |
+
word-break: break-word;
|
| 48 |
+
}
|
| 49 |
+
</style>
|
| 50 |
+
|
| 51 |
+
<div class="card bg-white custom-shadow">
|
| 52 |
+
<div class="p-6">
|
| 53 |
+
<div class="flex justify-between items-start mb-4">
|
| 54 |
+
<div>
|
| 55 |
+
<h3 class="text-lg font-semibold text-gray-900">${event.data.Type}</h3>
|
| 56 |
+
<p class="text-sm text-gray-500">${new Date(event.time).toLocaleString()}</p>
|
| 57 |
+
</div>
|
| 58 |
+
<span class="status-badge status-${status}">${status}</span>
|
| 59 |
+
</div>
|
| 60 |
+
|
| 61 |
+
<div class="space-y-2 text-sm">
|
| 62 |
+
<div class="detail-item">
|
| 63 |
+
<span class="detail-label">Credential ID:</span>
|
| 64 |
+
<span class="detail-value">${event.data.CredentialId}</span>
|
| 65 |
+
</div>
|
| 66 |
+
|
| 67 |
+
<div class="detail-item">
|
| 68 |
+
<span class="detail-label">Tenant ID:</span>
|
| 69 |
+
<span class="detail-value">${event.data.TenantId}</span>
|
| 70 |
+
</div>
|
| 71 |
+
|
| 72 |
+
<div class="detail-item">
|
| 73 |
+
<span class="detail-label">Correlation ID:</span>
|
| 74 |
+
<span class="detail-value">${event.data.CorrelationId}</span>
|
| 75 |
+
</div>
|
| 76 |
+
|
| 77 |
+
${event.data.ReasonCode ? `
|
| 78 |
+
<div class="detail-item">
|
| 79 |
+
<span class="detail-label">Reason:</span>
|
| 80 |
+
<span class="detail-value">${event.data.ReasonCode}</span>
|
| 81 |
+
</div>
|
| 82 |
+
` : ''}
|
| 83 |
+
|
| 84 |
+
<div class="detail-item">
|
| 85 |
+
<span class="detail-label">Environment:</span>
|
| 86 |
+
<span class="detail-value">${event.environment}</span>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
|
| 91 |
+
<div class="px-6 py-3 bg-gray-50 flex justify-between items-center">
|
| 92 |
+
<div class="flex items-center space-x-2">
|
| 93 |
+
<i data-feather="calendar" class="w-4 h-4 text-gray-500"></i>
|
| 94 |
+
<span class="text-xs text-gray-500">${new Date(event.time).toLocaleDateString()}</span>
|
| 95 |
+
</div>
|
| 96 |
+
<span class="text-xs text-gray-500">Event ID: ${event.id}</span>
|
| 97 |
+
</div>
|
| 98 |
+
</div>
|
| 99 |
+
`;
|
| 100 |
+
|
| 101 |
+
// Initialize feather icons
|
| 102 |
+
if (typeof feather !== 'undefined') {
|
| 103 |
+
setTimeout(() => {
|
| 104 |
+
feather.replace({
|
| 105 |
+
'width': 16,
|
| 106 |
+
'height': 16
|
| 107 |
+
});
|
| 108 |
+
}, 0);
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
customElements.define('credential-card', CredentialCard);
|
|
@@ -1,19 +1,31 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Credential Lifecycle Tracker</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
+
<script src="components/credential-card.js"></script>
|
| 12 |
+
</head>
|
| 13 |
+
<body class="bg-gray-100 min-h-screen">
|
| 14 |
+
<div class="container mx-auto px-4 py-8">
|
| 15 |
+
<header class="mb-8">
|
| 16 |
+
<h1 class="text-3xl font-bold text-gray-800">Credential Lifecycle Events</h1>
|
| 17 |
+
<p class="text-gray-600">Track and visualize credential status changes</p>
|
| 18 |
+
</header>
|
| 19 |
+
|
| 20 |
+
<div class="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
|
| 21 |
+
<!-- Cards will be inserted here by JavaScript -->
|
| 22 |
+
</div>
|
| 23 |
+
</div>
|
| 24 |
+
|
| 25 |
+
<script src="script.js"></script>
|
| 26 |
+
<script>
|
| 27 |
+
feather.replace();
|
| 28 |
+
</script>
|
| 29 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 30 |
+
</body>
|
| 31 |
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 2 |
+
const data = [
|
| 3 |
+
// Your JSON data here...
|
| 4 |
+
// (Insert the full JSON array from the request)
|
| 5 |
+
];
|
| 6 |
+
|
| 7 |
+
const container = document.querySelector('.grid');
|
| 8 |
+
|
| 9 |
+
data.forEach((event, index) => {
|
| 10 |
+
const card = document.createElement('credential-card');
|
| 11 |
+
card.setAttribute('data-event', JSON.stringify(event));
|
| 12 |
+
card.classList.add('animate-fade-in');
|
| 13 |
+
card.style.animationDelay = `${index * 100}ms`;
|
| 14 |
+
container.appendChild(card);
|
| 15 |
+
});
|
| 16 |
+
});
|
|
@@ -1,28 +1,35 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
.
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
.
|
| 27 |
-
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Custom animations */
|
| 2 |
+
@keyframes fadeIn {
|
| 3 |
+
from { opacity: 0; transform: translateY(20px); }
|
| 4 |
+
to { opacity: 1; transform: translateY(0); }
|
| 5 |
}
|
| 6 |
|
| 7 |
+
.animate-fade-in {
|
| 8 |
+
animation: fadeIn 0.5s ease-out forwards;
|
|
|
|
| 9 |
}
|
| 10 |
|
| 11 |
+
/* Status colors */
|
| 12 |
+
.status-active {
|
| 13 |
+
background-color: #10B981;
|
| 14 |
+
color: white;
|
|
|
|
| 15 |
}
|
| 16 |
|
| 17 |
+
.status-suspended {
|
| 18 |
+
background-color: #F59E0B;
|
| 19 |
+
color: white;
|
|
|
|
|
|
|
|
|
|
| 20 |
}
|
| 21 |
|
| 22 |
+
.status-created {
|
| 23 |
+
background-color: #3B82F6;
|
| 24 |
+
color: white;
|
| 25 |
}
|
| 26 |
+
|
| 27 |
+
.status-resumed {
|
| 28 |
+
background-color: #8B5CF6;
|
| 29 |
+
color: white;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/* Custom card shadow */
|
| 33 |
+
.custom-shadow {
|
| 34 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
| 35 |
+
}
|