*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:"Segoe UI",system-ui,sans-serif;background:#0d1117;color:#e2e8f0;min-height:100vh;padding:0}
.container{max-width:980px;margin:0 auto;display:flex;flex-direction:column;gap:1.75rem;padding:2rem 1rem}

/* ── login page ─── */
body.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:1rem}
.login-wrap{background:#1e293b;border-radius:1rem;padding:2.5rem 2rem;width:100%;max-width:400px;display:flex;flex-direction:column;align-items:center;gap:1rem;box-shadow:0 8px 32px rgba(0,0,0,.4)}
.login-logo{font-size:2.5rem}
.login-title{color:#7dd3fc;font-size:1.5rem}
.login-sub{color:#475569;font-size:.85rem;text-align:center}
.login-error{background:#450a0a;color:#f87171;border-radius:.5rem;padding:.6rem 1rem;font-size:.85rem;width:100%;text-align:center}
.login-form{display:flex;flex-direction:column;gap:.6rem;width:100%}
.login-form label{font-size:.8rem;color:#64748b;text-transform:uppercase;letter-spacing:.05em}
.login-form input{background:#0d1117;border:1px solid #334155;border-radius:.5rem;padding:.6rem .9rem;color:#e2e8f0;font-size:.95rem;width:100%;outline:none;transition:border-color .15s}
.login-form input:focus{border-color:#38bdf8}
.pw-wrap{position:relative}
.pw-wrap input{padding-right:2.5rem}
.pw-toggle{position:absolute;right:.6rem;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:#475569;font-size:1rem}
.btn-login{background:#0ea5e9;color:#fff;border:none;border-radius:.5rem;padding:.7rem;font-size:.95rem;font-weight:600;cursor:pointer;transition:background .15s;width:100%;margin-top:.4rem}
.btn-login:hover{background:#38bdf8}
.login-hint{color:#334155;font-size:.78rem;text-align:center}

/* ── navbar ─── */
.navbar{background:#161b22;border-bottom:1px solid #1e293b;padding:.7rem 1.5rem;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:50}
.nav-logo{color:#7dd3fc;font-weight:700;font-size:1rem}
.nav-right{display:flex;align-items:center;gap:.75rem}
.nav-badge{padding:.25rem .7rem;border-radius:.35rem;font-size:.78rem;font-weight:700}
.admin-badge{background:#7c3aed;color:#ede9fe}
.pharma-badge{background:#1d4ed8;color:#bfdbfe;font-family:monospace}
.btn-logout{background:none;border:1px solid #334155;color:#64748b;padding:.25rem .7rem;border-radius:.35rem;text-decoration:none;font-size:.78rem;transition:all .15s}
.btn-logout:hover{border-color:#f87171;color:#f87171}

/* ── pharmacy info card ─── */
.info-card{background:#1e293b;border-radius:.8rem;padding:1.2rem 1.5rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;border-left:4px solid #1d4ed8}
.ic-left{display:flex;align-items:center;gap:1rem}
.ic-icon{font-size:2.2rem}
.ic-name{font-size:1.05rem;font-weight:600;color:#e2e8f0}
.ic-cip{font-size:.83rem;color:#64748b;margin-top:.2rem}
.ic-ftp{font-size:.78rem;color:#475569;margin-top:.2rem}
.ic-ftp code{background:#0d1117;padding:.05rem .3rem;border-radius:.2rem;color:#7dd3fc;font-size:.78rem}
.ic-stats{display:flex;gap:1.5rem}
.ic-stat{display:flex;flex-direction:column;align-items:center;gap:.1rem}
.ic-n{font-size:1.6rem;font-weight:700}
.ic-l{font-size:.72rem;color:#475569;text-transform:uppercase;letter-spacing:.04em}
.valid-col{color:#4ade80}
.rejected-col{color:#f87171}

/* ── mode switcher ─── */
.mode-bar{background:#1e293b;border-radius:.8rem;padding:1rem 1.4rem;display:flex;flex-direction:column;gap:.75rem}
.mode-label{font-size:.78rem;color:#64748b;text-transform:uppercase;letter-spacing:.05em}
.mode-tabs{display:flex;gap:.6rem;flex-wrap:wrap}
.mode-tab{display:flex;flex-direction:column;padding:.55rem 1rem;border-radius:.5rem;border:1px solid #334155;text-decoration:none;color:#94a3b8;transition:all .15s;min-width:160px}
.mode-tab:hover{border-color:#38bdf8;color:#e2e8f0}
.mode-tab.active{background:#0ea5e9;border-color:#0ea5e9;color:#fff}
.mode-desc{font-size:.72rem;opacity:.7;margin-top:.1rem}
.mode-hint{font-size:.82rem;color:#64748b;background:#0d1117;padding:.5rem .8rem;border-radius:.4rem}
.mode-hint code{background:#1e293b;padding:.05rem .3rem;border-radius:.2rem;color:#7dd3fc;font-size:.78rem}

/* ── spec details ─── */
.spec-details{background:#1e293b;border-radius:.8rem;padding:1rem 1.4rem}
.spec-details summary{cursor:pointer;color:#64748b;font-size:.85rem;list-style:none;padding:.2rem 0}
.spec-details summary::before{content:"▶ ";font-size:.7rem}
.spec-details[open] summary::before{content:"▼ "}
.spec-details .spec-grid{margin-top:.8rem}

/* actions col */
.actions{white-space:nowrap}
.refresh-btn{margin-left:auto;font-size:.8rem}

/* header */
header{text-align:center}
header h1{font-size:1.9rem;color:#7dd3fc;margin-bottom:.35rem}
.subtitle{color:#64748b;font-size:.9rem}

/* naming strip */
.naming-strip{background:#1e293b;border-radius:.6rem;padding:.7rem 1.2rem;font-size:.82rem;color:#94a3b8;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}
.ns-label{color:#7dd3fc;font-weight:600}
.naming-strip code{background:#0d1117;padding:.1rem .35rem;border-radius:.25rem;color:#7dd3fc;font-size:.8rem}
.ns-sep{color:#334155}
.ns-ex em{color:#c084fc}

/* dropzone */
.dropzone{border:2px dashed #334155;border-radius:.9rem;padding:2.5rem 2rem;text-align:center;cursor:pointer;transition:border-color .2s,background .2s}
.dropzone.over,.dropzone:hover{border-color:#38bdf8;background:#1e293b}
.dz-inner{display:flex;flex-direction:column;align-items:center;gap:.55rem}
.dz-icon{font-size:2.5rem}
.dz-text{color:#94a3b8;font-size:.95rem}
.btn-browse{display:inline-block;padding:.45rem 1.3rem;background:#0ea5e9;color:#fff;border-radius:.45rem;cursor:pointer;font-size:.88rem;transition:background .15s}
.btn-browse:hover{background:#38bdf8}

/* queue */
.queue{background:#1e293b;border-radius:.75rem;padding:1.1rem 1.4rem}
.queue-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.7rem;font-size:.88rem;color:#94a3b8}
.btn-ghost{background:none;border:1px solid #334155;color:#64748b;border-radius:.4rem;padding:.15rem .6rem;cursor:pointer;font-size:.78rem}
.btn-ghost:hover{border-color:#38bdf8;color:#38bdf8}
#queueList{list-style:none;display:flex;flex-direction:column;gap:.3rem;margin-bottom:.9rem}
#queueList li{display:flex;justify-content:space-between;background:#0d1117;padding:.3rem .7rem;border-radius:.4rem;font-size:.83rem}
.q-name{color:#cbd5e1}
.q-size{color:#475569;font-size:.75rem}
.btn-upload{padding:.5rem 1.5rem;background:#22c55e;color:#fff;border:none;border-radius:.5rem;cursor:pointer;font-size:.9rem;font-weight:600;transition:background .15s}
.btn-upload:hover{background:#4ade80}
.btn-upload:disabled{opacity:.5;cursor:not-allowed}

/* progress */
.progress-wrap{position:relative;height:1.5rem;background:#1e293b;border-radius:1rem;overflow:hidden}
.progress-bar{height:100%;width:0%;background:linear-gradient(90deg,#0ea5e9,#38bdf8);transition:width .1s}
#progressLabel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700;color:#fff}

/* validation cards */
.val-results{display:flex;flex-direction:column;gap:.65rem}
.vcard{border-radius:.6rem;padding:.75rem 1rem;border-left:4px solid transparent}
.vok{background:#0f2d1a;border-color:#22c55e}
.vfail{background:#2d0f0f;border-color:#ef4444}
.vcard-head{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;font-size:.88rem}
.vcard-dest{font-size:.74rem;color:#475569;margin-left:auto}
.verr,.vwarn{list-style:none;padding:0;margin-top:.4rem;display:flex;flex-direction:column;gap:.15rem}
.verr  li{font-size:.78rem;color:#fca5a5}
.vwarn li{font-size:.78rem;color:#fbbf24}

/* pharmacy sections */
.pharma-section{background:#1e293b;border-radius:.8rem;padding:1.2rem 1.4rem}
.pharma-header{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem}
.cip-badge{background:#1d4ed8;color:#bfdbfe;padding:.2rem .6rem;border-radius:.35rem;font-size:.8rem;font-weight:700;font-family:monospace}
.incoming-badge{background:#374151;color:#d1d5db}
.pharma-label{color:#94a3b8;font-size:.9rem}
.count-badge{padding:.15rem .55rem;border-radius:.3rem;font-size:.75rem;font-weight:600}
.valid-count{background:#14532d;color:#4ade80}
.rejected-count{background:#450a0a;color:#fca5a5}
.empty-msg{color:#334155;font-size:.85rem;font-style:italic}

/* file tables */
.file-table{width:100%;border-collapse:collapse;font-size:.85rem}
.file-table thead th{text-align:left;padding:.45rem .65rem;color:#475569;border-bottom:1px solid #334155}
.file-table tbody tr{transition:background .12s}
.file-table tbody tr:hover{background:#0d1117}
.file-table tbody td{padding:.5rem .65rem;border-bottom:1px solid #1e293b;vertical-align:middle}
.fname{color:#e2e8f0;font-weight:500}
.row-rejected .fname{color:#fca5a5}
.warn-dot{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;border-radius:50%;background:#78350f;color:#fbbf24;font-size:.65rem;font-weight:700;margin-left:.25rem}

.rejected-details summary{cursor:pointer;color:#f87171;font-size:.85rem;padding:.4rem 0;list-style:none}
.rejected-details summary::before{content:"▶ ";font-size:.7rem}
.rejected-details[open] summary::before{content:"▼ "}
.rejected-details .file-table{margin-top:.6rem}

/* type badges */
.tbadge{display:inline-block;padding:.1rem .42rem;border-radius:.25rem;font-size:.7rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.t-achat{background:#14532d;color:#4ade80}
.t-vente{background:#1e3a5f;color:#60a5fa}
.t-stock{background:#451a03;color:#fb923c}
.t-trigger{background:#374151;color:#9ca3af}
.spec-title{margin-bottom:.5rem;font-size:.82rem}

.btn-dl{text-decoration:none;color:#38bdf8;font-size:.8rem;margin-right:.3rem}
.btn-dl:hover{text-decoration:underline}
.btn-del{background:none;border:none;cursor:pointer;font-size:.9rem;color:#f87171}
.btn-del:hover{color:#fca5a5}
.btn-report{background:#1e3a5f;border:none;cursor:pointer;font-size:.75rem;color:#60a5fa;padding:.15rem .5rem;border-radius:.3rem;margin-right:.3rem}
.btn-report:hover{background:#1d4ed8}

/* info sections */
.info-section{background:#1e293b;border-radius:.8rem;padding:1.2rem 1.4rem}
.info-section h2{color:#7dd3fc;font-size:.95rem;margin-bottom:.9rem}
.ftp-grid{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1rem}
.ftp-item{display:flex;flex-direction:column;gap:.2rem}
.ftp-label{font-size:.72rem;color:#475569;text-transform:uppercase;letter-spacing:.05em}
.ftp-item code{background:#0d1117;padding:.2rem .5rem;border-radius:.3rem;color:#7dd3fc;font-size:.85rem}
.cred-table{width:100%;border-collapse:collapse;font-size:.83rem}
.cred-table th{text-align:left;padding:.4rem .6rem;color:#475569;border-bottom:1px solid #334155}
.cred-table td{padding:.4rem .6rem;border-bottom:1px solid #1e293b;color:#cbd5e1}
.cred-table td code{background:#0d1117;padding:.1rem .3rem;border-radius:.25rem;color:#7dd3fc}

/* spec grid */
.spec-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.9rem;margin-bottom:.7rem}
.spec-card{background:#0d1117;border-radius:.5rem;padding:.85rem}
.spec-card ul{list-style:none;padding:0;margin-top:.5rem;display:flex;flex-direction:column;gap:.3rem;font-size:.8rem}
.spec-card li{color:#94a3b8}.spec-card li b{color:#e2e8f0}
.spec-card li.rec{color:#334155;font-style:italic;font-size:.75rem}
.spec-note{font-size:.78rem;color:#475569}
.spec-note code{background:#0d1117;padding:.1rem .3rem;border-radius:.25rem;color:#7dd3fc}

/* modal */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}
.modal-box{background:#1e293b;border-radius:.8rem;padding:1.5rem;width:100%;max-width:560px;max-height:80vh;overflow-y:auto;position:relative}
.modal-close{position:absolute;top:.8rem;right:.9rem;background:none;border:none;color:#64748b;cursor:pointer;font-size:1rem}
.modal-box h3{color:#7dd3fc;margin-bottom:.9rem;padding-right:1.5rem}
.rep-status{padding:.4rem .8rem;border-radius:.4rem;font-weight:700;font-size:.9rem;display:inline-block;margin-bottom:.8rem}
.rep-ok{background:#14532d;color:#4ade80}
.rep-fail{background:#450a0a;color:#f87171}
.rep-meta{font-size:.83rem;color:#64748b;margin-bottom:.7rem}
.rep-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:.25rem;margin-bottom:.7rem}
.rep-list li{font-size:.8rem;padding:.2rem 0}
.rep-list.err  li{color:#fca5a5}
.rep-list.warn li{color:#fbbf24}
.modal-box h4{color:#94a3b8;font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.35rem}

.hidden{display:none!important}
