/* Quill rich-text editor: korriger lister så bullets/tall holder seg innenfor editor-rammen.
   Bootstrap reset (eller andre CSS-overrides) nuller ut padding-left på ol/ul, så uten
   denne reglen havner punkt-symbolene utenfor til venstre. */
.ql-editor ol,
.ql-editor ul {
    padding-left: 1.5em !important;
    margin-left: 0;
}
.ql-editor li {
    list-style-position: outside;
}
/* Når editor er fokusert/aktiv, fjern placeholder umiddelbart (Quill gjør dette via
   .ql-blank-klasse – denne CSS-en sikrer at fokus også skjuler den, selv om feltet
   fortsatt regnes som tomt). */
.ql-editor:focus.ql-blank::before {
    content: '' !important;
}

:root {
    --ec-green: #2d6a4f;
    --ec-green-light: #40916c;
    --ec-green-dark: #1b4332;
    --ec-bg: #f8f9fa;
    --ec-sidebar: #1b4332;
}

body {
    background-color: var(--ec-bg);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}

/* Navbar */
.navbar-ec {
    background-color: var(--ec-green-dark) !important;
}

/* Menylinja hadde full brodtekststoerrelse. Med selskapsvelger, modulene
   brukeren gaar til, administrer, assistent, profil og spraak ble raden for
   trang paa 1280 px, og siste lenke («Logg ut») brakk over to linjer.
   Mindre tekst og tettere lenker holder alt paa én linje. */
.navbar-ec .navbar-nav .nav-link {
    font-size: 0.875rem;
    padding-left: 0.55rem;
    padding-right: 0.55rem;
    white-space: nowrap;
}

/* Topplinja er lik paa alle skjermer: logo, «Sist brukt»-pillen, assistenten og burgeren.
   Alt annet ligger i menyen bak knappen (.navbar-collapse), som kolonne. */
.navbar-ec .navbar-toggler { border-color: rgba(255, 255, 255, 0.35); flex: 0 0 auto; }
/* Gruppa faar aldri krympe under innholdet (da klippes assistenten av burgerknappen);
   blir det trangt, ruller pillen inni seg selv. */
.navbar-ec .nav-top { flex: 0 0 auto; margin-right: 0.9rem; }   /* luft foer burgerknappen */
.navbar-ec .portal-switch { flex: 0 0 auto; }
.navbar-ec .portal-switch .btn { white-space: nowrap; }
.navbar-ec .nav-top > .nav-link { color: rgba(255, 255, 255, 0.85); }
.navbar-ec .nav-top > .nav-link { flex: 0 0 auto; white-space: nowrap; }
.navbar-ec .nav-top .nav-group { max-width: calc(100vw - 21rem); overflow-x: auto; scrollbar-width: none; }
/* Telefon: pillen staar ikke i topplinja (den ble en 50 px stripe med etiketten
   klippet midt i ordet) -- modulene ligger i menyen i stedet, se base.html.
   Bryteren mellom kunde og konsulent staar med ikoner alene, saa hele raden faar
   plass paa én linje. */
@media (max-width: 575.98px) {
    .navbar-ec .portal-switch .btn { padding-left: 0.6rem; padding-right: 0.6rem; }
    .navbar-ec .nav-top { margin-right: 0.5rem; }
}
.navbar-ec .nav-top .nav-group::-webkit-scrollbar { display: none; }
.navbar-ec .nav-group {
    display: flex;
    align-items: center;
    background: rgba(255, 255, 255, 0.11);
    border-radius: 999px;
    padding: 0 0.3rem 0 0.7rem;
    margin: 0 0.35rem;
}
.navbar-ec .nav-group-label {
    font-size: 0.68rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9fd6b3;
    white-space: nowrap;
    margin-right: 0.15rem;
}
.navbar-ec .nav-group .nav-link { color: #fff; white-space: nowrap; }
/* Menyen: alt under hverandre, modulgruppa som boks. */
.navbar-ec .navbar-collapse { padding: 0.4rem 0 0.6rem; }
.navbar-ec .navbar-collapse .nav-link { padding: 0.35rem 0.55rem; }
.navbar-ec .navbar-collapse .nav-group {
    flex-direction: column;
    align-items: stretch;
    border-radius: 0.5rem;
    margin: 0.3rem 0;
    padding: 0.3rem 0.6rem;
}
.navbar-ec .navbar-collapse .nav-group-label { margin-bottom: 0.1rem; }
.navbar-ec .navbar-collapse .nav-group .nav-link { padding: 0.3rem 0; }
.navbar-ec .nav-group-toggle { align-self: flex-start; padding: 0.2rem 0; color: #9fd6b3; text-decoration: none; font-size: 0.8rem; }
@media (min-width: 992px) {
    /* Paa brede skjermer: menyen paa egen rad under toppen, som en kolonne til hoeyre. */
    .navbar-ec .navbar-collapse .navbar-nav { margin-left: auto; width: 100%; max-width: 420px; }
}

/* Sidebar overlay */
.sidebar-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.5);
    z-index: 149;
}
.sidebar-overlay.open {
    display: block;
}

