:root{--bg:#111318;--panel:#1a1d24;--panel2:#222632;--txt:#f3f5f7;--muted:#9aa4b2;--accent:#5cf0a6;--danger:#ff6868;--warn:#ffd166;--line:#2f3441}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--txt);font-family:Segoe UI,Arial,sans-serif}.sidebar{position:fixed;inset:0 auto 0 0;width:230px;background:#0b0d12;border-right:1px solid var(--line);padding:22px}.brand{font-size:22px;margin-bottom:24px}.brand span{display:block;color:var(--muted);font-size:13px}nav a{display:block;color:#cfd6df;text-decoration:none;padding:12px 14px;border-radius:10px;margin:6px 0}nav a.active,nav a:hover{background:var(--panel2);color:var(--accent)}.main{margin-left:230px;padding:28px}.page-head{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-bottom:20px}.page-head h1{margin:0;font-size:30px}.page-head p{margin:6px 0 0;color:var(--muted)}.grid{display:grid;gap:18px}.grid.two{grid-template-columns:1fr 1fr}.grid.four{grid-template-columns:repeat(4,1fr)}.card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:0 10px 25px #0004}.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.card h2{margin:0;font-size:18px}.muted{color:var(--muted)}.badge,.status{display:inline-block;padding:4px 8px;border-radius:999px;background:var(--panel2);font-size:12px}.status.active{background:#123d2a;color:#82f2b4}.status.soon{background:#493b18;color:#ffd166}.status.expired,.status.disabled{background:#4b2020;color:#ff8f8f}.table-wrap{overflow:auto}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{border-bottom:1px solid var(--line);padding:10px;text-align:left;vertical-align:top}.data-table th{color:var(--muted);font-weight:600}.compact th,.compact td{padding:7px}.actions{white-space:nowrap}.btn{display:inline-block;border:0;border-radius:10px;padding:10px 14px;background:var(--panel2);color:var(--txt);text-decoration:none;cursor:pointer}.btn.primary{background:var(--accent);color:#062010;font-weight:700}.btn.danger{background:var(--danger);color:#250000}.btn.ghost{border:1px solid var(--line);background:transparent}.btn.tiny{padding:6px 9px;font-size:12px}.wide{width:100%}.alert{padding:12px 14px;border-radius:12px;margin-bottom:14px}.alert.success{background:#133d2b;color:#9df4c2}.alert.error{background:#4b2020;color:#ffb1b1}.alert.info{background:#1d314b;color:#aad4ff}.form{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.field label{display:block;color:var(--muted);font-size:13px;margin-bottom:5px}.field input,.field textarea,.field select{width:100%;background:#0f1218;color:var(--txt);border:1px solid var(--line);border-radius:10px;padding:10px}.field textarea{min-height:100px}.field.wide2{grid-column:span 2}.dropzone{display:block;border:2px dashed var(--line);border-radius:15px;text-align:center;padding:26px;background:#11151d;cursor:pointer}.dropzone input{display:none}.dropzone span{font-size:30px;display:block;margin-bottom:8px}.summary-list>div{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:10px 0;gap:20px}.summary-list span{color:var(--muted)}code,.mono{font-family:Consolas,monospace;color:#9fe7ff}.wizard{display:flex;gap:10px;margin-bottom:18px}.step{background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:8px 12px;color:var(--muted)}.step.active{color:var(--accent)}@media(max-width:900px){.sidebar{position:static;width:auto}.main{margin-left:0}.grid.two,.grid.four,.form{grid-template-columns:1fr}.field.wide2{grid-column:span 1}}

.table-card{overflow-x:auto}.data-table{width:100%;table-layout:fixed}.data-table th,.data-table td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.data-table td code{display:inline-block;max-width:260px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}

/* Packages: tableau large mais contenu maîtrisé */
.package-table-wrap{width:100%;overflow-x:auto;overflow-y:hidden}
.packages-table{table-layout:fixed;width:100%;min-width:1180px}
.packages-table th,.packages-table td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.packages-table .truncate{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.packages-table code.truncate{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pkg-col-state{width:72px}.pkg-col-system{width:105px}.pkg-col-name{width:190px}.pkg-col-file{width:250px}.pkg-col-version{width:82px}.pkg-col-checksum{width:132px}.pkg-col-size{width:82px}.pkg-col-url{width:230px}.pkg-col-actions{width:92px}
.packages-table .btn.tiny{padding:6px 8px;font-size:11px}
@media(max-width:1400px){.packages-table{min-width:1080px}.pkg-col-name{width:170px}.pkg-col-file{width:220px}.pkg-col-url{width:210px}.pkg-col-system{width:95px}}


/* Progression checksum fichier courant */
.progress-bar-wrap{width:100%;height:10px;border-radius:999px;background:rgba(255,255,255,.08);overflow:hidden;margin-top:14px;border:1px solid rgba(255,255,255,.10)}
.progress-bar{height:100%;background:var(--accent);width:0%;transition:width .35s ease}

/* Tableau packages compact, chemin NAS conservé à droite sans débordement */
.packages-table{font-size:12px;line-height:1.25;min-width:1120px}
.packages-table th,.packages-table td{padding:7px 8px}
.packages-table code{font-size:11.5px}
.pkg-col-state{width:70px}.pkg-col-system{width:92px}.pkg-col-name{width:160px}.pkg-col-file{width:210px}.pkg-col-version{width:72px}.pkg-col-checksum{width:118px}.pkg-col-size{width:72px}.pkg-col-url{width:260px}.pkg-col-actions{width:86px}
.path-cell{max-width:100%;direction:ltr;text-align:left}
@media(max-width:1400px){.packages-table{font-size:11.5px;min-width:1050px}.pkg-col-name{width:145px}.pkg-col-file{width:190px}.pkg-col-url{width:240px}.pkg-col-system{width:85px}.packages-table th,.packages-table td{padding:6px}}


/* ===== Package table compact + colored checksum statuses ===== */
.table-card, .table-wrap {
    overflow-x: auto;
    width: 100%;
}

.data-table.package-table,
.package-table {
    min-width: 1220px;
    table-layout: fixed;
    font-size: 12px;
}

.package-table th,
.package-table td {
    padding: 7px 8px;
    vertical-align: middle;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.package-table code,
.package-table .mono,
.package-table .truncate {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
    font-size: 11px;
}

.package-table .col-status { width: 90px; }
.package-table .col-system { width: 120px; }
.package-table .col-name { width: 220px; }
.package-table .col-file { width: 260px; }
.package-table .col-version { width: 90px; }
.package-table .col-checksum { width: 150px; }
.package-table .col-size { width: 85px; }
.package-table .col-url { width: 270px; }
.package-table .col-actions { width: 95px; }

.status {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 5px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    white-space: nowrap;
    text-transform: lowercase;
    border: 1px solid transparent;
}

.status.pending {
    background: rgba(255, 193, 7, 0.18);
    color: #ffc107;
    border-color: rgba(255, 193, 7, 0.35);
}

.status.running {
    background: rgba(0, 123, 255, 0.18);
    color: #4da3ff;
    border-color: rgba(0, 123, 255, 0.35);
}

.status.done {
    background: rgba(40, 167, 69, 0.18);
    color: #39d353;
    border-color: rgba(40, 167, 69, 0.35);
}

.status.error {
    background: rgba(220, 53, 69, 0.18);
    color: #ff6b6b;
    border-color: rgba(220, 53, 69, 0.35);
}

.status.stopped {
    background: rgba(108, 117, 125, 0.18);
    color: #adb5bd;
    border-color: rgba(108, 117, 125, 0.35);
}


/* ===== Pastilles statuts checksum, version forcée ===== */
.status-pill{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width:76px;
    padding:5px 10px;
    border-radius:999px;
    font-size:11px;
    font-weight:800;
    text-transform:lowercase;
    letter-spacing:.2px;
    border:1px solid transparent;
    box-shadow: inset 0 0 0 1px rgba(255,255,255,.04);
}

.status-pill-pending{
    background:#4b3a10!important;
    color:#ffd24a!important;
    border-color:#a77b12!important;
}

.status-pill-running{
    background:#12375a!important;
    color:#72bdff!important;
    border-color:#2477bf!important;
}

.status-pill-done{
    background:#123f27!important;
    color:#5cff9d!important;
    border-color:#21a95f!important;
}

.status-pill-error{
    background:#551b22!important;
    color:#ff7777!important;
    border-color:#d83b4b!important;
}

.status-pill-stopped{
    background:#333842!important;
    color:#c2c8d0!important;
    border-color:#6c757d!important;
}

/* Tri colonnes catalogue packages */
.sortable-table th.sortable{
    cursor:pointer;
    user-select:none;
    position:relative;
    padding-right:18px;
}

.sortable-table th.sortable::after{
    content:"↕";
    position:absolute;
    right:6px;
    opacity:.45;
    font-size:11px;
}

.sortable-table th.sortable.sort-asc::after{
    content:"▲";
    opacity:1;
    color:var(--accent);
}

.sortable-table th.sortable.sort-desc::after{
    content:"▼";
    opacity:1;
    color:var(--accent);
}
