Files
omsorg/omsorgapp/src/style.css
T
Felix KemmlerandClaude Sonnet 5 ffa2c4a9e7
Docker-Images bauen und veröffentlichen / build (, omsorgCore/Dockerfile, omsorgcore) (push) Successful in 16s
Docker-Images bauen und veröffentlichen / build (, omsorgWeb/Dockerfile, omsorgweb) (push) Successful in 5s
Docker-Images bauen und veröffentlichen / build (, omsorgapp/Dockerfile, omsorgapp) (push) Successful in 19s
Add kilometer-based Fahrtkosten billing, self-service distance entry, role deletion
- Facility: TravelCostMode (Pauschale/ProKilometer) + TravelCostPerKm, alongside
  the existing flat rate; fixes FacilityService.UpdateAsync silently dropping all
  Konditionen fields on update.
- New EmployeeFacilityDistance (Mitarbeiter x Einrichtung -> km) with full
  office-side CRUD in omsorgapp, plus a self-service endpoint/UI so field staff
  can maintain their own commute distance via OMSORG Connect (new
  ModuleType.EmployeeFacilityDistances, Own-scope, no Facilities access needed).
- Roles can now be deleted (blocked with a 409 while still assigned to a user).
- Fix employeesApi.js missing the Date-object conversion for dateOfBirth/entryDate/
  exitDate that crashed employee creation whenever a date was filled in; add a
  clear/remove control for those date fields.
- Requirements: flesh out FR-REC-3 with a staged Akquise cadence, add FR-REC-5/6
  for CRM feature scope and success metrics.
- Regenerate api-client-ts and api-client-php for all of the above.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 20:15:42 +02:00