/* Sidebar (admin) */
.sidebar {
    background-color: var(--ec-sidebar);
    min-height: 100vh;
    width: 250px;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 150;
    padding-top: 1rem;
    transition: transform 0.25s ease;
    overflow-y: auto;
    transform: translateX(-100%);
}

.sidebar.open {
    transform: translateX(0);
}

.sidebar .nav-link {
    color: rgba(255,255,255,0.7);
    padding: 0.6rem 1.2rem;
    border-radius: 0.25rem;
    margin: 0.1rem 0.5rem;
    white-space: nowrap;
}

.sidebar .nav-link:hover,
.sidebar .nav-link.active {
    color: #fff;
    background-color: rgba(255,255,255,0.1);
}

.sidebar .sidebar-heading {
    color: rgba(255,255,255,0.4);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 1rem 1.2rem 0.3rem;
}

/* Toggle button */
.sidebar-toggle-btn {
    border: none;
    font-size: 1.25rem;
    padding: 0.25rem 0.5rem;
    line-height: 1;
}

.main-content-admin {
    margin-left: 0;
    padding: 1.5rem;
    transition: margin-left 0.25s ease;
}

/* Desktop: when sidebar is open, push content */
@media (min-width: 992px) {
    .sidebar.open ~ .main-content-admin {
        margin-left: 250px;
    }
    /* Overlay not needed on desktop */
    .sidebar-overlay.open {
        display: none;
    }
}

/* Mobile */
@media (max-width: 991.98px) {
    .main-content-admin {
        padding: 1rem;
    }
}

/* Cards */
.card-stat {
    border: none;
    border-radius: 0.5rem;
    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}

.card-stat .card-body {
    padding: 1.25rem;
}

.card-stat .stat-number {
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--ec-green);
}

/* Progress bars */
.progress {
    height: 0.5rem;
    border-radius: 0.25rem;
}

