:root{ --bg:#12151c; --panel:#191d27; --panel2:#1f2430; --border:#2b3140; --text:#e8eaf0; --text-dim:#8b93a7; --accent:#5b8cff; --danger:#e2685f; } *{ box-sizing:border-box; } body{ margin:0; font-family:system-ui,-apple-system,"Segoe UI",sans-serif; background:var(--bg); color:var(--text); } h1{ font-size:20px; margin:0 0 6px; } h2{ font-size:13px; text-transform:uppercase; letter-spacing:.05em; color:var(--text-dim); margin:24px 0 8px; } h3{ font-size:13px; color:var(--accent); margin:14px 0 6px; } label{ display:block; font-size:12px; color:var(--text-dim); margin:8px 0 4px; } input[type=text], input[type=number], input[type=date], textarea, select{ width:100%; background:var(--panel2); border:1px solid var(--border); border-radius:6px; color:var(--text); padding:8px 10px; font-size:13px; font-family:inherit; } input[type=checkbox]{ width:auto; margin-top:6px; } /* .topbar/.breadcrumbBar : Bulma fournit déjà la mise en page (navbar, breadcrumb) — ces classes ne servent plus qu'à les repérer dans les layouts plein-écran (body.builderBody/objectEditBody, voir plus bas) et à les rattacher au thème sombre. */ .topbar{ border-bottom:1px solid var(--border); } .breadcrumbBar{ padding:10px 20px; background:transparent; border-bottom:1px solid var(--border); margin-bottom:0; } /* Barre de navigation d'UN JEU (voir base.html) — toujours visible entre les différents éditeurs d'un même jeu, en ligne (contrairement à .navList/.navRow ci-dessous, empilés verticalement dans le panneau "Créer" du tableau de bord). */ .gameNavBar{ display:flex; flex-wrap:wrap; gap:6px; padding:8px 20px; background:transparent; border-bottom:1px solid var(--border); } .gameNavLink{ display:inline-flex; align-items:center; gap:6px; padding:6px 10px; border:1px solid var(--border); border-radius:6px; background:var(--panel); text-decoration:none; color:var(--text); font-size:12.5px; } .gameNavLink:hover{ background:var(--panel2); border-color:var(--accent); } .gameNavLink.active{ background:var(--panel2); border-color:var(--accent); color:var(--accent); } .content{ max-width:760px; margin:0 auto; padding:28px 20px; } .card{ border:1px solid var(--border); border-radius:10px; padding:16px; background:var(--panel); margin:12px 0; } .inline-form .fieldRow{ display:flex; gap:8px; align-items:flex-end; } .inline-form .fieldRow input{ flex:1; } .fieldRow{ display:flex; gap:10px; } .fieldRow > div{ flex:1; } .formField{ margin-bottom:6px; } button{ background:var(--panel2); border:1px solid var(--border); color:var(--text); border-radius:6px; padding:9px 14px; cursor:pointer; font-size:13px; } button.primary{ background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; } button.smallBtn{ padding:5px 10px; font-size:11.5px; } button.danger{ color:var(--danger); border-color:rgba(226,104,95,.4); } .actionsRow{ margin-top:16px; } /* Nav compacte à une seule ligne (icône + libellé) — pour une liste d'actions fixe (ex. colonne "Créer" du tableau de bord d'un jeu) : sobre et dense plutôt qu'une carte à deux lignes. */ .navList{ display:flex; flex-direction:column; gap:3px; } .navRow{ display:flex; align-items:center; gap:8px; padding:7px 10px; border:1px solid var(--border); border-radius:6px; background:var(--panel); text-decoration:none; color:var(--text); font-size:12.5px; } .navRow:hover{ background:var(--panel2); border-color:var(--accent); } .hint{ font-size:11.5px; color:var(--text-dim); line-height:1.5; } .autosaveStatus{ display:inline-flex; align-items:center; gap:6px; transition:color .2s ease; } .autosaveStatus.saving{ color:var(--text-dim); } .autosaveStatus.saved{ color:#7bd88f; } .warningBanner{ border:1px solid var(--danger); background:rgba(226,104,95,.1); color:var(--text); border-radius:8px; padding:10px 14px; font-size:12.5px; margin:12px 0; } .dangerZone{ border:1px solid rgba(226,104,95,.4); border-radius:8px; padding:10px 12px; margin-top:14px; } .dangerZone h3{ color:var(--danger); margin-top:0; } .fieldsExistingRow{ display:flex; align-items:center; justify-content:space-between; padding:8px 10px; border:1px solid var(--border); border-radius:6px; margin-bottom:6px; font-size:12.5px; } .fieldsExistingRow form{ margin:0; } .fieldRowCard{ margin-bottom:10px; } .relationTarget{ margin-top:6px; } /* .dataTable : Bulma fournit déjà la mise en page du tableau (classes "table is-fullwidth is-hoverable", voir data_list.html) — ceci ne fait plus que tronquer les cellules trop longues avec "...", pour garder une vue d'ensemble compacte (le détail complet s'ouvre dans la modale Bulma ci-dessous via le bouton 👁️). */ .dataTable td{ max-width:220px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } /* ---------- Détail d'une entrée (bouton 👁️) ---------- */ /* Contenu de la modale Bulma (.modal/.modal-card, voir data_list.html) — affiche chaque champ en entier, sans troncature. */ .rowDetailField{ padding:10px 0; border-bottom:1px solid var(--border); } .rowDetailField:last-child{ border-bottom:none; } .rowDetailLabel{ font-size:11px; color:var(--text-dim); text-transform:uppercase; letter-spacing:.05em; margin-bottom:4px; } .rowDetailValue{ font-size:13.5px; white-space:pre-wrap; word-break:break-word; } .content-wide{ max-width:1080px; } .twoCol{ display:flex; gap:24px; align-items:flex-start; margin-top:10px; } .twoCol .colLeft{ flex:0 0 340px; } .twoCol .colRight{ flex:1; min-width:0; } @media (max-width: 820px){ .twoCol{ flex-direction:column; } .twoCol .colLeft{ flex:none; width:100%; } /* En dessous de 820px, les deux colonnes s'empilent : le défilement interne séparé par colonne n'a plus de sens (il n'y a plus qu'une colonne) — on revient à une page classique qui défile normalement, comme pour l'éditeur d'écran ci-dessous. */ body.objectEditBody{ height:auto; overflow:visible; } body.objectEditBody > main.content{ overflow:visible; } .content-objectEdit .colLeft, .content-objectEdit .colRight{ height:auto; overflow:visible; } .fieldsTableWrap{ max-height:60vh; } } /* ---------- Modifier un objet : tableau des champs existants ---------- */ /* Comme l'éditeur d'écran (body.builderBody, plus bas) : la page ne défile jamais elle-même, seules les zones internes (colonne de gauche, tableau des champs) défilent chacune de leur côté — indispensable dès qu'un objet a beaucoup de champs, pour garder une vue d'ensemble sans perdre le formulaire "Ajouter un champ" hors de l'écran. */ body.objectEditBody{ display:flex; flex-direction:column; height:100vh; margin:0; overflow:hidden; } body.objectEditBody > .topbar, body.objectEditBody > .gameNavBar, body.objectEditBody > .breadcrumbBar{ flex:0 0 auto; } body.objectEditBody > main.content{ flex:1 1 auto; min-height:0; overflow:hidden; display:flex; flex-direction:column; } .content-objectEdit{ width:100%; display:flex; flex-direction:column; min-height:0; } .content-objectEdit > h1, .content-objectEdit > .hint, .content-objectEdit > form, .content-objectEdit > .warningBanner{ flex:0 0 auto; } /* Un