Py-detect / src /app /recordpage /recordpage.component.css
pykara's picture
fix
73566f6
raw
history blame
39.7 kB
/* ===== Header ===== */
:root {
--masthead-min-height:140px;
--analytics-blue-height:110px;
--primary-accent: #2563eb;
--primary-accent-light: #38bdf8;
--primary-accent-dark: #1e40af;
--secondary-accent: #7c3aed;
--card-radius:14px;
--card-shadow:06px24px rgba(30,41,59,0.13);
--section-gap:32px;
}
body, main.content {
background: #f4f6fa;
min-height:100vh;
margin:0;
overflow-y: auto;
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
animation: fadeInPage0.7s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes fadeInPage {
from { opacity:0; transform: translateY(32px); }
to { opacity:1; transform: none; }
}
/* Card hover animation */
.record-card, .summary-card, .section-block, .subgroup-block {
transition: box-shadow 0.25s, transform 0.18s;
}
.record-card:hover, .summary-card:hover, .section-block:hover, .subgroup-block:hover {
box-shadow:08px 32px #2563eb33,02px 8px #38bdf822;
/*transform: translateY(-2px) scale(1.012);*/
}
/* Table row hover animation */
.record-table tr {
transition: background 0.18s, box-shadow 0.18s, transform 0.18s;
}
.record-table tr:hover td {
background: #e0f2fe;
box-shadow:02px 12px #38bdf822;
transform: scale(1.01);
}
/* Button and icon-btn animation */
.btn, .icon-btn {
transition: background 0.18s, color 0.18s, box-shadow 0.18s, transform 0.18s;
}
.btn:hover, .icon-btn:hover {
transform: scale(1.08) rotate(-2deg);
box-shadow:04px 16px #2563eb33;
}
/* Modal fade/slide in */
.modal-backdrop {
animation: fadeInModalBg0.4s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes fadeInModalBg {
from { opacity:0; }
to { opacity:1; }
}
.modal {
animation: slideInModal0.5s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes slideInModal {
from { opacity:0; transform: translateY(-40px) scale(0.98); }
to { opacity:1; transform: none; }
}
/* Status badge pulse for Open */
.status-label.status-open, .status-open {
animation: pulseStatusOpen1.6s infinite alternate;
}
@keyframes pulseStatusOpen {
from { box-shadow:0000px #22c55e44; }
to { box-shadow:0008px #22c55e11; }
}
/* Animated icons */
.icon-btn .fa-spin, .summary-icon .fa-spin {
animation: fa-spin1.2s infinite linear;
}
@keyframes fa-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(359deg); }
}
.icon-btn .fa-bounce, .summary-icon .fa-bounce {
animation: fa-bounce1.2s infinite alternate;
}
@keyframes fa-bounce {
0% { transform: translateY(0); }
100% { transform: translateY(-8px); }
}
.icon-btn .fa-beat, .summary-icon .fa-beat {
animation: fa-beat1.1s infinite alternate;
}
@keyframes fa-beat {
0% { transform: scale(1); }
100% { transform: scale(1.18); }
}
/* Subtle fade for overlays */
.modal-blur-overlay {
animation: fadeInModalBg0.4s cubic-bezier(0.4,0.2,0.2,1) both;
}
/* Modern Searchbar animation */
.modern-searchbar-form {
transition: box-shadow 0.18s, transform 0.18s;
}
.modern-searchbar-form:focus-within {
box-shadow:06px 24px #38bdf855;
transform: scale(1.03);
}
/* ===== Header ===== */
:root {
--masthead-min-height: 140px;
--analytics-blue-height:110px; /* Default, can be overridden inline or in other CSS */
--primary-accent: #2563eb;
--primary-accent-light: #38bdf8;
--primary-accent-dark: #1e40af;
--secondary-accent: #7c3aed;
--card-radius:14px;
--card-shadow:06px24px rgba(30,41,59,0.13);
--section-gap:32px;
}
.masthead {
display: flex;
align-items: center;
gap: 24px;
padding: 24px 24px 12px;
min-height: var(--masthead-min-height);
background: transparent;
margin-bottom: 48px;
}
.logo {
width: 120px;
height: 120px;
margin-left: 0;
margin-top: 0;
position: absolute;
left: 0;
top: 0;
z-index: 40;
}
.logo-fixed {
position: fixed;
top: 0;
left: 0;
width: 120px;
height: 120px;
z-index: 100;
margin: 0;
}
/* Add gap between logo and browser border */
.logo-img {
width: 6vw;
position: fixed;
top: 21px;
left: 36px;
z-index: 300;
margin: 0;
background: #ffffff;
max-width: 4.2vw;
min-width: 56px;
height: auto;
border-radius: 50%;
padding: 4px;
box-shadow: 04px 10px rgba(0, 0, 0, 0.25);
transition: transform .25s ease;
}
/* Move Py-Detect text further down by increasing top value of .logo-title-row */
.logo-title-row {
display: flex;
flex-direction: row;
align-items: center;
position: absolute;
top: 180px; /* Increased from 120px to move text further down */
left: 48px;
z-index: 300;
gap: 32px;
justify-content: flex-start;
width: 100%;
}
.py-detect-title {
position: fixed;
margin-left: 97px;
margin-top: -228px;
text-align: left;
font-size: 3vw;
color: #38bdf8;
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
font-weight: 900;
letter-spacing: 6px;
background: none;
border: none;
box-shadow: none;
min-width: unset;
max-width: unset;
}
/* Py-Detect title: each letter with its own color */
.py-detect-title .py-letter.p {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.y {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-shape {
color: #e3f6ff;
background: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
box-shadow: 0 0 6px #38bdf8, 0 0 2px #fff;
border: 2px solid #23272b;
}
.py-shape {
display: inline-block;
width: 18px;
height: 4px;
background: #38bdf8;
margin: 0 8px;
vertical-align: middle;
border-radius: 2px;
box-shadow: 0 0 6px #38bdf8, 0 0 2px #fff;
border: 2px solid #23272b;
}
.py-detect-title .py-letter.d {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.e {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.t {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.e2 {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.c {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title .py-letter.t2 {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-shape {
display: inline-block;
width: 18px;
height: 4px;
background: #38bdf8;
margin: 0 8px;
vertical-align: middle;
border-radius: 2px;
box-shadow: 0 0 6px #38bdf8, 0 0 2px #fff;
border: 2px solid #23272b;
}
/*.title {
font-weight: 800;
margin-bottom: 12px;
}*/
/* header tools */
.toolbar {
display: flex;
justify-content: flex-end;
align-items: center;
position: absolute;
right: 32px;
top: -211%;
transform: translateY(-50%);
width: auto;
margin-bottom: 0;
z-index: 2;
}
.search {
padding: 10px;
border: 1px solid #cbd5e0;
border-radius: 6px;
width: min(360px, 100%);
}
/* layout: keep table centered and scrollable */
.padded-table-wrap {
width: 100%;
padding-left: 48px;
padding-right: 48px;
box-sizing: border-box;
display: flex;
justify-content: center;
background: rgba(30, 41, 59, 0.55); /* semi-transparent dark background */
border-radius: 18px;
box-shadow: 0 4px 32px rgba(30,41,59,0.12);
position: relative;
z-index: 1;
}
.table-wrap {
width: 100%;
max-width: 1700px;
margin: 0 auto;
max-height: 80vh;
min-height: 252px;
overflow: auto;
}
/* --- Modern Table Refactor Inspired by Example --- */
.record-table {
width:100%;
border-collapse: separate;
border-spacing:0;
background: #fff;
border-radius:12px;
box-shadow:0 2px 12px #2563eb11;
overflow: hidden;
}
.record-table th, .record-table td {
padding:14px 14px;
font-size:1.08rem;
border-bottom:1.5px solid #e5e7eb;
text-align: left;
white-space: nowrap;
}
.record-table th {
background: #f8fafc;
color: #222b45;
font-weight:700;
font-size:1.08rem;
letter-spacing:0.5px;
border-bottom:2.5px solid #e5e7eb;
text-shadow: none;
position: sticky;
top:0;
z-index:2;
}
.record-table th i {
color: #e50808;
margin-right: 7px;
font-size: 1.1em;
}
.record-table td {
background: #fff;
font-size:1.05rem;
color: #23272b;
vertical-align: middle;
}
/* Remove alternate row color: force all rows to white */
.record-table tr:nth-child(odd) td {
background: #fff !important;
}
.record-table tr:hover td {
background: #e0f2fe;
transition: background 0.18s;
}
/* Checkbox column */
.record-table td.select-col, .record-table th.select-col {
width:36px;
text-align: center;
padding-left:10px;
padding-right:10px;
}
/* Status badge */
.status-label {
display: inline-flex;
align-items: center;
gap:6px;
padding:3px 14px;
border-radius:12px;
font-weight:700;
font-size:1em;
letter-spacing:0.5px;
min-width:70px;
text-align: center;
background: #e0e7ff;
color: var(--primary-accent);
box-shadow:0 2px 8px #2563eb11;
}
.status-dot {
display: inline-block;
width:9px;
height:9px;
border-radius:50%;
margin-right:4px;
}
.status-open { background: #d1fae5; color: #059669; }
.status-open .status-dot { background: #059669; }
.status-under { background: #dbeafe; color: #2563eb; }
.status-under .status-dot { background: #2563eb; }
.status-closed { background: #fee2e2; color: #dc2626; }
.status-closed .status-dot { background: #dc2626; }
.record-table td.actions-col, .record-table th.actions-col {
min-width:80px;
text-align: left;
padding-right:18px;
}
.icon-btn {
margin:02px;
font-size:1.18em;
border-radius:6px;
padding:6px 10px;
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
background: none;
border: none;
cursor: pointer;
}
.icon-btn.verify { color: #22c55e; }
.icon-btn.view { color: #2563eb; }
.icon-btn.edit { color: #7c3aed; }
.icon-btn.delete { color: #ef4444; }
.icon-btn:hover { background: #f0f7ff; }
.icon-btn.delete:hover { background: #fff0f0; color: #b91c1c; }
.icon-btn.edit:hover { background: #f3e8ff; color: #5b21b6; }
.icon-btn.view:hover { background: #e0f2fe; color: #0ea5e9; }
.icon-btn.verify:hover { background: #e0ffe6; color: #15803d; }
/* Responsive: stack columns on small screens */
@media (max-width:900px) {
.record-table th, .record-table td {
padding:10px6px;
font-size:0.98rem;
}
.record-table {
font-size:0.98rem;
}
}
.empty {
text-align: center;
color: #718096;
padding: 24px;
font-size: 1.1em;
}
.records {
width: 100%;
min-width: 1500px;
max-width: 1700px;
border-collapse: collapse;
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 8px;
margin: 0 auto;
}
.record-table th,
.record-table td {
white-space: nowrap;
min-width: 90px;
}
.record-table td {
vertical-align: middle;
}
.record-table th {
vertical-align: middle;
}
.record-table td a {
white-space: nowrap;
display: inline-block;
min-width: 80px;
}
@media (max-width: 1800px) {
.records {
max-width: 100vw;
min-width: 1000px;
}
.table-wrap {
max-width: 100vw;
min-height: 400px;
}
}
@media (max-width: 900px) {
.records {
min-width: 0;
width: 100%;
max-width: 100vw;
}
.table-wrap {
min-height: 200px;
}
.padded-table-wrap {
padding-left: 4px;
padding-right: 4px;
}
.records-header-row {
flex-direction: column;
align-items: stretch;
gap: 12px;
padding-left: 4px;
padding-right: 4px;
}
.page-title {
text-align: center;
margin-right: 0;
}
.toolbar {
position: static;
transform: none;
width: 100%;
justify-content: flex-end;
margin-top: 8px;
}
}
.records th, .records td {
padding: 10px 12px;
border-bottom: 1px solid #edf2f7;
text-align: left;
white-space: nowrap;
min-width: 90px;
}
.records td {
vertical-align: middle;
}
.records th {
vertical-align: middle;
}
.records td a {
white-space: nowrap;
display: inline-block;
min-width: 80px;
}
.records thead th {
position: sticky;
top: 0;
z-index: 1;
background: linear-gradient(90deg, #23272b 0%, #0ea5e9 100%);
color: #fff;
font-weight: 800;
font-size: 1.08rem;
letter-spacing: 0.5px;
box-shadow: 0 2px 8px rgba(30,41,59,0.10);
border-bottom: 2.5px solid #0ea5e9;
text-shadow: 0 1px 4px rgba(30,41,59,0.10);
padding-top: 14px;
padding-bottom: 14px;
}
.records th.actions-col, .records td.actions {
color: #fff;
text-align: left;
padding-left: 18px;
padding-right: 18px;
width: 1%;
white-space: nowrap;
}
.records tbody tr:last-child td {
border-bottom: none;
}
.records tbody tr {
transition: background 0.18s;
}
.records tbody tr:nth-child(odd) {
background: #fafafa;
}
.records tbody tr:hover {
background: #eef5ff;
}
/* column widths */
.records th:nth-child(1), .records td:nth-child(1) {
width: 90px;
}
.records th:nth-child(2), .records td:nth-child(2) {
width: 140px;
}
.records th:nth-child(3), .records td:nth-child(3) {
width: 180px;
}
.records th:nth-child(4), .records td:nth-child(4) {
min-width: 220px;
}
.records th:nth-child(5), .records td:nth-child(5) {
width: 130px;
}
.records th:nth-child(6), .records td:nth-child(6) {
width: 140px;
}
.actions-col {
width: 200px;
}
/* badges + helpers */
.status {
display: inline-block;
padding: 2px 8px;
border-radius: 999px;
font-weight: 600;
font-size: 12px;
}
.status.open {
background: #dcfce7;
color: #166534;
}
.status.under {
background: #fff7ed;
color: #9a3412;
}
.status.closed {
background: #fee2e2;
color: #991b1b;
}
.status-label {
display: inline-block;
padding: 3px 16px;
border-radius: 12px;
font-weight: 700;
font-size: 1em;
letter-spacing: 0.5px;
min-width: 70px;
text-align: center;
background: #e5e7eb;
color: #22223b;
}
.status-open {
background: #d1fae5;
color: #059669;
}
.status-under {
background: #dbeafe;
color: #2563eb;
}
.status-closed {
background: #fee2e2;
color: #dc2626;
}
.mono {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* buttons */
.actions {
display: flex;
gap: 8px;
}
.btn {
padding: 8px 12px;
border: 1px solid #cbd5e0;
border-radius: 8px;
background: #f7fafc;
cursor: pointer;
}
.btn.view {
background: #2b6cb0;
color: #fff;
border-color: #2b6cb0;
}
.btn.edit {
background: #805ad5;
color: #fff;
border-color: #805ad5;
}
.btn.delete {
background: #ef4444;
color: #fff;
border-color: #ef4444;
box-shadow: 0 2px 8px #ef444422;
transition: background 0.18s, color 0.18s;
}
.btn.delete:hover {
background: #991b1b;
color: #fff;
}
/* Icon buttons */
.icon-btn {
background: none;
border: none;
padding: 6px 10px;
margin: 0 2px;
border-radius: 6px;
cursor: pointer;
font-size: 1.18em;
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
vertical-align: middle;
outline: none;
display: inline-flex;
align-items: center;
justify-content: center;
}
.icon-btn.view {
margin: 0;
padding: 0 8px;
background: none;
border: none;
cursor: pointer;
color: #2563eb;
font-size: 1.2em;
display: inline-flex;
align-items: center;
justify-content: center;
}
.icon-btn.edit {
color: #7c3aed;
}
.icon-btn.delete {
color: #ef4444;
}
.icon-btn:hover {
background: #f0f7ff;
box-shadow: 0 2px 8px #2563eb22;
}
.icon-btn.delete:hover {
background: #fff0f0;
color: #b91c1c;
}
.icon-btn.edit:hover {
background: #f3e8ff;
color: #5b21b6;
}
.icon-btn.view:hover {
background: #e0f2fe;
color: #0ea5e9;
}
.icon-btn.verify {
color: #22c55e;
}
.icon-btn.verify:hover {
background: #e0ffe6;
color: #15803d;
}
.empty {
text-align: center;
color: #718096;
padding: 24px;
}
/* modal */
.modal-backdrop {
position: fixed;
inset: 0;
background: rgba(0,0,0,.45);
}
.modal {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
min-width: 0;
min-height: 0;
max-width: 100vw;
max-height: 100vh;
background: #fff;
border-radius: 0;
box-shadow: none;
overflow-y: auto;
z-index: 2000;
padding: 0;
font-size: 1.13rem;
animation: none;
display: flex;
flex-direction: column;
}
.modal-header, .modal-footer {
padding: 24px 40px 18px 40px;
background: #f8fafc;
font-weight: 700;
font-size: 1.18rem;
color: #23272b;
}
.modal-body {
flex: 1 1 auto;
padding: 32px 48px 32px 48px;
background: #fff;
color: #23272b;
font-size: 1.08rem;
overflow-y: auto;
}
.detail-row {
display: grid;
grid-template-columns: 180px 1fr;
gap: 12px;
padding: 10px 0;
border-bottom: 1px solid #e5e7eb;
}
.detail-row:last-child {
border-bottom: none;
}
.detail-row span {
color: #2563eb;
font-weight: 600;
font-size: 1.07em;
}
.detail-row b {
color: #23272b;
font-weight: 500;
font-size: 1.07em;
}
.detail-block {
margin-top: 18px;
margin-bottom: 8px;
}
.detail-block .label {
font-weight: 700;
color: #2563eb;
margin-bottom: 6px;
font-size: 1.09em;
}
.explain {
white-space: pre-wrap;
color: #23272b;
font-size: 1.07em;
}
.modal-footer {
text-align: right;
}
.btn {
padding: 8px 18px;
border: 1px solid #cbd5e0;
border-radius: 8px;
background: #f7fafc;
cursor: pointer;
font-size: 1.05em;
font-weight: 600;
margin-left: 8px;
}
.btn:hover {
background: #e0e7ef;
}
.records-center {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 90px;
}
.records-header-row {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 100%;
margin-bottom: 24px;
padding-left: 48px;
padding-right: 48px;
box-sizing: border-box;
position: relative;
}
.page-title {
text-align: center;
width: 100%;
color: #fff;
font-weight: 800;
margin-bottom: 32px; /* Increased from 0 to 32px for more space */
margin-right: 0;
font-size: 2.1rem;
position: relative;
z-index: 1;
}
/* sort indicators */
.sort {
display: inline-block;
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
margin-left: 6px;
}
.sort.asc {
border-bottom: 6px solid #4a5568;
}
.sort.desc {
border-top: 6px solid #4a5568;
}
/* Remove global blur and pointer-events when modal is open */
/*
.show-details body > *:not(.cdk-overlay-container):not(app-root),
.show-details app-root > *:not(.modal):not(.modal-backdrop) {
filter: blur(8px) !important;
pointer-events: none !important;
user-select: none !important;
}
*/
.show-details .modal,
.show-details .modal-backdrop {
filter: none !important;
pointer-events: auto !important;
user-select: auto !important;
z-index: 200;
}
/* Remove previous ::before blur if present */
.show-details main.content::before {
display: none !important;
}
/* Modal blur overlay for white shadow and blur effect */
.modal-blur-overlay {
position: fixed;
inset: 0;
z-index: 199;
background: rgba(255,255,255,0.45); /* white shadow */
backdrop-filter: blur(8px);
pointer-events: none;
display: block;
}
.show-details .modal-blur-overlay {
display: block;
}
/* Modern Searchbar Styles */
.modern-searchbar-container {
width: 100%;
display: flex;
justify-content: center;
margin: 48px 0 32px 0;
z-index: 10;
}
.modern-searchbar-container.compact {
width: auto;
margin: 0 0 0 24px;
align-items: center;
}
.modern-searchbar-form {
display: flex;
align-items: center;
background: linear-gradient(90deg, #38bdf8 0%, #7c3aed 100%);
border-radius: 48px;
box-shadow: 0 4px 24px rgba(30,41,59,0.18);
padding: 0 16px 0 18px;
width: min(600px, 90vw);
height: 72px;
position: relative;
}
.modern-searchbar-form.compact {
height: 44px;
min-width: 260px;
width: 320px;
padding: 0 8px 0 10px;
}
.modern-searchbar-icon {
display: flex;
align-items: center;
margin-right: 12px;
}
.modern-searchbar-input {
flex: 1;
border: none;
outline: none;
background: transparent;
color: #fff;
font-size: 1.05rem;
font-weight: 500;
letter-spacing: 0.5px;
padding: 0 6px;
height: 32px;
}
.modern-searchbar-input::placeholder {
color: #e0e7ef;
opacity: 1;
font-weight: 400;
}
.modern-searchbar-btn {
background: #fff;
color: #7c3aed;
border: none;
border-radius: 32px;
font-size: 0.98rem;
font-weight: 700;
padding: 0 18px;
height: 32px;
margin-left: 10px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(124,58,237,0.10);
transition: background 0.18s, color 0.18s;
}
.modern-searchbar-btn:hover {
background: #ede9fe;
color: #4f46e5;
}
.modern-searchbar-form.white-bg {
background: #fff !important;
box-shadow: 0 4px 24px rgba(30,41,59,0.10);
}
.modern-searchbar-input.white-bg {
background: #fff !important;
color: #23272b !important;
}
.modern-searchbar-input.white-bg::placeholder {
color: #64748b !important;
opacity: 1;
}
.modern-searchbar-icon svg {
stroke: #64748b !important;
}
.modern-searchbar-btn {
background: #64748b;
color: #fff;
border: none;
border-radius: 32px;
font-size: 0.98rem;
font-weight: 700;
padding: 0 18px;
height: 32px;
margin-left: 10px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(124,58,237,0.10);
transition: background 0.18s, color 0.18s;
}
.modern-searchbar-btn:hover {
background: #38bdf8;
color: #fff;
}
.back-colo {
background: #011329;
width: 100%;
height: 7vw;
position: fixed;
}
/* Search bar at top right corner */
.searchbar-topright {
position: fixed;
top: 20px;
right: 48px;
z-index: 1001;
display: flex;
align-items: center;
}
.back-colo {
background: #011329;
width: 100%;
height: 7vw;
position: fixed;
}
@media (max-width: 900px) {
.searchbar-topright {
top: 12px;
right: 8px;
width: 95vw;
justify-content: flex-end;
}
.modern-searchbar-form.compact {
width: 100%;
min-width: 0;
}
}
/* Modern UI header styles from infopage */
.site-header {
background: #011329;
box-shadow: 0 2px 12px #38bdf844;
margin-bottom: 0;
position: relative;
z-index: 10;
padding-bottom: 0;
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 32px 0 32px;
position: relative;
}
.logo-cluster {
display: flex;
align-items: center;
gap: 18px;
}
.logo-img-header {
width: 54px;
height: 54px;
border-radius: 50%;
background: #fff;
box-shadow: 0 2px 8px rgba(0,0,0,0.18);
padding: 4px;
margin-top: -6px;
margin-bottom: 1vh;
}
.py-detect-title-header {
font-size: 2.1rem;
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
font-weight: 900;
letter-spacing: 6px;
color: #38bdf8;
display: flex;
align-items: center;
gap: 2px;
margin-bottom: 1.5vh;
}
.py-detect-title-header .py-letter.p {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.y {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-shape {
color: #e3f6ff;
background: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
box-shadow: 0 0 6px #38bdf8, 0 0 2px #fff;
border: 2px solid #23272b;
width: 18px;
height: 4px;
display: inline-block;
margin: 0 8px;
border-radius: 2px;
}
.py-detect-title-header .py-letter.d {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.e {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.t {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.e2 {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.c {
color: #e3f6ff;
text-shadow: 0 0 6px #38bdf8;
}
.py-detect-title-header .py-letter.t2 {
color: #38bdf8;
text-shadow: 0 0 6px #38bdf8;
}
header {
position: relative;
z-index: 10;
}
.header-actions-right {
position: absolute;
right: 32px;
top: 27px;
display: flex;
align-items: center;
z-index: 100;
}
.logout-btn {
font-family: 'Montserrat', 'Poppins', 'Arial Black', Arial, sans-serif;
font-size: 1.05rem;
font-weight: 700;
letter-spacing: 2px;
background: linear-gradient(90deg, #ef4444 0%, #23272b 100%);
color: #fff;
box-shadow: 0 2px 16px #ef444488;
border: none;
border-radius: 12px;
padding: 0.55rem 1.3rem;
margin: 0 0.3rem;
cursor: pointer;
transition: background 0.4s, box-shadow 0.4s, color 0.3s, transform 0.2s;
overflow: hidden;
}
.logout-btn:hover {
background: linear-gradient(90deg, #23272b 0%, #ef4444 100%);
color: #fff;
box-shadow: 0 2px 24px #ef444488;
transform: scale(1.04);
}
.logout-icon {
font-size: 1.2em;
margin-right: 6px;
}
body, main.content {
background: #f4f6fa;
min-height: 100vh;
margin: 0;
overflow-y: auto; /* enables scrolling */
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
}
.record-card {
background: #fff;
border-radius: 10px;
box-shadow: 0 2px 8px #0001, 0 1.5px 0 #e5e7eb;
border: 1.5px solid #e5e7eb;
margin: 24px auto 0 auto;
max-width: 98vw;
width: 98vw;
min-width: 320px;
padding: 0;
overflow-x: auto;
overflow-y: visible;
}
.record-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 24px 8px 24px;
border-bottom: 1.5px solid #e5e7eb;
background: linear-gradient(90deg, #38bdf8 0%, #6366f1 100%);
border-radius: 10px 10px 0 0;
}
.record-title-group {
display: flex;
align-items: center;
gap: 12px;
}
.record-title {
font-size: 1.25rem;
font-weight: 700;
color: #fff;
}
.record-dropdown {
font-size: 1.05rem;
color: #222b45;
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 6px;
padding: 4px 12px;
margin-left: 8px;
}
.record-header-actions {
display: flex;
align-items: center;
gap: 10px;
}
.record-search {
border: 1.5px solid #e5e7eb;
border-radius: 6px;
padding: 6px 12px;
font-size: 1rem;
background: #fff;
margin-right: 8px;
min-width: 220px;
}
.record-new-btn {
background: #2563eb;
color: #fff;
font-weight: 600;
border: none;
border-radius: 6px;
padding: 7px 22px;
font-size: 1rem;
box-shadow: 0 2px 8px #2563eb22;
cursor: pointer;
transition: background 0.18s;
}
.record-new-btn:hover {
background: #1e40af;
}
.record-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
background: #4654ff;
}
.record-table th, .record-table td {
border-bottom: 1.5px solid #e5e7eb;
padding: 12px 16px;
text-align: left;
font-size: 1.05rem;
}
.record-table th {
background: #f4f6fa;
color: #222b45;
font-weight: 700;
}
.record-table tr:last-child td {
border-bottom: none;
}
.record-table tr {
transition: background 0.15s;
}
.record-table a {
color: #2563eb;
text-decoration: underline;
cursor: pointer;
}
.record-table .record-status {
font-weight: 500;
border-radius: 6px;
padding: 2px 10px;
background: #f1f5f9;
color: #2563eb;
font-size: 0.98em;
}
.vertical-sections {
display: flex;
flex-direction: column;
gap: 32px;
}
.horizontal-sections {
display: flex;
flex-direction: column;
gap: 36px;
background: linear-gradient(120deg, #f0f7ff 0%, #e0f2fe 100%);
border-radius: 24px;
box-shadow: 0 8px 32px #2563eb22;
padding: 32px 0 32px 0;
}
.section-block {
background: rgba(255,255,255,0.98);
border-radius: 18px;
box-shadow: 0 4px 24px #38bdf822;
padding: 28px 38px 18px 38px;
margin-bottom: 0;
display: flex;
flex-direction: column;
gap: 22px;
border-left: 6px solid #38bdf8;
transition: box-shadow 0.2s, border 0.2s;
}
.section-block:hover {
box-shadow: 0 8px 32px #2563eb33;
border-left: 6px solid #2563eb;
}
.section-title {
font-size: 1.32em;
font-weight: 900;
color: #1d4ed8;
margin-bottom: 12px;
letter-spacing: 1px;
text-shadow: 0 1px 0 #fff;
display: flex;
align-items: center;
gap: 10px;
}
.subgroup-row {
display: flex;
flex-direction: row;
gap: 36px;
overflow-x: auto;
}
.subgroup-block {
min-width: 260px;
flex: 1 1 0;
background: rgba(248,250,252,0.95);
border-radius: 14px;
box-shadow: 0 2px 8px #38bdf822;
padding: 18px 20px 10px 20px;
margin-bottom: 0;
margin-top: 8px;
display: flex;
flex-direction: column;
gap: 0;
border: 1.5px solid #e0e7ef;
transition: box-shadow 0.18s, border 0.18s, background 0.18s;
}
.subgroup-block:hover {
box-shadow: 0 4px 16px #38bdf855;
border: 1.5px solid #38bdf8;
background: #e0f2fe;
}
.subgroup-title {
font-size: 1.11em;
font-weight: 700;
color: #0ea5e9;
margin-bottom: 12px;
letter-spacing: 0.5px;
text-shadow: 0 1px 0 #fff;
display: flex;
align-items: center;
gap: 8px;
}
.fields-table {
display: flex;
flex-direction: column;
gap: 0;
background: none;
box-shadow: none;
border-radius: 0;
padding: 0;
}
.field-row {
display: flex;
flex-direction: row;
align-items: flex-start;
padding: 14px 0 14px 0;
border-bottom: 1px solid #e0e7ef;
font-size: 1.09em;
background: none;
box-shadow: none;
border-radius: 0;
transition: background 0.18s;
gap: 32px;
}
.field-row:last-child {
border-bottom: none;
}
.field-row span {
color: #1e293b;
font-weight: 700;
letter-spacing: 0.2px;
min-width: 180px;
font-size: 1.08em;
margin-right: 32px;
text-align: left;
display: inline-block;
}
.field-row b {
color: #2563eb;
font-weight: 700;
word-break: break-word;
letter-spacing: 0.1px;
font-size: 1.13em;
margin-left: 8px;
text-align: left;
display: inline-block;
}
.field-row b:hover {
color: #0ea5e9;
}
.subgroup-pills {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 18px;
}
.subgroup-pills button {
background: linear-gradient(90deg, #38bdf8 0%, #2563eb 100%);
border: none;
border-radius: 20px;
padding: 7px 22px;
font-size: 1em;
color: #fff;
font-weight: 700;
cursor: pointer;
box-shadow: 0 2px 8px #2563eb22;
transition: background 0.18s, color 0.18s, box-shadow 0.18s;
outline: none;
}
.subgroup-pills button.active,
.subgroup-pills button:focus {
background: linear-gradient(90deg, #2563eb 0%, #38bdf8 100%);
color: #fff;
box-shadow: 0 4px 16px #38bdf855;
}
.subgroup-pills button:hover {
background: linear-gradient(90deg, #0ea5e9 0%, #2563eb 100%);
color: #fff;
}
.field-card {
display: flex;
width: 30%;
gap: 9vw;
justify-content: space-between;
}
/* Responsive tweaks */
@media (max-width: 900px) {
.section-block {
padding: 18px 8vw 12px 8vw;
}
.subgroup-block {
min-width: 180px;
padding: 12px 8px 8px 8px;
}
.field-row span {
min-width: 120px;
}
}
@media (max-width: 600px) {
.section-block {
padding: 10px 2vw 8px 2vw;
}
.subgroup-block {
min-width: 120px;
padding: 8px 2px 6px 2px;
}
.field-row span {
min-width: 80px;
font-size: 0.98em;
}
.field-row b {
font-size: 1em;
}
}
/* Modern styles for the filter bar, dropdowns, and buttons */
.filter-bar {
display: flex;
gap: 16px;
align-items: center;
margin: 24px 0 12px 0;
padding: 12px 18px;
background: linear-gradient(90deg, #38bdf8 0%, #6366f1 100%);
border-radius: 12px;
box-shadow: 0 2px 8px #2563eb11;
}
.filter-bar select {
padding: 6px 18px;
border-radius: 6px;
border: 1.5px solid #cbd5e1;
font-size: 1em;
color: #2563eb;
background: #fff;
font-weight: 600;
outline: none;
transition: border 0.15s;
}
.filter-bar select:focus {
border: 1.5px solid #38bdf8;
}
.filter-bar button {
padding: 6px 18px;
border-radius: 6px;
border: none;
font-size: 1em;
font-weight: 700;
cursor: pointer;
background: #2563eb;
color: #fff;
transition: background 0.15s;
}
.filter-bar button:hover {
background: #0ea5e9;
}
.filter-bar button:last-child {
background: #f87171;
color: #fff;
margin-left: 4px;
}
.filter-bar button:last-child:hover {
background: #ef4444;
}
.analytics-panel {
margin: 18px 16px 8px 16px;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 24px rgba(15,23,42,0.06);
}
.analytics-header {
background: linear-gradient(90deg,#6b46ff,#7c3aed);
color: #fff;
padding: 16px 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.analytics-title {
font-weight: 800;
font-size: 1.05rem;
}
.create-project-btn {
background: #fff;
color: #111827;
border: none;
padding: 8px 12px;
border-radius: 6px;
font-weight: 700;
cursor: pointer;
}
.analytics-cards {
display: flex;
gap: 5px;
width: 100%;
justify-content: stretch;
align-items: stretch;
}
.summary-card {
flex: 110;
min-width: 0;
max-width: none;
/* keep all previous styles and animations */
border: none;
border-radius: var(--card-radius);
box-shadow: var(--card-shadow);
border-left: 5px solid var(--primary-accent-light);
transition: box-shadow 0.18s, border 0.18s, transform 0.18s;
background: #3f51b526;
padding: 10px 12px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
@media (max-width: 900px) {
.analytics-cards { gap: 6px; padding: 8px; }
.summary-card { flex: 11100%; min-width: 80px; max-width: 100%; padding: 6px 6px; flex-direction: row; }
}
/* Footer */
footer {
background: linear-gradient(to right, #011022, #01030a);
color: #fff;
text-align: center;
padding: 10px 0px;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
z-index: 100;
margin-top: 0;
}
.back-btn {
font-family: 'Montserrat', 'Poppins', 'Arial Black', Arial, sans-serif;
font-size: 0.95rem;
font-weight: 700;
letter-spacing: 1px;
background: #fff;
color: #23272b;
border: 1px solid #d1d5db;
border-radius: 6px;
padding: 0.32rem 0.8rem;
margin: 0 0.3rem;
cursor: pointer;
transition: background 0.3s, color 0.2s, box-shadow 0.2s, transform 0.2s;
box-shadow: 0 2px 8px #d1d5db44;
display: inline-flex;
align-items: center;
gap: 6px;
}
.back-btn:hover {
background: #f3f4f6;
color: #1976d2;
box-shadow: 0 2px 16px #bae6fd88;
transform: scale(1.04);
}
.back-icon {
font-size: 1.1em;
margin-right: 4px;
}
.back-btn,
.logout-btn {
font-size: 0.85rem;
padding: 0.18rem 0.7rem;
border-radius: 5px;
min-width: unset;
min-height: unset;
box-shadow: 0 1px 4px #d1d5db22;
display: inline-flex;
align-items: center;
gap: 6px;
}
.analytics-blue {
height: var(--analytics-blue-height);
animation: analyticsBlueFadeIn0.7s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes analyticsBlueFadeIn {
from {
opacity:0;
transform: translateY(-32px);
}
to {
opacity:1;
transform: translateY(0);
}
}
/* === Modern Additions for Record Page === */
:root {
--primary-accent: #2563eb;
--primary-accent-light: #38bdf8;
--primary-accent-dark: #1e40af;
--secondary-accent: #7c3aed;
--card-radius:14px;
--card-shadow:06px24px rgba(30,41,59,0.13);
--section-gap:32px;
}
/* Modern gradient for analytics-blue */
.analytics-blue {
background: linear-gradient(90deg, var(--primary-accent)0%, var(--primary-accent-light)100%);
border-radius: var(--card-radius) var(--card-radius)00;
box-shadow: var(--card-shadow);
}
/* Modern shadow and accent border for summary-card */
.summary-card {
border-radius: var(--card-radius);
box-shadow: var(--card-shadow);
border-left:5px solid var(--primary-accent-light);
transition: box-shadow 0.18s, border 0.18s;
}
.summary-card:hover {
box-shadow:0 10px 32px rgba(30,41,59,0.18);
border-left:5px solid var(--primary-accent);
}
/* Modern color for summary-label, value, sub */
.summary-label {
color: var(--primary-accent);
font-weight:900;
font-size:1.25rem;
letter-spacing:1.5px;
text-transform: uppercase;
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
margin-bottom:-11px;
opacity:0.95;
}
.summary-value {
font-size:3.0rem;
font-weight:500;
color: var(--primary-accent-light);
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
letter-spacing:2px;
text-shadow:02px 8px #2563eb11;
margin-bottom:4px;
}
.summary-sub {
color: var(--secondary-accent);
font-size:1.18rem;
font-weight:700;
font-family: 'Segoe UI', 'Arial', 'Roboto', sans-serif;
opacity:0.88;
}
.summary-icon {
width:64px;
height:64px;
border-radius:12px;
display: flex;
align-items: center;
justify-content: center;
font-size:2.6rem;
margin-bottom:0;
margin-left:18px;
}
/* Slide-in animation for table rows on load */
.record-table tbody tr {
animation: rowSlideIn0.7s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes rowSlideIn {
from { opacity:0; transform: translateX(-32px); }
to { opacity:1; transform: none; }
}
/* Animated highlight (glow, no shadow) on row hover/focus */
.record-table tr:hover td,
.record-table tr:focus-within td {
background: #e0f2fe !important;
animation: rowGlow1.2s linear infinite alternate;
border-left:4px solid #38bdf8;
}
@keyframes rowGlow {
from { box-shadow:0000px #38bdf800; }
to { box-shadow:0004px #38bdf866; }
}
/* Remove box-shadow on hover for table rows (override previous) */
.record-table tr:hover td {
box-shadow: none !important;
}
/* Animated highlight for selected row (if you use .selected-row) */
.record-table tr.selected-row td {
background: #bae6fd !important;
animation: rowGlowSelected1.2s linear infinite alternate;
border-left:4px solid #38bdf8;
}
@keyframes rowGlowSelected {
from { box-shadow:0000px #38bdf800; }
to { box-shadow:0004px #38bdf866; }
}
/* Remove all box-shadow from table rows and cells */
.record-table td, .record-table th {
box-shadow: none !important;
}
/* === Summary Card Animations and Dynamic Styles === */
.summary-card {
transition: box-shadow 0.25s, border 0.18s, transform 0.18s;
cursor: pointer;
height: 100px;
}
.summary-card:hover {
transform: scale(1.045) rotate(0deg);
/* Default blue glow, overridden below for each type */
box-shadow:0 0 24px 0 #38bdf8cc,0 10px 32px rgba(30,41,59,0.18);
border-left:5px solid var(--primary-accent);
}
/* Card type specific icon and glow */
.summary-card.total .summary-icon {
/* background: linear-gradient(135deg, #38bdf8 0%, #7c3aed 100%); */
color: #23272b;
box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); /* effectively no shadow */
}
.summary-card.total:hover {
box-shadow: 0 0 32px 0 #38bdf8cc, 0 10px 32px #38bdf822;
border-left: 5px solid #38bdf8;
}
.summary-card.closed .summary-icon {
/* background: linear-gradient(135deg, #ef4444 0%, #991b1b 100%); */
color: #ef4444;
}
.summary-card.closed:hover {
box-shadow: 0 0 32px 0 #ef4444cc, 0 10px 32px #ef444422;
border-left: 5px solid #ef4444;
}
.summary-card.open .summary-icon {
/* background: linear-gradient(135deg, #22c55e 0%, #2563eb 100%); */
color: #00ae0e; /* 6 digit hex, avoids linter warnings */
}
.summary-card.open:hover {
box-shadow: 0 0 32px 0 #22c55ecc, 0 10px 32px #22c55e22;
border-left: 5px solid #22c55e;
}
/* Subtle bounce animation for icon on hover */
.summary-card:hover .summary-icon {
animation: summary-bounce0.7s cubic-bezier(0.4,0.2,0.2,1) both;
}
@keyframes summary-bounce {
0% { transform: scale(1) translateY(0); }
30% { transform: scale(1.18) translateY(-6px); }
60% { transform: scale(0.96) translateY(2px); }
100% { transform: scale(1) translateY(0); }
}
.summary-value.blue { color: #2563eb; }
.summary-value.green { color: #22c55e; }
.summary-value.red { color: #ef4444; }