/* Status badges */
.badge-ikke_startet { background-color: #6c757d; }
.badge-under_arbeid { background-color: #0d6efd; }
.badge-fullfort { background-color: #198754; }
.badge-overdue { background-color: #dc3545; }

/* Priority badges */
.badge-lav { background-color: #6c757d; }
.badge-medium { background-color: #ffc107; color: #000; }
.badge-hoy { background-color: #dc3545; }

/* Inline status select */
.status-select {
    font-weight: 600;
    color: #fff !important;
    border: 2px solid transparent;
    border-radius: 0.375rem;
    cursor: pointer;
    appearance: auto;
    padding-right: 2rem;
    background-image: none !important;
}
.status-select:focus {
    color: #fff !important;
    box-shadow: 0 0 0 0.2rem rgba(45,106,79,0.25);
}
.status-select-ikke_startet { background-color: #6c757d !important; border-color: #6c757d !important; }
.status-select-ikke_startet:focus { background-color: #6c757d !important; border-color: #5a6268 !important; }
.status-select-under_arbeid { background-color: #0d6efd !important; border-color: #0d6efd !important; }
.status-select-under_arbeid:focus { background-color: #0d6efd !important; border-color: #0a58ca !important; }
.status-select-fullfort { background-color: #198754 !important; border-color: #198754 !important; }
.status-select-fullfort:focus { background-color: #198754 !important; border-color: #146c43 !important; }

/* Inline priority select */
.priority-select {
    font-weight: 600;
    color: #fff !important;
    border: 2px solid transparent;
    border-radius: 0.375rem;
    cursor: pointer;
    appearance: auto;
    padding-right: 2rem;
    background-image: none !important;
}
.priority-select:focus {
    color: #fff !important;
    box-shadow: 0 0 0 0.2rem rgba(45,106,79,0.25);
}
.priority-select-lav { background-color: #6c757d !important; border-color: #6c757d !important; }
.priority-select-lav:focus { background-color: #6c757d !important; border-color: #5a6268 !important; }
.priority-select-medium { background-color: #ffc107 !important; border-color: #ffc107 !important; color: #000 !important; }
.priority-select-medium:focus { background-color: #ffc107 !important; border-color: #d9a406 !important; color: #000 !important; }
.priority-select-hoy { background-color: #dc3545 !important; border-color: #dc3545 !important; }
.priority-select-hoy:focus { background-color: #dc3545; border-color: #b02a37; }

/* Colored options in dropdowns */
/* Inline feedback under fields */
.inline-feedback {
    display: block;
    height: 1.2em;
    margin-top: 0.2rem;
    white-space: nowrap;
}

.opt-ikke_startet { background-color: #6c757d !important; color: #fff !important; }
.opt-under_arbeid { background-color: #0d6efd !important; color: #fff !important; }
.opt-fullfort { background-color: #198754 !important; color: #fff !important; }
.opt-lav { background-color: #6c757d !important; color: #fff !important; }
.opt-medium { background-color: #ffc107 !important; color: #000 !important; }
.opt-hoy { background-color: #dc3545 !important; color: #fff !important; }

/* Impersonation banner */
.impersonation-banner {
    background-color: #fd7e14;
    color: #fff;
    padding: 0.5rem 1rem;
    text-align: center;
    position: sticky;
    top: 0;
    z-index: 1050;
}

.impersonation-banner a {
    color: #fff;
    font-weight: bold;
}

/* Login page */
.login-container {
    max-width: 440px;
    margin: 80px auto;
}

.login-card {
    border: none;
    border-radius: 0.75rem;
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

/* Table styling */
.table th {
    font-weight: 600;
    font-size: 0.85rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #6c757d;
}

/* Task row */
.task-row.overdue {
    border-left: 3px solid #dc3545;
}

/* Logo text */
.logo-text {
    font-weight: 700;
    font-size: 1.25rem;
    color: #fff;
    text-decoration: none;
}

.logo-text:hover {
    color: #fff;
}

/* Display IDs */
.display-id {
    color: var(--ec-green-light);
    font-weight: 500;
}

/* CSV preview (legacy) */
.csv-preview-table {
    font-size: 0.85rem;
}

.csv-new { background-color: #d1e7dd; }
.csv-updated { background-color: #fff3cd; }
.csv-unchanged { background-color: #f8f9fa; }

/* CSV diff preview (v2) */
.diff-badges .badge {
    font-size: 0.85rem;
    margin-right: 0.25rem;
}

.diff-section {
    margin-bottom: 1.5rem;
}

.diff-section-header {
    font-weight: 700;
    font-size: 0.9rem;
    color: #6c757d;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 0.5rem 0;
    border-bottom: 2px solid #dee2e6;
    margin-bottom: 0.5rem;
}

.diff-row {
    padding: 0.4rem 0.75rem;
    border-radius: 0.25rem;
    margin-bottom: 0.25rem;
    font-size: 0.9rem;
}

.diff-indent-1 {
    margin-left: 1.5rem;
}

.diff-indent-2 {
    margin-left: 3rem;
}

.diff-row-main {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.diff-id {
    font-family: monospace;
    font-size: 0.85rem;
    color: var(--ec-green-light);
    min-width: 5rem;
}

.diff-title {
    flex: 1;
    font-weight: 500;
}

.diff-action-badge {
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.15rem 0.5rem;
    border-radius: 0.25rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    white-space: nowrap;
}

.diff-badge-opprett { background: #d1e7dd; color: #0f5132; }
.diff-badge-oppdater { background: #fff3cd; color: #664d03; }
.diff-badge-slett { background: #f8d7da; color: #842029; }
.diff-badge-uendret { background: #e9ecef; color: #6c757d; }
.diff-badge-feil { background: #f8d7da; color: #842029; }

.diff-opprett { border-left: 3px solid #198754; }
.diff-oppdater { border-left: 3px solid #ffc107; }
.diff-slett { border-left: 3px solid #dc3545; }
.diff-uendret { border-left: 3px solid #dee2e6; }
.diff-feil { border-left: 3px solid #dc3545; background: #fff5f5; }

.diff-change {
    font-size: 0.85rem;
    color: #555;
    padding-left: 1rem;
    margin-top: 0.15rem;
}

.diff-old {
    color: #dc3545;
    text-decoration: line-through;
}

.diff-new {
    color: #198754;
    font-weight: 500;
}

.diff-error {
    font-size: 0.85rem;
    color: #dc3545;
    padding-left: 1rem;
    margin-top: 0.15rem;
}

.diff-warning {
    font-size: 0.85rem;
    color: #856404;
    padding-left: 1rem;
    margin-top: 0.15rem;
}

/* ==============================
   Mobile touch targets – WCAG 2.5.5
   Minimum 40×40 px on touch-capable screens
   ============================== */
@media (hover: none) and (pointer: coarse) {
    .btn-sm, .btn-link.btn-sm {
        min-height: 40px;
        padding-top: 0.4rem;
        padding-bottom: 0.4rem;
    }
    .form-check-input {
        min-width: 22px;
        min-height: 22px;
    }
    td .btn.p-0 {
        min-width: 40px;
        min-height: 40px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
    .page-link {
        min-width: 40px;
        min-height: 40px;
        display: flex;
        align-items: center;
        justify-content: center;
    }
}

/* Print styles */
@media print {
    .no-print,
    .navbar,
    .sidebar,
    .sidebar-overlay,
    nav[aria-label="breadcrumb"] {
        display: none !important;
    }
    body {
        background: #fff;
    }
    .main-content {
        margin-left: 0 !important;
        padding: 0 !important;
    }
    .card {
        border: none !important;
        box-shadow: none !important;
    }
}


/* ---------- Live samarbeid på et anbud (Google Docs-stil) ---------- */
.tenders-live-presence {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 0.75rem;
    margin-bottom: 1rem;
    background: #f8fafc;
    border: 1px solid #e2e8f0;
    border-radius: 0.5rem;
    font-size: 0.875rem;
    transition: border-color 0.2s, background 0.2s;
}

.tenders-live-presence.has-peers {
    background: #ecfeff;
    border-color: #67e8f9;
}

.tenders-live-presence-label {
    color: #475569;
    font-weight: 500;
}

.tenders-live-presence.has-peers .tenders-live-presence-label {
    color: #0e7490;
}

.tenders-live-presence-avatars {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    flex-wrap: wrap;
}

.tenders-live-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    color: #fff;
    font-size: 0.7rem;
    font-weight: 600;
    border: 2px solid #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
    cursor: pointer;
    transition: transform 0.1s, box-shadow 0.1s;
    padding: 0;
    line-height: 1;
}

.tenders-live-avatar:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
}

.tenders-live-avatar-me {
    cursor: default;
    opacity: 0.85;
}

.tenders-live-avatar-me:hover {
    transform: none;
}

/* Caret-overlay over textarea */
.tenders-live-overlay {
    pointer-events: none;
    z-index: 5;
}

.tenders-live-caret {
    position: absolute;
    width: 2px;
    pointer-events: none;
    animation: tenders-live-caret-blink 1.1s infinite;
}

@keyframes tenders-live-caret-blink {
    0%, 50% { opacity: 1; }
    51%, 100% { opacity: 0.35; }
}

.tenders-live-caret-tag {
    position: absolute;
    top: -1.1rem;
    left: -1px;
    color: #fff;
    font-size: 0.65rem;
    padding: 1px 5px;
    border-radius: 3px;
    white-space: nowrap;
    line-height: 1.2;
    opacity: 0.92;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}

.tenders-live-selection {
    position: absolute;
    pointer-events: none;
    border-radius: 2px;
}

.tenders-live-mirror {
    position: absolute;
    top: -9999px;
    left: -9999px;
}

/* Visuell tilbakemelding når en annen bruker har skrevet i feltet */
.tenders-live-incoming {
    box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.4) !important;
    transition: box-shadow 0.4s;
}

.tenders-live-flash {
    animation: tenders-live-flash 1.4s ease-out;
}

@keyframes tenders-live-flash {
    0% { box-shadow: 0 0 0 0 rgba(37, 99, 235, 0.65); }
    100% { box-shadow: 0 0 0 8px rgba(37, 99, 235, 0); }
}

/* Tidslinje (Gantt) uten bibliotek: static/js/gantt.js + templates/includes/gantt.html */
.gantt { --gantt-track-min: 640px; font-size: .85rem; }
.gantt-scroll { overflow-x: auto; }
.gantt-grid { min-width: 100%; }
.gantt-row { display: grid; grid-template-columns: 220px minmax(var(--gantt-track-min), 1fr); border-top: 1px solid #eef2f0; }
.gantt-row--head { border-top: 0; position: sticky; top: 0; background: #fff; z-index: 2; }
.gantt-row--goal { background: #fafcfb; }
.gantt-row--closed .gantt-toggle i { transform: rotate(-90deg); }
.gantt-label { padding: .35rem .5rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: .25rem; }
.gantt-row--goal .gantt-label { font-weight: 600; }
.gantt-label a { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gantt-toggle { border: 0; background: none; padding: 0; width: 1.1rem; color: #6c757d; display: inline-flex; }
.gantt-toggle--none { display: inline-block; width: 1.1rem; }
.gantt-toggle i { transition: transform .15s; }
.gantt-track { position: relative; height: 2rem; }
.gantt-head { height: 1.6rem; }
.gantt-col { position: absolute; top: 0; height: 100%; border-left: 1px solid #e5e7eb; padding-left: .25rem; color: #6c757d; font-size: .75rem; white-space: nowrap; overflow: hidden; }
.gantt-bar { position: absolute; top: .45rem; height: 1.1rem; border-radius: 4px; background: #6c757d; opacity: .9; }
.gantt-bar--under_arbeid { background: #0d6efd; }
.gantt-bar--fullfort { background: #198754; }
.gantt-bar--overdue { background-image: repeating-linear-gradient(45deg, rgba(220,53,69,.55) 0 6px, rgba(220,53,69,.25) 6px 12px); }
.gantt-bar--estimated { border: 2px dashed rgba(0,0,0,.35); background-color: rgba(108,117,125,.35); }
.gantt-fill { position: absolute; left: 0; top: 0; height: 100%; background: rgba(255,255,255,.35); border-radius: 4px 0 0 4px; }
.gantt-today { position: absolute; top: 0; height: 100%; border-left: 2px solid #dc3545; z-index: 1; }
.gantt-point { position: absolute; top: .6rem; width: .8rem; height: .8rem; margin-left: -.4rem; border-radius: 50%; background: #0d6efd; }
.gantt-point--status { background: #198754; }
.gantt-point--comment { background: #ffc107; }
.gantt-point--version { background: #6c757d; }
.gantt-point--change { background: #0dcaf0; }
.gantt-legend .gantt-key { display: inline-block; width: .9rem; height: .7rem; border-radius: 3px; margin: 0 .2rem 0 .6rem; vertical-align: middle; background: #6c757d; }
.gantt-key--under_arbeid { background: #0d6efd; }
.gantt-key--fullfort { background: #198754; }
.gantt-key--overdue { background-image: repeating-linear-gradient(45deg, rgba(220,53,69,.55) 0 3px, rgba(220,53,69,.25) 3px 6px); }
.gantt-key--estimated { border: 2px dashed rgba(0,0,0,.35); background: rgba(108,117,125,.35); }
.gantt--compact .gantt-row { grid-template-columns: 180px minmax(var(--gantt-track-min), 1fr); }

/* Gevinstmerket: pila snur naar tallene er slaatt ut, saa knappen viser tilstanden
   sin. Uten dette ser en aapen og en lukket rad helt like ut i toppen. */
.gevinst-merke button .bi-chevron-down {
    transition: transform .15s ease-in-out;
}
.gevinst-merke button[aria-expanded="true"] .bi-chevron-down {
    transform: rotate(180deg);
}

