:host { display: block; } /* Modern card wrapper */ .data-table-modern .box { border-radius: 1rem; border: 1px solid var(--color-defaultborder); background-color: var(--color-white); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04); overflow: hidden; } :host-context(.dark) .data-table-modern .box { border-color: color-mix(in srgb, #fff 10%, transparent); background-color: var(--color-bodybg); } .data-table-modern .box-header { // padding: 1rem 1.25rem; padding: 7px 20px; border-bottom: 1px solid var(--color-defaultborder); } :host-context(.dark) .data-table-modern .box-header { border-color: color-mix(in srgb, #fff 10%, transparent); } .data-table-modern .box-title { display: flex; align-items: center; gap: 0.5rem; font-size: 1rem; font-weight: 600; color: var(--color-defaulttextcolor); } /* Search input */ .search-wrapper { position: relative; display: inline-flex; align-items: center; } .brdr-clr { border: 1.5px solid #7c3deb !important; } .search-icon { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--color-textmuted, #8c9097); font-size: 0.8125rem; pointer-events: none; } .data-table-modern .search-wrapper .form-control-sm { min-width: 180px; padding-left: 2.25rem !important; border-radius: 9999px; border-color: var(--color-defaultborder); background-color: var(--color-white); font-size: 0.8125rem; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .data-table-modern .search-wrapper .form-control-sm:focus { border-color: var(--color-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 15%, transparent); outline: none; } :host-context(.dark) .data-table-modern .search-wrapper .form-control-sm { background-color: var(--color-bodybg); border-color: color-mix(in srgb, #fff 10%, transparent); color: var(--color-defaulttextcolor); } /* Table body / wrapper */ .modern-table-body { padding: 0 !important; } .modern-table-wrapper { border-radius: 0 0 0.75rem 0.75rem; } /* Table */ .data-table-modern .table { width: 100%; margin-bottom: 0; border-collapse: separate; border-spacing: 0; font-size: 0.8125rem; } .data-table-modern .table.table-bordered, .data-table-modern .table.table-bordered thead th, .data-table-modern .table.table-bordered tbody td { border: none; } .data-table-modern .table thead { background: #7C3AED; color: var(--color-white); } .data-table-modern .table thead tr:first-child th:first-child { border-top-left-radius: 0.75rem; } .data-table-modern .table thead tr:first-child th:last-child { border-top-right-radius: 0.75rem; } .data-table-modern .table thead th { padding: 0.5rem 0.75rem; font-weight: 700; font-size: 0.75rem; letter-spacing: 0.03em; text-transform: uppercase; white-space: nowrap; vertical-align: middle; color: var(--color-white); background: transparent; border: none; } .data-table-modern .table tbody td { padding: 0.5rem 1rem; vertical-align: middle; color: var(--color-defaulttextcolor); border: none; font-size: 0.8125rem; } .data-table-modern .table tbody tr:hover { // background-color: var(--color-light); background-color: #e1d0ff; box-shadow: inset 3px 0 0 0 #7c3deb; } :host-context(.dark) .data-table-modern .table tbody tr:hover { background-color: color-mix(in srgb, #fff 6%, transparent); box-shadow: inset 3px 0 0 0 #7c3deb; } /* Inactive row action buttons border */ .data-table-modern .inactive-actions button { border: 1.5px solid #7c3deb !important; } /* Footer */ .data-table-modern .box-footer { padding: 0.625rem 1rem; border-top: 1px solid var(--color-defaultborder); background-color: color-mix(in srgb, var(--color-primary) 3%, transparent); } :host-context(.dark) .data-table-modern .box-footer { border-color: color-mix(in srgb, #fff 10%, transparent); background-color: color-mix(in srgb, var(--color-primary) 6%, transparent); } /* Pagination */ .data-table-modern .ti-pagination { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0; margin: 0; } .data-table-modern .ti-pagination li.page-item { display: inline-flex; border: 1px solid var(--color-primary); border-radius: 9999px; } .data-table-modern .ti-pagination li.page-item.disabled { opacity: 0.4; } .data-table-modern .ti-pagination li .page-link { display: inline-flex; align-items: center; justify-content: center; min-width: 1.5rem; height: 1.5rem; padding: 0 0.5rem; border-radius: 9999px; border: none; background-color: transparent; color: var(--color-defaulttextcolor); font-size: 0.75rem; font-weight: 500; line-height: 1; transition: all 0.15s ease; } .data-table-modern .ti-pagination li .page-link:hover:not(:disabled) { background-color: color-mix(in srgb, var(--color-primary) 10%, transparent); color: var(--color-primary); } .data-table-modern .ti-pagination li.active .page-link, .data-table-modern .ti-pagination li .page-link.active { background-color: var(--color-primary) !important; color: var(--color-white); box-shadow: 0 2px 6px color-mix(in srgb, var(--color-primary) 30%, transparent); } .data-table-modern .ti-pagination li.disabled .page-link { cursor: not-allowed; background-color: transparent; } .data-table-modern .ti-pagination li.page-item--ellipsis { border: none; } .data-table-modern .ti-pagination li.page-item--ellipsis .page-link { color: var(--color-textmuted, #8c9097); cursor: default; } :host-context(.dark) .data-table-modern .ti-pagination li .page-link { background-color: transparent; color: color-mix(in srgb, var(--color-defaulttextcolor) 80%, #fff); } :host-context(.dark) .data-table-modern .ti-pagination li .page-link:hover:not(:disabled) { background-color: color-mix(in srgb, var(--color-primary) 15%, transparent); color: var(--color-primary); } :host-context(.dark) .data-table-modern .ti-pagination li.active .page-link, :host-context(.dark) .data-table-modern .ti-pagination li .page-link.active { color: var(--color-white); background-color: var(--color-primary) !important; } /* Page size select — outline-primary pill, sized to fit "100", matching the "Showing X to Y of Z entries" number color/weight. PrimeNG renders its own structural CSS at runtime after this stylesheet, so equal-specificity rules need !important to win the cascade tie (::ng-deep is global here since the overlay panel is appended to , outside this component). */ ::ng-deep { .data-table-page-size { width: 4rem !important; min-width: 4rem !important; height: 1.5rem !important; box-sizing: border-box; border: 1px solid var(--color-primary) !important; border-radius: 9999px !important; background: var(--color-white) !important; transition: box-shadow 0.2s ease, border-color 0.2s ease; &:not(.p-disabled).p-focus { border-color: var(--color-primary) !important; box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 15%, transparent) !important; } .p-select-label { display: flex !important; align-items: center !important; height: 100% !important; padding: 0 0 0 0.6rem !important; font-size: 0.75rem !important; line-height: 1 !important; font-weight: 700 !important; color: var(--color-defaulttextcolor) !important; } .p-select-dropdown { width: 1.25rem !important; height: 100% !important; margin-inline-end: 0.35rem; color: var(--color-primary) !important; } } .data-table-page-size-panel { border: 1px solid var(--color-primary) !important; border-radius: 12px !important; background: var(--color-white) !important; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.12), 0 8px 10px -6px rgba(0, 0, 0, 0.08) !important; overflow: hidden; padding: 0.25rem !important; .p-select-list { padding: 0 !important; margin: 0 !important; gap: 1px; } .p-select-option { padding: 0.4rem 0.75rem !important; font-size: 0.875rem !important; color: var(--color-defaulttextcolor) !important; border-radius: 8px !important; cursor: pointer; transition: background-color 0.15s ease, color 0.15s ease; &:hover { background: color-mix(in srgb, var(--color-primary) 10%, transparent) !important; color: var(--color-primary) !important; } &.p-select-option-selected { background: var(--color-primary) !important; color: var(--color-white) !important; } } } } :host-context(.dark) { ::ng-deep { .data-table-page-size { background: var(--color-bodybg) !important; } .data-table-page-size-panel { background: var(--color-bodybg) !important; } } } /* Responsive scroll */ .table-responsive { width: 100%; overflow-x: auto; overflow-y: visible; } .table th, .table td { vertical-align: middle; } /* Remove number spinner buttons for cleaner look (kept from original) */ .data-table-modern .custom-floating-input[type='number']::-webkit-inner-spin-button, .data-table-modern .custom-floating-input[type='number']::-webkit-outer-spin-button { appearance: none; margin: 0; } .data-table-modern .custom-floating-input[type='number'] { -moz-appearance: textfield; } /* Filter toggle button (in the toolbar) */ .filter-btn-enter { animation: filterButtonIn 0.2s ease-out; } .filter-btn-leave { animation: filterButtonOut 0.15s ease-in forwards; } @keyframes filterButtonIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes filterButtonOut { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.9); } } /* Full-width filter row, joined to the table card */ .table-filter-row { display: grid; grid-template-rows: 0fr; border-bottom-width: 0; background-color: color-mix(in srgb, var(--color-primary) 3%, transparent); transition: grid-template-rows 0.38s cubic-bezier(0.4, 0, 0.2, 1), border-bottom-width 0.38s cubic-bezier(0.4, 0, 0.2, 1); } .table-filter-row.is-open { grid-template-rows: 1fr; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: var(--color-defaultborder); } :host-context(.dark) .table-filter-row { border-color: color-mix(in srgb, #fff 10%, transparent); background-color: color-mix(in srgb, #fff 3%, transparent); } .table-filter-row-inner { grid-row: 1; grid-column: 1; display: flex; align-items: flex-start; gap: 0.75rem; padding: 0 1.25rem; min-height: 0; min-width: 0; opacity: 0; transition: opacity 0.28s ease 0.06s, padding 0.38s cubic-bezier(0.4, 0, 0.2, 1); align-items: baseline; } .table-filter-row:not(.is-open) .table-filter-row-inner { overflow: hidden; } .table-filter-row.is-open .table-filter-row-inner { padding: 0.875rem 1.25rem; opacity: 1; transition: opacity 0.32s ease 0.08s, padding 0.38s cubic-bezier(0.4, 0, 0.2, 1); } .table-filter-row-content { flex: 1 1 auto; display: flex; flex-wrap: nowrap; align-items: flex-end; gap: 0.75rem; min-width: 0; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5rem; margin-bottom: -0.5rem; padding-top: 10px; scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--color-primary) 40%, transparent) transparent; } .table-filter-row-content>* { flex: 0 0 auto; } .table-filter-row-content::-webkit-scrollbar { height: 2px; } .table-filter-row-content::-webkit-scrollbar-thumb { background-color: color-mix(in srgb, var(--color-primary) 45%, transparent); border-radius: 999px; transition: background-color 0.2s ease; } .table-filter-row-content:hover::-webkit-scrollbar-thumb { background-color: color-mix(in srgb, var(--color-primary) 65%, transparent); } .table-filter-row-content::-webkit-scrollbar-track { background: transparent; } .table-filter-row-actions { display: flex; align-items: flex-end; gap: 0.75rem; flex: 0 0 auto; } .table-filter-row-actions.is-pinned { position: sticky; right: 0; margin-left: auto; padding-left: 0.75rem; background: linear-gradient(to right, transparent, color-mix(in srgb, var(--color-primary) 3%, var(--color-white)) 1rem); } :host-context(.dark) .table-filter-row-actions.is-pinned { background: linear-gradient(to right, transparent, color-mix(in srgb, #fff 3%, var(--color-bodybg)) 1rem); } .table-filter-row .filter-close-btn { margin-top: 0.125rem; } .filter-close-btn { transition: transform 0.15s ease, background-color 0.15s ease; border-color: #7c3deb; } .filter-close-btn:hover { transform: rotate(90deg); } .filter-close-btn:active { transform: rotate(90deg) scale(0.9); }