1866 lines
31 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:root {
color-scheme: dark;
font-family:
Inter,
ui-sans-serif,
system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
sans-serif;
color: #eefbff;
background: #11111f;
--omsorg-turquoise: #68d2df;
--omsorg-turquoise-light: #9ce7ee;
--omsorg-turquoise-dark: #35aebb;
--omsorg-navy: #11111f;
--omsorg-navy-soft: #18182a;
--omsorg-petrol: #123a43;
--omsorg-petrol-dark: #0c272e;
--omsorg-text-primary: #f7fbfc;
--omsorg-text-secondary: #b7c9ce;
--omsorg-text-muted: #82979d;
--omsorg-border: rgba(255, 255, 255, 0.09);
--omsorg-border-active: rgba(104, 210, 223, 0.55);
--omsorg-surface: rgba(24, 32, 45, 0.78);
--omsorg-surface-strong: rgba(19, 26, 38, 0.94);
--omsorg-surface-hover: rgba(104, 210, 223, 0.12);
--omsorg-radius-small: 10px;
--omsorg-radius-medium: 16px;
--omsorg-radius-large: 22px;
--omsorg-shadow-small: 0 8px 24px rgba(0, 0, 0, 0.18);
--omsorg-shadow-medium: 0 18px 45px rgba(0, 0, 0, 0.28);
--omsorg-transition: 180ms ease;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body,
#root {
min-height: 100%;
margin: 0;
}
body {
color: var(--omsorg-text-primary);
background:
radial-gradient(
circle at 15% 10%,
rgba(104, 210, 223, 0.22),
transparent 33%
),
radial-gradient(
circle at 85% 85%,
rgba(18, 88, 99, 0.32),
transparent 38%
),
linear-gradient(
135deg,
#11111f 0%,
#10242d 38%,
#123a43 68%,
#11111f 100%
);
background-attachment: fixed;
-webkit-font-smoothing: antialiased;
}
button,
input,
select,
textarea {
font: inherit;
}
button {
cursor: pointer;
}
.layout {
display: flex;
min-height: 100vh;
}
.layout-content {
flex: 1;
min-width: 0;
padding: 28px 34px;
}
.page-content {
padding-top: 8px;
}
.sidebar {
width: 285px;
padding: 24px;
background: rgba(5, 15, 26, 0.72);
backdrop-filter: blur(18px);
border-right: 1px solid rgba(104, 210, 223, 0.16);
}
.sidebar-logo {
display: flex;
gap: 12px;
align-items: center;
margin-bottom: 28px;
}
.sidebar-logo img {
width: 86px;
height: auto;
}
.sidebar-logo h2 {
margin: 0;
font-size: 18px;
}
.sidebar-logo p {
margin: 2px 0 0;
color: var(--omsorg-text-muted);
font-size: 13px;
}
.sidebar nav {
display: grid;
gap: 8px;
}
.menu-button {
width: 100%;
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
color: var(--omsorg-text-primary);
border: 0;
border-radius: 14px;
background: rgba(255, 255, 255, 0.06);
transition:
background var(--omsorg-transition),
transform var(--omsorg-transition),
box-shadow var(--omsorg-transition);
}
.menu-button:hover {
background:
linear-gradient(
135deg,
rgba(104, 210, 223, 0.3),
rgba(104, 210, 223, 0.1)
);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);
transform: translateY(-1px);
}
.menu-button.active {
background:
linear-gradient(
135deg,
rgba(104, 210, 223, 0.22),
rgba(104, 210, 223, 0.08)
);
border: 1px solid var(--omsorg-border-active);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
}
.header h1,
.header h2,
.header h3 {
margin: 0 0 8px;
}
.header h1 {
font-size: 34px;
line-height: 1.15;
}
.header p {
margin: 0;
color: var(--omsorg-text-secondary);
}
.header-right {
display: flex;
align-items: center;
gap: 10px;
}
.header-username {
color: var(--omsorg-text-secondary);
font-size: 0.9rem;
margin-right: 4px;
}
.icon-button {
position: relative;
display: inline-grid;
place-items: center;
width: 44px;
height: 44px;
padding: 0;
color: var(--omsorg-text-primary);
border: 1px solid var(--omsorg-border);
border-radius: 14px;
background: rgba(255, 255, 255, 0.06);
transition:
background var(--omsorg-transition),
border-color var(--omsorg-transition),
transform var(--omsorg-transition);
}
.icon-button:hover {
border-color: var(--omsorg-border-active);
background: var(--omsorg-surface-hover);
transform: translateY(-1px);
}
.notification-dot {
position: absolute;
top: -6px;
right: -6px;
min-width: 20px;
padding: 2px 6px;
color: #11111f;
border-radius: 999px;
background: var(--omsorg-turquoise);
font-size: 11px;
font-weight: 800;
}
.welcome-card,
.dashboard-card {
border: 1px solid var(--omsorg-border);
border-radius: var(--omsorg-radius-large);
background:
linear-gradient(
145deg,
rgba(255, 255, 255, 0.055),
rgba(255, 255, 255, 0.018)
),
var(--omsorg-surface);
box-shadow: var(--omsorg-shadow-small);
backdrop-filter: blur(18px);
}
.welcome-card {
padding: 28px;
margin-bottom: 18px;
}
.welcome-card h2 {
margin: 0 0 10px;
font-size: 28px;
}
.welcome-card p {
margin: 0;
color: var(--omsorg-text-secondary);
}
.accent {
color: var(--omsorg-turquoise);
}
.dashboard-grid {
display: grid;
grid-template-columns: 1.4fr 1fr;
gap: 18px;
}
.dashboard-card {
padding: 22px;
}
.dashboard-card h3 {
margin: 0 0 16px;
}
.dashboard-card ul {
margin: 0;
padding-left: 20px;
color: var(--omsorg-text-secondary);
}
.dashboard-card li {
margin-bottom: 10px;
}
.dashboard-card button {
display: inline-flex;
align-items: center;
margin: 0 8px 8px 0;
padding: 12px 14px;
color: #11111f;
border: 0;
border-radius: 14px;
background:
linear-gradient(
135deg,
var(--omsorg-turquoise-light),
var(--omsorg-turquoise)
);
font-weight: 700;
transition:
transform var(--omsorg-transition),
box-shadow var(--omsorg-transition);
}
.dashboard-card button:hover {
box-shadow: 0 14px 34px rgba(104, 210, 223, 0.28);
transform: translateY(-1px);
}
@media (max-width: 980px) {
.sidebar {
width: 230px;
}
.dashboard-grid {
grid-template-columns: 1fr;
}
}/* ==========================================================
OMSORG CARD
========================================================== */
.omsorg-card{
padding:28px;
border-radius:22px;
background:
linear-gradient(
180deg,
rgba(255,255,255,.08),
rgba(255,255,255,.03)
);
border:1px solid rgba(104,210,223,.12);
backdrop-filter:blur(16px);
transition:.25s ease;
box-shadow:
0 18px 50px rgba(0,0,0,.25);
}
.omsorg-card:hover{
transform:translateY(-3px);
border-color:#68d2df;
box-shadow:
0 25px 60px rgba(0,0,0,.35);
}
.omsorg-card-header{
margin-bottom:18px;
}
.omsorg-card-header h3{
margin:0;
font-size:18px;
color:#ffffff;
}
.omsorg-card-value{
font-size:42px;
font-weight:700;
color:#68d2df;
margin-bottom:10px;
}
.omsorg-card-subtitle{
margin:0;
color:#A9C9D3;
}/* ==========================================================
HOME PAGE
========================================================== */
.home-grid {
margin-top: 18px;
}
.home-task-list {
margin: 0;
padding-left: 20px;
color: var(--omsorg-text-secondary);
}
.home-task-list li {
margin-bottom: 12px;
}
.home-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}/* ==========================================================
OMSORG BUTTON FINAL OVERRIDE
========================================================== */
button.omsorg-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 9px;
min-height: 44px;
padding: 0 17px;
color: #11111f;
border: 1px solid transparent;
border-radius: 14px;
background: linear-gradient(
135deg,
var(--omsorg-turquoise-light),
var(--omsorg-turquoise)
);
box-shadow: 0 10px 28px rgba(104, 210, 223, 0.18);
font-family: inherit;
font-size: 14px;
font-weight: 700;
cursor: pointer;
appearance: none;
-webkit-appearance: none;
transition:
transform 180ms ease,
box-shadow 180ms ease,
background 180ms ease,
border-color 180ms ease;
}
button.omsorg-button:hover:not(:disabled) {
transform: translateY(-2px);
box-shadow: 0 14px 34px rgba(104, 210, 223, 0.3);
}
button.omsorg-button--secondary {
color: var(--omsorg-text-primary);
border-color: var(--omsorg-border);
background: rgba(255, 255, 255, 0.07);
box-shadow: none;
}
button.omsorg-button--secondary:hover:not(:disabled) {
border-color: var(--omsorg-border-active);
background: var(--omsorg-surface-hover);
}
button.omsorg-button--danger {
color: #ffffff;
background: linear-gradient(135deg, #ef7f87, #c94d58);
}/* ==========================================================
OMSORG STAT CARD
========================================================== */
.omsorg-stat-card {
min-height: 168px;
padding: 22px;
border: 1px solid var(--omsorg-border);
border-radius: var(--omsorg-radius-large);
background:
linear-gradient(
145deg,
rgba(255, 255, 255, 0.065),
rgba(255, 255, 255, 0.02)
),
var(--omsorg-surface);
box-shadow: var(--omsorg-shadow-small);
backdrop-filter: blur(18px);
transition:
transform var(--omsorg-transition),
border-color var(--omsorg-transition),
box-shadow var(--omsorg-transition);
}
.omsorg-stat-card:hover {
transform: translateY(-3px);
border-color: var(--omsorg-border-active);
box-shadow: var(--omsorg-shadow-medium);
}
.omsorg-stat-card__top {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 18px;
}
.omsorg-stat-card__title {
margin: 0 0 12px;
color: var(--omsorg-text-secondary);
font-size: 14px;
font-weight: 600;
}
.omsorg-stat-card__value {
display: block;
color: var(--omsorg-text-primary);
font-size: 32px;
line-height: 1.1;
}
.omsorg-stat-card__icon {
display: grid;
place-items: center;
width: 46px;
height: 46px;
color: var(--omsorg-turquoise);
border: 1px solid rgba(104, 210, 223, 0.2);
border-radius: 15px;
background: rgba(104, 210, 223, 0.1);
}
.omsorg-stat-card__trend {
display: inline-flex;
align-items: center;
gap: 6px;
margin-top: 22px;
font-size: 13px;
font-weight: 700;
}
.omsorg-stat-card__trend--up {
color: #71dda2;
}
.omsorg-stat-card__trend--down {
color: #ef7f87;
}
.omsorg-stat-card__trend--neutral {
color: var(--omsorg-text-muted);
}
.home-stats-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
margin: 18px 0;
}
@media (max-width: 1100px) {
.home-stats-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 720px) {
.home-stats-grid {
grid-template-columns: 1fr;
}
}/* ==========================================================
OMSORG BADGE
========================================================== */
.omsorg-badge{
display:inline-flex;
align-items:center;
gap:8px;
padding:6px 12px;
border-radius:999px;
font-size:13px;
font-weight:700;
border:1px solid transparent;
}
.omsorg-badge svg{
flex-shrink:0;
}
.omsorg-badge--success{
color:#71dda2;
background:rgba(113,221,162,.12);
border-color:rgba(113,221,162,.25);
}
.omsorg-badge--info{
color:#68d2df;
background:rgba(104,210,223,.12);
border-color:rgba(104,210,223,.25);
}
.omsorg-badge--warning{
color:#f6d36b;
background:rgba(246,211,107,.12);
border-color:rgba(246,211,107,.25);
}
.omsorg-badge--danger{
color:#ef7f87;
background:rgba(239,127,135,.12);
border-color:rgba(239,127,135,.25);
}
.omsorg-badge--neutral{
color:var(--omsorg-text-secondary);
background:rgba(255,255,255,.06);
border-color:var(--omsorg-border);
}.badge-test-row {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 16px;
}/* ==========================================================
EMPLOYEES PAGE
========================================================== */
.employees-page {
display: grid;
gap: 18px;
}
.page-heading {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 24px;
}
.page-heading h1 {
margin: 4px 0 8px;
font-size: 34px;
line-height: 1.1;
}
.page-eyebrow {
margin: 0;
color: var(--omsorg-turquoise);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.page-description {
margin: 0;
color: var(--omsorg-text-secondary);
}
.employees-toolbar {
display: flex;
align-items: center;
gap: 14px;
}
.employees-search {
display: flex;
align-items: center;
gap: 10px;
flex: 1;
min-height: 46px;
padding: 0 14px;
color: var(--omsorg-text-muted);
border: 1px solid var(--omsorg-border);
border-radius: 14px;
background: rgba(255, 255, 255, 0.045);
}
.employees-search:focus-within {
border-color: var(--omsorg-border-active);
box-shadow: 0 0 0 3px rgba(104, 210, 223, 0.1);
}
.employees-search input {
width: 100%;
color: var(--omsorg-text-primary);
border: 0;
outline: 0;
background: transparent;
font: inherit;
}
.employees-search input::placeholder {
color: var(--omsorg-text-muted);
}
.employees-filter-panel {
display: flex;
flex-wrap: wrap;
gap: 16px;
margin-top: 14px;
padding-top: 14px;
border-top: 1px solid var(--omsorg-border);
}
.employees-filter-panel .form-field {
min-width: 200px;
}
.omsorg-pagination {
display: flex;
align-items: center;
justify-content: center;
gap: 14px;
margin-top: 4px;
}
.omsorg-pagination-status {
color: var(--omsorg-text-muted);
font-size: 0.85rem;
}
.modal-overlay {
position: fixed;
inset: 0;
z-index: 50;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: rgba(4, 9, 18, 0.6);
}
.modal-panel {
width: 100%;
max-width: 760px;
max-height: 90vh;
overflow-y: auto;
padding: 28px;
border: 1px solid var(--omsorg-border);
border-radius: 18px;
background: var(--omsorg-surface-strong, #0f1b2e);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
}
.modal-panel h2 {
margin: 0 0 18px;
}
.modal-panel--wide {
max-width: 1100px;
}
.modal-panel--viewer {
max-width: 95vw;
width: 95vw;
height: 90vh;
max-height: 90vh;
overflow: hidden;
display: flex;
flex-direction: column;
position: relative;
}
.modal-panel--viewer h2 {
padding-right: 40px;
flex-shrink: 0;
}
.document-viewer-body {
flex: 1;
min-height: 0;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.document-viewer-content {
width: 100%;
height: 100%;
border: none;
}
.document-viewer-content--image {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.modal-close-button {
position: absolute;
top: 20px;
right: 20px;
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
padding: 0;
border: 1px solid var(--omsorg-border);
border-radius: 999px;
background: transparent;
color: inherit;
cursor: pointer;
}
.modal-close-button:hover {
background: rgba(255, 255, 255, 0.08);
}
.form-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.form-field {
display: flex;
flex-direction: column;
gap: 6px;
}
.form-field span {
color: var(--omsorg-text-muted);
font-size: 0.85rem;
}
.form-field input,
.form-field select {
min-height: 42px;
padding: 0 12px;
color: var(--omsorg-text-primary);
border: 1px solid var(--omsorg-border);
border-radius: 10px;
background: rgba(255, 255, 255, 0.045);
font: inherit;
}
.form-field input:focus,
.form-field select:focus {
outline: 0;
border-color: var(--omsorg-border-active);
box-shadow: 0 0 0 3px rgba(104, 210, 223, 0.1);
}
.form-field select option {
color: var(--omsorg-text-primary);
background: var(--omsorg-surface-strong, #0f1b2e);
}
.form-field--fieldset {
grid-column: 1 / -1;
display: flex;
flex-direction: column;
gap: 12px;
padding: 12px;
border: 1px solid var(--omsorg-border);
border-radius: 10px;
}
.form-field--fieldset legend {
padding: 0 4px;
color: var(--omsorg-text-muted);
font-size: 0.85rem;
}
.form-row {
display: grid;
grid-template-columns: minmax(90px, 0.6fr) 1fr;
gap: 12px;
}
.input-with-action {
display: flex;
align-items: center;
gap: 8px;
}
.input-with-action input {
flex: 1;
}
.form-error {
grid-column: 1 / -1;
}
.form-actions {
grid-column: 1 / -1;
display: flex;
justify-content: flex-end;
gap: 12px;
margin-top: 4px;
}
@media (max-width: 640px) {
.form-grid {
grid-template-columns: 1fr;
}
}
.employees-list {
display: grid;
gap: 12px;
}
.employee-row {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: center;
gap: 10px 14px;
}
.employee-avatar {
display: grid;
place-items: center;
width: 48px;
height: 48px;
color: var(--omsorg-turquoise);
border: 1px solid rgba(104, 210, 223, 0.2);
border-radius: 15px;
background: rgba(104, 210, 223, 0.1);
font-weight: 800;
}
.employee-main {
display: grid;
gap: 5px;
min-width: 0;
}
.employee-main strong {
display: block;
overflow: hidden;
font-size: 16px;
text-overflow: ellipsis;
white-space: nowrap;
}
.employee-main span,
.employee-status > span {
color: var(--omsorg-text-secondary);
font-size: 13px;
}
.employee-status {
display: flex;
grid-column: 2;
align-items: center;
gap: 10px;
}
@media (max-width: 680px) {
.page-heading,
.employees-toolbar {
align-items: stretch;
flex-direction: column;
}
.employee-row {
grid-template-columns: 1fr;
}
.employee-status {
grid-column: auto;
}
}/* ==========================================================
EMPLOYEE LAYOUT
========================================================== */
.employees-layout{
display:grid;
grid-template-columns:380px 1fr;
gap:20px;
align-items:start;
}
.employee-detail{
display:grid;
gap:24px;
}
.employee-detail-header{
display:flex;
gap:20px;
align-items:center;
}
.employee-detail-header > .omsorg-button--danger {
margin-left: auto;
}
.employee-detail-avatar{
width:78px;
height:78px;
display:grid;
place-items:center;
border-radius:22px;
background:rgba(104,210,223,.12);
border:1px solid rgba(104,210,223,.22);
color:var(--omsorg-turquoise);
font-size:28px;
font-weight:800;
}
.employee-detail-grid{
display:grid;
grid-template-columns:repeat(2,1fr);
gap:18px;
}
.employee-detail-grid strong{
display:block;
margin-bottom:6px;
}
.employee-detail-grid p{
margin:0;
color:var(--omsorg-text-secondary);
}
@media(max-width:1100px){
.employees-layout{
grid-template-columns:1fr;
}
}/* ==========================================================
EMPLOYEE INTERACTION
========================================================== */
.employee-row-wrapper {
display: flex;
flex-direction: column;
gap: 8px;
}
.employee-row-wrapper .omsorg-button {
align-self: flex-end;
}
.employee-list-button {
display: block;
width: 100%;
padding: 0;
color: inherit;
text-align: left;
border: 0;
background: transparent;
cursor: pointer;
}
.employee-list-button .omsorg-card {
transition:
border-color var(--omsorg-transition),
background var(--omsorg-transition),
transform var(--omsorg-transition);
}
.employee-list-button:hover .omsorg-card {
transform: translateY(-2px);
border-color: var(--omsorg-border-active);
}
.employee-list-button--active .omsorg-card {
border-color: rgba(104, 210, 223, 0.55);
background:
linear-gradient(
145deg,
rgba(104, 210, 223, 0.13),
rgba(255, 255, 255, 0.025)
),
var(--omsorg-surface);
}
.employee-list-button:focus-visible {
outline: 3px solid rgba(104, 210, 223, 0.35);
outline-offset: 4px;
border-radius: var(--omsorg-radius-large);
}
.employee-detail-header h2 {
margin: 0 0 6px;
}
.employee-detail-header p {
margin: 0 0 12px;
color: var(--omsorg-text-secondary);
}
.employee-detail-empty,
.employees-empty-state {
display: grid;
gap: 8px;
padding: 12px 0;
}
.employee-detail-empty h2,
.employee-detail-empty p,
.employees-empty-state span {
margin: 0;
}
.employee-detail-empty p,
.employees-empty-state span {
color: var(--omsorg-text-secondary);
}/* ==========================================================
EMPLOYEE TABS
========================================================== */
.employee-tabs {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 6px;
border: 1px solid var(--omsorg-border);
border-radius: 16px;
background: rgba(255, 255, 255, 0.035);
}
.employee-tab {
min-height: 38px;
padding: 0 14px;
color: var(--omsorg-text-secondary);
border: 1px solid transparent;
border-radius: 11px;
background: transparent;
font: inherit;
font-size: 13px;
font-weight: 700;
cursor: pointer;
transition:
color var(--omsorg-transition),
border-color var(--omsorg-transition),
background var(--omsorg-transition);
}
.employee-tab:hover {
color: var(--omsorg-text-primary);
background: rgba(255, 255, 255, 0.05);
}
.employee-tab--active {
color: var(--omsorg-turquoise);
border-color: rgba(104, 210, 223, 0.28);
background: rgba(104, 210, 223, 0.11);
}
.employee-tab:focus-visible {
outline: 3px solid rgba(104, 210, 223, 0.3);
outline-offset: 2px;
}/* ==========================================================
EMPLOYEE TAB CONTENT
========================================================== */
.employee-tab-content {
display: grid;
gap: 10px;
min-height: 150px;
padding: 18px;
border: 1px solid var(--omsorg-border);
border-radius: 16px;
background: rgba(255, 255, 255, 0.025);
}
.employee-tab-content h3,
.employee-tab-content p {
margin: 0;
}
.employee-tab-content p {
color: var(--omsorg-text-secondary);
line-height: 1.6;
}
.facility-contacts-list {
display: grid;
gap: 10px;
}
.facility-contact-row {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
padding: 12px 14px;
border: 1px solid var(--omsorg-border);
border-radius: 12px;
}
.facility-contact-row p {
margin: 4px 0 0;
color: var(--omsorg-text-secondary);
}
/* ==========================================================
EMPLOYEE TAB CONTENT
========================================================== */
.employee-tab-content {
display: grid;
gap: 10px;
min-height: 150px;
padding: 18px;
border: 1px solid var(--omsorg-border);
border-radius: 16px;
background: rgba(255, 255, 255, 0.025);
}
.employee-tab-content h3,
.employee-tab-content p {
margin: 0;
}
.employee-tab-content p {
color: var(--omsorg-text-secondary);
line-height: 1.6;
}/* ==========================================================
CONTRACT WIDGET
========================================================== */
.contract-widget {
display: grid;
gap: 18px;
}
.contract-widget__intro {
display: flex;
align-items: center;
gap: 10px;
color: var(--omsorg-text-secondary);
}
.contract-widget__intro svg {
flex-shrink: 0;
color: var(--omsorg-turquoise);
}
.contract-widget__intro p {
margin: 0;
}
.contract-widget__list {
display: grid;
gap: 12px;
}
.contract-item {
display: grid;
gap: 15px;
padding: 18px;
border: 1px solid var(--omsorg-border);
border-left-width: 4px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.025);
}
.contract-item--danger {
border-left-color: #ef7f87;
}
.contract-item--warning {
border-left-color: #f6d36b;
}
.contract-item--info {
border-left-color: var(--omsorg-turquoise);
}
.contract-item__header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.contract-item__header > div {
display: grid;
gap: 5px;
}
.contract-item__header strong {
font-size: 16px;
}
.contract-item__header span,
.contract-item__meta span,
.contract-item__meta small {
color: var(--omsorg-text-secondary);
}
.contract-item__meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px 16px;
font-size: 13px;
}
.contract-item__meta strong {
color: var(--omsorg-text-primary);
}
.contract-item__meta small {
font-size: 12px;
}
.contract-item__actions {
display: flex;
flex-wrap: wrap;
gap: 9px;
}
.contract-action {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
min-height: 38px;
padding: 0 12px;
color: var(--omsorg-text-primary);
text-decoration: none;
border: 1px solid var(--omsorg-border);
border-radius: 11px;
background: rgba(255, 255, 255, 0.045);
font: inherit;
font-size: 13px;
font-weight: 700;
cursor: pointer;
}
.contract-action:hover {
border-color: var(--omsorg-border-active);
background: rgba(104, 210, 223, 0.09);
}
.contract-action:focus-visible {
outline: 3px solid rgba(104, 210, 223, 0.3);
outline-offset: 2px;
}
@media (max-width: 680px) {
.contract-item__header {
flex-direction: column;
}
.contract-action {
width: 100%;
}
}/* ==========================================================
CONTRACT WIDGET
========================================================== */
.contract-widget {
display: grid;
gap: 18px;
}
.contract-widget__intro {
display: flex;
align-items: center;
gap: 10px;
color: var(--omsorg-text-secondary);
}
.contract-widget__intro svg {
flex-shrink: 0;
color: var(--omsorg-turquoise);
}
.contract-widget__intro p {
margin: 0;
}
.contract-widget__list {
display: grid;
gap: 12px;
}
.contract-item {
display: grid;
gap: 15px;
padding: 18px;
border: 1px solid var(--omsorg-border);
border-left-width: 4px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.025);
}
.contract-item--danger {
border-left-color: #ef7f87;
}
.contract-item--warning {
border-left-color: #f6d36b;
}
.contract-item--info {
border-left-color: var(--omsorg-turquoise);
}
.contract-item__header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.contract-item__header > div {
display: grid;
gap: 5px;
}
.contract-item__header strong {
font-size: 16px;
}
.contract-item__header span,
.contract-item__meta span,
.contract-item__meta small {
color: var(--omsorg-text-secondary);
}
.contract-item__meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px 16px;
font-size: 13px;
}
.contract-item__meta strong {
color: var(--omsorg-text-primary);
}
.contract-item__meta small {
font-size: 12px;
}
.contract-item__actions {
display: flex;
flex-wrap: wrap;
gap: 9px;
}
.contract-action {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 7px;
min-height: 38px;
padding: 0 12px;
color: var(--omsorg-text-primary);
text-decoration: none;
border: 1px solid var(--omsorg-border);
border-radius: 11px;
background: rgba(255, 255, 255, 0.045);
font: inherit;
font-size: 13px;
font-weight: 700;
cursor: pointer;
}
.contract-action:hover {
border-color: var(--omsorg-border-active);
background: rgba(104, 210, 223, 0.09);
}
.contract-action:focus-visible {
outline: 3px solid rgba(104, 210, 223, 0.3);
outline-offset: 2px;
}
@media (max-width: 680px) {
.contract-item__header {
flex-direction: column;
}
.contract-action {
width: 100%;
}
}
.login-screen {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
}
.login-screen .omsorg-card {
width: 100%;
max-width: 380px;
}
.login-form {
display: flex;
flex-direction: column;
gap: 16px;
margin-top: 20px;
}
.login-form label {
display: flex;
flex-direction: column;
gap: 6px;
color: var(--omsorg-text-secondary);
font-size: 0.9rem;
}
.login-form input {
background: var(--omsorg-navy);
border: 1px solid var(--omsorg-border);
border-radius: 8px;
padding: 10px 12px;
color: var(--omsorg-text-primary);
font-size: 1rem;
}
.login-form input:focus-visible {
outline: none;
border-color: var(--omsorg-border-active);
}
.login-error {
color: #f28b8b;
font-size: 0.9rem;
margin: 0;
}
.login-info {
color: var(--omsorg-text-secondary);
font-size: 0.9rem;
margin: 0;
}
.login-form-links {
display: flex;
justify-content: space-between;
margin-top: 8px;
}
.login-form-links button {
background: none;
border: none;
padding: 0;
color: var(--omsorg-text-secondary);
font-size: 0.85rem;
cursor: pointer;
text-decoration: underline;
}
.login-form-links button:hover {
color: var(--omsorg-text-primary);
}
.debug-sessions-actions {
display: flex;
gap: 12px;
margin: 16px 0;
}
.debug-sessions-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 10px;
}
.debug-sessions-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 14px;
border: 1px solid var(--omsorg-border);
border-radius: 12px;
background: rgba(255, 255, 255, 0.03);
}
.debug-sessions-meta {
color: var(--omsorg-text-muted);
font-size: 0.85rem;
margin: 2px 0 0;
}
.debug-sessions-divider {
border: none;
border-top: 1px solid var(--omsorg-border);
margin: 24px 0;
}
.debug-sessions-field {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 12px;
}
.debug-sessions-field label {
font-size: 0.85rem;
color: var(--omsorg-text-muted);
}
.debug-sessions-field textarea {
font-family: inherit;
resize: vertical;
}
.audit-log-details {
font-family: monospace;
font-size: 0.8rem;
color: var(--omsorg-text-muted);
margin: 6px 0 0;
word-break: break-word;
white-space: pre-wrap;
}
.settings-tabs {
display: flex;
gap: 8px;
margin-bottom: 16px;
border-bottom: 1px solid var(--omsorg-border);
}
.settings-tab {
background: none;
border: none;
padding: 10px 4px;
margin-bottom: -1px;
color: var(--omsorg-text-muted);
cursor: pointer;
border-bottom: 2px solid transparent;
}
.settings-tab--active {
color: var(--omsorg-text-primary);
border-bottom-color: var(--omsorg-primary, currentColor);
}
.settings-panel-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
margin-bottom: 16px;
}
.settings-panel-heading h4 {
margin: 0;
}
.settings-roles-layout {
display: flex;
gap: 24px;
align-items: flex-start;
}
.settings-roles-list {
flex: 0 0 220px;
display: flex;
flex-direction: column;
gap: 12px;
}
.settings-roles-list ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 6px;
}
.settings-role-item {
width: 100%;
text-align: left;
padding: 8px 12px;
border: 1px solid var(--omsorg-border);
border-radius: 10px;
background: rgba(255, 255, 255, 0.03);
color: var(--omsorg-text-primary);
cursor: pointer;
}
.settings-role-item--active {
border-color: var(--omsorg-primary, currentColor);
}
.settings-role-item-row {
display: flex;
align-items: stretch;
gap: 6px;
}
.settings-role-item-row .settings-role-item {
flex: 1;
min-width: 0;
}
.settings-role-item-row .omsorg-button span:empty {
display: none;
}
.settings-new-role-form {
display: flex;
gap: 8px;
}
.settings-sort-order-controls {
display: flex;
gap: 4px;
}
.settings-roles-detail {
flex: 1;
min-width: 0;
}
.settings-permission-matrix-scroll {
overflow-x: auto;
}
.settings-permission-matrix table {
border-collapse: collapse;
width: 100%;
}
.settings-permission-matrix th,
.settings-permission-matrix td {
padding: 8px 10px;
text-align: center;
border-bottom: 1px solid var(--omsorg-border);
white-space: nowrap;
}
.settings-permission-matrix td:first-child,
.settings-permission-matrix th:first-child {
text-align: left;
}
.settings-permission-matrix-actions {
display: flex;
align-items: center;
gap: 12px;
margin-top: 16px;
}
.settings-new-override-form {
display: flex;
gap: 8px;
margin-top: 16px;
flex-wrap: wrap;
}