
.party-admin,.party-login{background:var(--bg)}
.admin-layout{min-height:100vh;display:grid;grid-template-columns:250px 1fr}
.admin-sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:24px 16px;background:#0c1220;border-right:1px solid var(--border-soft)}
.admin-brand{display:flex;align-items:center;gap:11px;padding:0 8px 24px}.admin-brand img{width:62px;height:48px;object-fit:contain}.admin-brand strong,.admin-brand span{display:block}.admin-brand strong{font-size:1.25rem}.admin-brand span{margin-top:3px;color:var(--muted);font-size:.78rem}
.admin-nav{display:grid;gap:5px}.nav-item{border:0;border-radius:11px;padding:12px 13px;text-align:left;background:transparent;color:var(--muted-strong);font-weight:750}.nav-item:hover{background:var(--surface)}.nav-item.active{background:var(--primary-soft);color:#ddd6fe}
.admin-sidebar-footer{margin-top:auto;display:grid;gap:8px;padding:14px 8px 0;border-top:1px solid var(--border-soft)}.admin-sidebar-footer a{color:var(--muted);text-decoration:none;font-size:.88rem}
.admin-main{min-width:0;padding:28px 34px 70px}.admin-topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:28px}.admin-topbar h1{margin:5px 0 0;font-size:2rem}.admin-status{display:flex;align-items:center;gap:13px}.admin-status span{color:var(--muted);font-size:.86rem}
.admin-section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:16px}.admin-section-header h2{margin:0}.admin-section-header p{max-width:720px;margin:7px 0 0;color:var(--muted);line-height:1.45}
.editor-list{display:grid;gap:14px}.editor-card{background:linear-gradient(145deg,#141d32,#101827);border:1px solid var(--border-soft);border-radius:18px;padding:18px}.editor-card-header{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px}.editor-card-header h3{margin:0}.card-actions{display:flex;gap:7px}.danger-button,.mini-button{border:1px solid var(--border);border-radius:9px;padding:8px 10px;background:var(--surface-hover);color:white}.danger-button{border-color:rgba(248,113,113,.25);background:rgba(127,29,29,.4);color:#fecaca}
.form-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.form-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.form-field{display:grid;gap:6px}.form-field label{color:var(--muted);font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em}.form-field input,.form-field select,.json-editor{width:100%;border:1px solid var(--border);border-radius:10px;background:#0a1120;color:white;padding:10px}
.color-preview{height:42px;border-radius:10px;border:1px solid var(--border)}
.command-section{margin-top:17px;padding-top:14px;border-top:1px solid var(--border-soft)}.command-section h4{margin:0 0 9px}.command-header,.command-row{display:grid;grid-template-columns:90px 90px minmax(170px,1fr) 42px;gap:8px;align-items:center}.command-header{padding:0 2px 6px;color:var(--muted);font-size:.7rem;font-weight:850;text-transform:uppercase}.command-row{margin-bottom:7px}.command-row input,.command-row select{width:100%;min-width:0;border:1px solid var(--border);border-radius:8px;background:#0a1120;color:white;padding:9px}.command-row .delete-row{height:39px;border:1px solid rgba(248,113,113,.25);border-radius:8px;background:rgba(127,29,29,.4);color:#fecaca}
.track-header,.track-row{display:grid;grid-template-columns:minmax(150px,1.5fr) 75px 75px 75px 75px minmax(130px,1fr) 42px;gap:8px;align-items:center}.track-header{padding:0 2px 6px;color:var(--muted);font-size:.7rem;font-weight:850;text-transform:uppercase}.track-row{margin-bottom:7px}.track-row input,.track-row select{width:100%;min-width:0;border:1px solid var(--border);border-radius:8px;background:#0a1120;color:white;padding:9px}
.upload-strip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px;margin-bottom:15px;background:var(--surface);border:1px solid var(--border-soft);border-radius:14px}.upload-strip span{color:var(--muted)}
.json-editor{min-height:650px;font-family:Consolas,Monaco,monospace;line-height:1.45;resize:vertical;margin-bottom:12px}
.login-page{min-height:100vh;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at top,rgba(139,92,246,.22),transparent 35%),var(--bg)}.login-card{width:min(440px,100%);padding:30px;background:linear-gradient(150deg,#172139,#0f172a);border:1px solid var(--border);border-radius:24px;box-shadow:var(--shadow-lg)}.login-card img{display:block;height:75px;max-width:150px;object-fit:contain;margin-bottom:14px}.login-card h1{margin:5px 0 8px}.login-card p{color:var(--muted);line-height:1.5}.login-card label{display:block;margin:20px 0 7px;color:var(--muted-strong);font-weight:700}.login-card input{width:100%;padding:12px;border:1px solid var(--border);border-radius:10px;background:#0a1120;color:white}.login-card button{width:100%;margin-top:12px}.login-card a{display:block;text-align:center;margin-top:15px;color:#c4b5fd}.form-error{padding:10px;border-radius:10px;background:rgba(127,29,29,.5);color:#fecaca}
@media(max-width:900px){.admin-layout{grid-template-columns:1fr}.admin-sidebar{position:static;height:auto;padding:14px}.admin-brand{padding-bottom:12px}.admin-nav{display:flex;overflow:auto}.nav-item{white-space:nowrap}.admin-sidebar-footer{display:none}.admin-main{padding:22px 16px 60px}.form-grid{grid-template-columns:1fr 1fr}.admin-topbar{align-items:flex-start}.track-header{display:none}.track-row{grid-template-columns:1fr 1fr 1fr}.track-row>*:first-child{grid-column:span 2}}
@media(max-width:580px){.admin-topbar,.admin-section-header{flex-direction:column}.admin-status{width:100%;justify-content:space-between}.form-grid,.form-grid.two{grid-template-columns:1fr}.command-header{display:none}.command-row{grid-template-columns:70px 70px 1fr 40px}}

.bluetooth-actions{display:flex;gap:9px;flex-wrap:wrap}.bluetooth-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:14px}.bluetooth-summary-grid .editor-card{display:grid;gap:7px;min-height:118px}.bluetooth-summary-grid strong{font-size:1.1rem;overflow-wrap:anywhere}.bluetooth-summary-grid small{color:var(--muted);overflow-wrap:anywhere}.bluetooth-state-card.is-connected{border-color:rgba(34,197,94,.35);background:linear-gradient(145deg,rgba(20,83,45,.34),#101827)}.diagnostic-badge{padding:6px 9px;border-radius:999px;background:var(--surface-hover);color:var(--muted-strong);font-size:.76rem}.service-list{display:grid;gap:10px}.service-item{padding:12px;border:1px solid var(--border-soft);border-radius:12px;background:#0a1120}.service-item>strong{display:block;font-family:Consolas,monospace;font-size:.86rem;overflow-wrap:anywhere}.characteristic-list{display:grid;gap:6px;margin-top:9px}.characteristic-item{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:8px 9px;border-radius:9px;background:rgba(255,255,255,.035)}.characteristic-item code{font-size:.78rem;overflow-wrap:anywhere}.property-tags{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.property-tag{padding:3px 6px;border-radius:999px;background:var(--primary-soft);color:#ddd6fe;font-size:.65rem;font-weight:800;text-transform:uppercase}.empty-state,.field-help{color:var(--muted);line-height:1.5}.hex-send-row{display:grid;grid-template-columns:1fr auto;gap:9px}.hex-send-row input{min-width:0;border:1px solid var(--border);border-radius:10px;background:#0a1120;color:white;padding:11px;font-family:Consolas,monospace}.bluetooth-log{min-height:210px;max-height:390px;overflow:auto;padding:10px;border:1px solid var(--border-soft);border-radius:12px;background:#080d18;font-family:Consolas,monospace;font-size:.78rem}.bluetooth-log-entry{display:grid;grid-template-columns:70px 1fr;gap:8px;padding:5px 2px;border-bottom:1px solid rgba(255,255,255,.035)}.bluetooth-log-entry time{color:var(--muted)}.bluetooth-log-entry.error span{color:#fecaca}.bluetooth-log-entry.warning span{color:#fde68a}.bluetooth-log-entry.tx span{color:#bfdbfe}
@media(max-width:900px){.bluetooth-summary-grid{grid-template-columns:1fr}.characteristic-item{flex-direction:column}.property-tags{justify-content:flex-start}}
@media(max-width:580px){.bluetooth-actions{width:100%}.bluetooth-actions button{flex:1}.hex-send-row{grid-template-columns:1fr}.bluetooth-log-entry{grid-template-columns:58px 1fr}}

.admin-screen{min-height:100vh;background:var(--bg)}
.admin-view-switch{border:0;background:transparent;color:var(--muted);text-align:left;padding:0;font:inherit;cursor:pointer}
.admin-view-switch:hover{color:white}

/* v1.3.1 — l'administration intégrée doit rester une page normale et défilable. */
body.admin-open {
  overflow-y: auto !important;
  overflow-x: hidden;
  height: auto !important;
  min-height: 100%;
  touch-action: auto;
}
body.admin-open .admin-screen,
body.admin-open .admin-layout,
body.admin-open .admin-main {
  height: auto;
  max-height: none;
  overflow: visible;
}
body.admin-open .admin-screen {
  min-height: 100vh;
  min-height: 100dvh;
}
@media (max-width: 900px) {
  body.admin-open .admin-nav {
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    padding-bottom: 4px;
  }
}

/* v1.3.2 — navigation d'administration réellement responsive.
   Les onglets se replient sur plusieurs lignes : aucun contenu ne reste hors écran. */
body.admin-open {
  overflow-x: hidden !important;
  touch-action: pan-x pan-y pinch-zoom !important;
}

body.admin-open .admin-screen,
body.admin-open .admin-layout,
body.admin-open .admin-sidebar,
body.admin-open .admin-main,
body.admin-open .admin-topbar,
body.admin-open .admin-view {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
}

body.admin-open .admin-screen {
  width: 100%;
  overflow-x: hidden;
  touch-action: pan-x pan-y pinch-zoom;
}

@media (max-width: 900px) {
  body.admin-open .admin-layout {
    display: block;
    width: 100%;
  }

  body.admin-open .admin-sidebar {
    position: static;
    width: 100%;
    height: auto;
    overflow: visible;
  }

  body.admin-open .admin-nav {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    width: 100%;
    max-width: 100%;
    gap: 6px;
    overflow: visible;
    padding-bottom: 0;
  }

  body.admin-open .admin-nav .nav-item {
    width: 100%;
    min-width: 0;
    padding: 10px 8px;
    text-align: center;
    white-space: normal;
    overflow-wrap: anywhere;
    line-height: 1.15;
  }

  body.admin-open .admin-main {
    width: 100%;
    max-width: 100%;
    overflow-x: hidden;
  }

  body.admin-open .editor-card,
  body.admin-open .upload-strip,
  body.admin-open .json-editor {
    min-width: 0;
    max-width: 100%;
  }
}

@media (max-width: 580px) {
  body.admin-open .admin-nav {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  body.admin-open .admin-brand {
    padding-bottom: 10px;
  }

  body.admin-open .admin-main {
    padding-left: 12px;
    padding-right: 12px;
  }
}

/* v1.3.3 — les actions de navigation restent visibles sur mobile et fenêtre étroite. */
@media (max-width: 900px) {
  body.admin-open .admin-sidebar-footer {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
    width: 100%;
    margin-top: 12px;
    padding: 12px 0 0;
    border-top: 1px solid var(--border-soft);
  }

  body.admin-open .admin-sidebar-footer .admin-view-switch,
  body.admin-open .admin-sidebar-footer a {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
    min-height: 42px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--surface);
    color: var(--muted-strong);
    text-align: center;
    text-decoration: none;
    font-size: .86rem;
    font-weight: 750;
    line-height: 1.15;
  }

  body.admin-open .admin-sidebar-footer .admin-view-switch:hover,
  body.admin-open .admin-sidebar-footer a:hover {
    background: var(--surface-hover);
    color: white;
  }
}

@media (max-width: 420px) {
  body.admin-open .admin-sidebar-footer {
    grid-template-columns: 1fr;
  }
}

/* v1.4.1 — éditeur des effets et navigation d'onglets fiabilisée. */
.effect-admin-group{margin-top:24px}.effect-admin-group:first-of-type{margin-top:0}.admin-section-header.compact{margin-bottom:12px}.admin-section-header.compact h3{margin:0}.admin-section-header.compact p{margin-top:5px}.command-header.with-group,.command-row.with-group{grid-template-columns:110px 80px 80px minmax(150px,1fr) 42px}.effect-native-fields.hidden,.effect-software-fields.hidden{display:none!important}
@media(max-width:700px){.command-header.with-group{display:none}.command-row.with-group{grid-template-columns:1fr 72px 72px 40px}.command-row.with-group input[data-k="comment"]{grid-column:1/-1}.effect-admin-group .admin-section-header.compact{flex-direction:column}.effect-admin-group .admin-section-header.compact button{width:100%}}

/* Valeur rapide optionnelle des commandes d'effets natifs */
.command-header.with-group.with-fast,.command-row.with-group.with-fast{grid-template-columns:110px 80px 80px 100px minmax(150px,1fr) 42px}
@media(max-width:700px){.command-row.with-group.with-fast{grid-template-columns:1fr 72px 72px 84px 40px}.command-row.with-group.with-fast input[data-k="comment"]{grid-column:1/-1}}

/* Onglet Contrôles : dimmers, blackout et strobe */
.control-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:16px}
.control-subcard{padding:15px;border:1px solid var(--border-soft);border-radius:14px;background:#0a1120}
.control-subcard h4{margin:0 0 12px}
@media(max-width:700px){.control-grid{grid-template-columns:1fr}}
