/* SPDX-License-Identifier: AGPL-3.0-or-later
   Mise en page de partiduo-ui-bulma, reprise de la maquette de référence
   (partiduo-docs/maquette/index.html). Couleurs et polices : theme.css
   uniquement. Propriétés logiques (margin-inline…) pour ne fermer aucun sens
   d'écriture (ADR-005 D7). Trois tailles (ADR-005 D5) : ordinateur
   (≥ 1280 px), tablette (768 à 1279 px, menu repliable), téléphone
   (< 768 px, barre non figée sur trois lignes). */

[hidden] { display: none !important; }
html, body { min-height: 100%; }
body { background: var(--pd-ground); color: var(--pd-ink); font-family: var(--bulma-family-primary); }
:focus-visible { outline: 2px solid var(--pd-focus); outline-offset: 2px; }
.pd-side :focus-visible { outline-color: var(--pd-focus-on-dark); }
@media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; scroll-behavior: auto !important; } }

.pd-icon { width: 1.15em; height: 1.15em; flex: none; vertical-align: -0.2em; }
.button .pd-icon { margin-inline-end: .35em; }
.pd-js .pd-nojs { display: none; }
.pd-touch { min-height: 44px; min-width: 44px; }

/* Lien d'évitement (WCAG 2.4.1) */
.pd-skip { position: absolute; inset-inline-start: .5rem; inset-block-start: -3rem; z-index: 100; background: var(--pd-surface);
  color: var(--pd-ink); padding: .6rem 1rem; border-radius: var(--bulma-radius); border: 2px solid var(--pd-focus); }
.pd-skip:focus { inset-block-start: .5rem; }

.pd-app { display: grid; grid-template-columns: 15rem minmax(0, 1fr); grid-template-rows: auto 1fr; min-height: 100vh; }

/* Barre supérieure */
.pd-top { grid-column: 1 / -1; display: flex; align-items: center; gap: .75rem 1rem; flex-wrap: wrap;
  background: var(--pd-surface); border-block-end: 1px solid var(--pd-rule); padding: .6rem 1rem;
  position: sticky; inset-block-start: env(safe-area-inset-top, 0px); z-index: 20; }
/* Marque : symbole (dessiné sur la grille de 32 px, net à cette taille) et
   nom en texte, « Parti » et « duo » aux couleurs de l'identité. Le symbole
   est décoratif (alt="") : le nom suffit aux lecteurs d'écran. */
.pd-brand { display: flex; align-items: center; gap: .5rem; color: var(--pd-ink); letter-spacing: -.01em; }
.pd-brand:hover { color: var(--pd-ink); }
.pd-logo { display: block; flex: none; width: 2rem; height: 2rem; }
.pd-name { font-weight: 600; font-size: 1.2rem; line-height: 1; color: var(--pd-brand-parti); letter-spacing: -.02em; }
.pd-name span { color: var(--pd-brand-duo); }
.pd-brand small { font-weight: 400; color: var(--pd-muted); font-size: .8rem; align-self: flex-end; padding-block-end: .15rem; }
.pd-dossier { display: flex; flex-direction: column; line-height: 1.2; padding-inline-start: 1rem; border-inline-start: 1px solid var(--pd-rule); min-width: 0; }
.pd-dossier strong { font-size: .95rem; color: var(--pd-ink); }
.pd-dossier span { font-size: .75rem; color: var(--pd-muted); font-variant-numeric: tabular-nums; }
.pd-period { display: flex; gap: 1rem; align-items: center; }
.pd-period > div { display: flex; flex-direction: column; line-height: 1.2; }
.pd-period-label { font-size: .7rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pd-muted); }
.pd-period-value { font-size: .9rem; font-weight: 600; color: var(--pd-ink); font-variant-numeric: tabular-nums; }
.pd-grow { flex: 1 1 12rem; min-width: 0; }
.pd-search .input { min-height: 44px; }
.pd-lang { display: flex; gap: .35rem; align-items: center; }
.pd-lang select, .pd-lang .button { min-height: 44px; }
.pd-burger { display: none; min-width: 44px; min-height: 44px; }

/* Utilisateur : menu déroulant natif (<details>), utilisable au clavier et sans survol */
.pd-user { position: relative; }
.pd-user > summary { display: flex; align-items: center; gap: .5rem; min-height: 44px; cursor: pointer; list-style: none;
  font-size: .85rem; color: var(--pd-muted); border-radius: var(--bulma-radius); padding-inline: .25rem; }
.pd-user > summary::-webkit-details-marker { display: none; }
.pd-avatar { width: 2rem; height: 2rem; border-radius: 50%; background: var(--pd-sidebar); color: #fff; display: grid; place-items: center; font-weight: 600; font-size: .8rem; flex: none; }
.pd-user-menu { position: absolute; inset-inline-end: 0; inset-block-start: calc(100% + .35rem); min-width: 15rem; z-index: 30;
  background: var(--pd-surface); border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); box-shadow: 0 8px 24px rgba(0, 0, 0, .12); padding: .35rem; }
.pd-user-menu a, .pd-user-menu button { display: flex; gap: .5rem; align-items: center; width: 100%; min-height: 44px; padding: .4rem .65rem;
  color: var(--pd-ink); background: none; border: 0; font: inherit; text-align: start; cursor: pointer; border-radius: var(--bulma-radius-small); }
.pd-user-menu a:hover, .pd-user-menu button:hover { background: var(--pd-row-alt); }

/* Menu latéral */
.pd-side { background: var(--pd-sidebar); color: var(--pd-sidebar-text); padding: 1rem .75rem; }
.pd-side .menu-label { color: var(--pd-sidebar-text); opacity: .8; font-size: .68rem; letter-spacing: .08em; margin-block-start: 1.1rem; }
.pd-side .menu-list a, .pd-menu-off { background: transparent; color: var(--pd-sidebar-text); border-radius: var(--bulma-radius); display: flex;
  justify-content: space-between; gap: .5rem; align-items: center; padding: .45rem .65rem; min-height: 44px; }
.pd-side .menu-list a:hover { background: var(--pd-sidebar-active-bg); color: var(--pd-sidebar-active); }
.pd-side .menu-list a.is-active { background: var(--pd-sidebar-active-bg); color: var(--pd-sidebar-active); font-weight: 600; box-shadow: inset 3px 0 0 #7fd0e2; }
.pd-menu-off { opacity: .7; cursor: default; }
.pd-ext { font-size: .65rem; opacity: .85; border: 1px solid currentColor; border-radius: .25rem; padding: 0 .3rem; font-family: var(--bulma-family-code); }
.pd-ext-light { color: var(--pd-muted); }
.pd-count { margin-inline-start: auto; background: #7fd0e2; color: #08323c; border-radius: 1rem; font-size: .7rem; font-weight: 700; padding: 0 .45rem; font-variant-numeric: tabular-nums; }
.pd-count + .pd-ext { margin-inline-start: .35rem; }

/* Contenu */
.pd-main { padding: 1.25rem 1.5rem 3rem; min-width: 0; }
.pd-main:focus { outline: none; }
.pd-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; flex-wrap: wrap; margin-block-end: 1.25rem; }
.pd-head h1 { font-size: 1.5rem; font-weight: 600; color: var(--pd-ink); text-wrap: balance; }
.pd-crumb { font-size: .8rem; color: var(--pd-muted); margin-block-end: .2rem; }
.pd-crumb ol { display: flex; flex-wrap: wrap; list-style: none; margin: 0; padding: 0; }
.pd-crumb li + li::before { content: "/"; margin-inline: .4rem; color: var(--pd-muted); }
.pd-crumb a { color: var(--pd-muted); text-decoration: underline; text-underline-offset: 2px; }
.pd-actions { margin-block-end: 0; }
.pd-panel { background: var(--pd-surface); border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); margin-block-end: 1rem; }
.pd-panel > header { display: flex; justify-content: space-between; align-items: center; gap: .75rem; padding: .75rem 1rem; border-block-end: 1px solid var(--pd-rule); }
.pd-panel > header h2 { font-size: .95rem; font-weight: 600; color: var(--pd-ink); display: flex; gap: .4rem; align-items: center; }
.pd-panel > .pd-body { padding: 1rem; }
.pd-grid2 { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 1rem; }
.pd-grid2 > .pd-panel { margin-block-end: 0; }
.amount, .pd-mono { font-family: var(--bulma-family-code); font-variant-numeric: tabular-nums; }
.amount { text-align: end; white-space: nowrap; }
.pd-muted { color: var(--pd-muted); }
/* Tableau plus large que l'écran : il défile dans son cadre, jamais la page
   (maquette, largeur téléphone). */
.pd-scroll { overflow-x: auto; max-width: 100%; }
.pd-message { margin-block-end: 1rem; }
.pd-callout, .pd-alert { display: flex; gap: .75rem; align-items: flex-start; }
.pd-callout .pd-icon, .pd-alert .pd-icon { margin-block-start: .15em; }
.pd-module-list { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; margin: 0; padding: 0; }
.pd-module-list li { border: 1px solid var(--pd-rule); border-radius: 1rem; padding: .2rem .75rem; background: var(--pd-row-alt); }
.pd-counter { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; }
.pd-counter output { font-family: var(--bulma-family-code); font-size: 1.35rem; font-weight: 600; min-width: 3ch; text-align: end; }
.pd-counter .button { min-height: 44px; }
.table { background: transparent; color: var(--pd-ink); font-size: .9rem; }
.table th { color: var(--pd-muted); font-weight: 600; font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; border-color: var(--pd-rule); }
.table td { border-color: var(--pd-rule); vertical-align: middle; }
.label { font-size: .8rem; font-weight: 600; color: var(--pd-muted); }
.help { font-size: .8rem; }

/* Formulaires */
.pd-field-errors { list-style: none; margin: .25rem 0 0; padding: 0; }
.pd-inline-form { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.pd-inline-form .input { width: auto; flex: 1 1 10rem; min-height: 44px; }
.pd-inline-form .label { flex-basis: 100%; margin: 0; }
/* Filtres et commandes en ligne (Bons à facturer, D-INV2-010) : champs et
   bouton alignés en bas, repliés au téléphone ; cibles de 44 px. */
.pd-filters-row { display: flex; flex-wrap: wrap; gap: .75rem; align-items: flex-end; }
.pd-filters-row .field { margin-block-end: 0; }
.pd-filters-row .input, .pd-filters-row select { min-height: 44px; }
/* Dérogation à l'encours maximum (D-INV2-009) : zone de motif. */
.pd-credit-override textarea { min-height: 5rem; }
.pd-code { font-family: var(--bulma-family-code); letter-spacing: .15em; font-size: 1.1rem; max-width: 14rem; }
.pd-narrow { max-width: 32rem; }
.pd-rules { font-size: .8rem; color: var(--pd-muted); margin: 0 0 .4rem; padding-inline-start: 1.1rem; list-style: disc; }
.pd-form-actions { display: flex; flex-wrap: wrap; gap: .75rem 1.25rem; align-items: center; }
.pd-form-actions a { min-height: 44px; display: inline-flex; align-items: center; }

/* Écrans d'authentification */
.pd-auth-body { display: flex; flex-direction: column; min-height: 100vh; }
/* En-tête : langue en haut à droite, puis le logo et le nom centrés. */
.pd-auth-top { display: flex; flex-direction: column; align-items: center; gap: .5rem; padding: .6rem 1rem 0; }
.pd-auth-top .pd-lang { align-self: flex-end; }
.pd-auth-brand { display: flex; flex-direction: column; align-items: center; gap: .5rem; margin-block-start: .5rem; text-align: center; }
.pd-auth-brand .pd-logo { width: 3.5rem; height: 3.5rem; }
.pd-auth-brand .pd-name { font-size: 2rem; }
.pd-auth-brand small { color: var(--pd-muted); font-size: .9rem; }
.pd-auth { flex: 1; display: flex; justify-content: center; align-items: flex-start; padding: 1.5rem 1rem 3rem; }
.pd-auth:focus { outline: none; }
.pd-auth-card { width: 100%; max-width: 30rem; background: var(--pd-surface); border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); padding: 1.5rem; }
.pd-auth-title { font-size: 1.4rem; font-weight: 600; color: var(--pd-ink); margin-block-end: .5rem; text-wrap: balance; }
.pd-auth-subtitle { font-size: 1rem; font-weight: 600; color: var(--pd-ink); display: flex; gap: .45rem; align-items: center; flex-wrap: wrap; margin-block-end: .4rem; }
.pd-auth-block { margin-block: 1rem; }
.pd-auth-block > summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; color: var(--bulma-link); font-weight: 500; }
.pd-recommended { border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); padding: 1rem; background: var(--pd-row-alt); }
.pd-or { display: flex; align-items: center; gap: .75rem; color: var(--pd-muted); font-size: .85rem; margin-block: 1.25rem; }
.pd-or::before, .pd-or::after { content: ""; flex: 1; border-block-start: 1px solid var(--pd-rule); }
/* Connexion fédérée (D-R5-010) : un bouton par fournisseur d'identité. */
.pd-federated { list-style: none; margin: 0; padding: 0; display: grid; gap: .5rem; }
.pd-federated .button { min-block-size: 44px; justify-content: flex-start; }
.pd-passkey-status:empty { display: none; }

/* Sécurité du compte */
.pd-levels { list-style: none; margin: 1rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: .75rem; }
.pd-level { display: flex; gap: .6rem; align-items: flex-start; border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); padding: .6rem .75rem; }
.pd-level > span:last-child { min-width: 0; overflow-wrap: anywhere; hyphens: auto; }
.pd-level small { display: block; color: var(--pd-muted); }
.pd-level-num { flex: none; width: 1.8rem; height: 1.8rem; border-radius: 50%; display: grid; place-items: center; font-weight: 700;
  border: 2px solid var(--pd-rule); color: var(--pd-muted); }
.pd-level.is-reached { border-color: var(--pd-ok); background: var(--pd-ok-bg); }
.pd-level.is-reached .pd-level-num { background: var(--pd-ok); border-color: var(--pd-ok); color: var(--pd-surface); }
.pd-level.is-required { box-shadow: inset 0 0 0 1px var(--pd-focus); }
.pd-subhead { font-size: .85rem; font-weight: 600; margin-block: 1rem .4rem; }
.pd-missing { list-style: none; margin: 0; padding: 0; display: grid; gap: .4rem; }
.pd-missing li { display: flex; gap: .5rem; align-items: flex-start; color: var(--pd-warn); }
.pd-missing li span { color: var(--pd-ink); }
.pd-elevate { border-color: var(--pd-warn); }

/* TOTP et codes de récupération */
.pd-steps { margin: 0; padding-inline-start: 1.25rem; display: grid; gap: 1.25rem; }
.pd-steps h2 { font-size: .95rem; font-weight: 600; margin-block-end: .35rem; }
.pd-totp-grid { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 1.25rem; align-items: start; }
.pd-qr-box { margin: 0; background: #fff; padding: .5rem; border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius); }
.pd-qr { display: block; width: 100%; height: auto; }
.pd-secret code { font-size: 1.05rem; letter-spacing: .08em; word-break: break-all; background: var(--pd-row-alt); color: var(--pd-ink); padding: .3rem .5rem; display: inline-block; }
.pd-dl { display: grid; grid-template-columns: auto 1fr; gap: .25rem .75rem; font-size: .85rem; margin-block-start: .75rem; }
.pd-dl dt { color: var(--pd-muted); }
.pd-dl dd { margin: 0; }
.pd-code-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .4rem 1.5rem; margin: 1rem 0; padding-inline-start: 1.5rem; }
.pd-code-list code { font-size: 1rem; letter-spacing: .06em; background: transparent; color: var(--pd-ink); }

/* Écrans du référentiel : listes, filtres, tableaux triables, formulaires, consultations */
.pd-list-head { flex-wrap: wrap; }
.pd-tabs { display: flex; gap: .35rem; flex-wrap: wrap; }
.pd-tabs a { border: 1px solid var(--pd-rule); background: var(--pd-surface); color: var(--pd-ink); border-radius: 1rem; padding: .2rem .8rem;
  font-size: .85rem; min-height: 32px; display: inline-flex; align-items: center; }
.pd-tabs a[aria-current="page"] { background: var(--bulma-primary); border-color: var(--bulma-primary); color: var(--pd-on-primary); font-weight: 600; }
.pd-filters { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; margin-inline-start: auto; }
.pd-filter-text { flex: 0 1 16rem; }
.pd-filter.checkbox { font-size: .85rem; display: inline-flex; gap: .35rem; align-items: center; }
.pd-table th a.pd-sort { color: inherit; display: inline-flex; gap: .25rem; align-items: center; }
.pd-table th a.pd-sort::after { content: "↕"; opacity: .35; font-size: .8em; }
.pd-table th[aria-sort="ascending"] a.pd-sort::after { content: "▲"; opacity: 1; }
.pd-table th[aria-sort="descending"] a.pd-sort::after { content: "▼"; opacity: 1; }
.pd-table td.pd-mono { white-space: nowrap; }
/* Libellé de pied dans une colonne de dates (« Dont Fournitures de bureau,
   documentation… ») : replié, pour que la colonne garde la largeur d'une
   date et que la colonne des actions reste visible (D-LIB2-006) ; au
   téléphone, la règle de D-UI-074 les replie déjà. */
@media (min-width: 768px) {
  .pd-table tfoot td.pd-mono:first-child { white-space: normal; font-family: inherit; min-inline-size: 11rem; }
}
.pd-table .pd-empty { text-align: center; padding-block: 1.5rem; }
.pd-table tr.pd-class { font-weight: 600; background: var(--pd-row-alt); }
.pd-table tr.pd-depth-1 td:first-child { padding-inline-start: 1.4rem; }
.pd-table tr.pd-depth-2 td:first-child { padding-inline-start: 2.2rem; }
.pd-table tr.pd-depth-3 td:first-child { padding-inline-start: 3rem; }
.pd-table tr.pd-depth-4 td:first-child { padding-inline-start: 3.8rem; }
.pd-table tr.pd-depth-5 td:first-child, .pd-table tr.pd-depth-6 td:first-child { padding-inline-start: 4.6rem; }
.pd-table tr.pd-row-closed td { color: var(--pd-muted); }
/* En-tête d'un groupe de lignes : période de déclaration d'un registre
   micro (D-MIC2-005) ; cadenas d'une ligne intangible. */
.pd-table tr.pd-group-row th { background: var(--pd-row-alt); font-weight: 600; text-align: start;
  padding-block: .5rem; border-block-start: 1px solid var(--pd-rule); }
.pd-table tr.pd-group-row .tag { font-weight: 400; }
/* Étiquette neutre (`tag is-light` sans couleur) : fond et texte du thème,
   contrastés à 4,5:1 dans les deux thèmes (WCAG 1.4.3) ; Bulma lui donne un
   fond clair et laisse la couleur du texte hériter (illisible en sombre). */
.tag.is-light:not(.is-primary):not(.is-link):not(.is-info):not(.is-success):not(.is-warning):not(.is-danger) {
  background-color: var(--pd-tag-bg); color: var(--pd-tag-ink); }
.pd-table tr.pd-row-locked td:first-child .pd-icon { color: var(--pd-muted); }
/* État de l'exercice en tête de la 2035 libérale (D-LIB2-005) : cadenas
   discret d'un exercice figé. */
.pd-exercise .pd-icon { color: var(--pd-muted); margin-inline-end: .25rem; }
/* Stock final négatif, action de suivi en retard (lot 6). */
.pd-table tr.pd-row-warning td { color: var(--bulma-danger-40, #a3001b); }
.pd-link { color: var(--bulma-link); text-decoration: underline; text-decoration-color: color-mix(in srgb, currentColor 35%, transparent); text-underline-offset: 2px; }
.pd-table-foot { display: flex; gap: .75rem 1rem; align-items: center; flex-wrap: wrap; justify-content: space-between; padding: .6rem 1rem;
  border-block-start: 1px solid var(--pd-rule); font-size: .85rem; }
.pd-pages ul { display: flex; gap: .25rem; flex-wrap: wrap; list-style: none; margin: 0; padding: 0; }
.pd-page { display: inline-grid; place-items: center; min-width: 2rem; min-height: 2rem; border: 1px solid var(--pd-rule); border-radius: var(--bulma-radius-small); }
.pd-page.is-current { background: var(--bulma-primary); border-color: var(--bulma-primary); color: var(--pd-on-primary); font-weight: 600; }
.pd-row-actions { display: flex; gap: .35rem; flex-wrap: wrap; align-items: center; }
.pd-action-form { display: inline-flex; margin: 0; }
.pd-actions .pd-action-form + .pd-action-form, .pd-actions > * { margin-block-end: 0; }
.pd-form { display: grid; gap: 1rem; }
.pd-fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.pd-fieldset legend { font-size: .9rem; font-weight: 600; color: var(--pd-ink); margin-block-end: .5rem; padding: 0; }
.pd-form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: .75rem 1rem; }
.pd-form-grid .field { margin: 0; }
.pd-form-grid .pd-wide { grid-column: 1 / -1; }
.pd-required { color: var(--pd-gap); }
.pd-check { display: inline-flex; gap: .45rem; align-items: center; min-height: 44px; }
.pd-sections { display: grid; grid-template-columns: repeat(auto-fit, minmax(22rem, 1fr)); gap: 0 1rem; align-items: start; }
.pd-sections > .pd-panel:has(.pd-table) { grid-column: 1 / -1; }
.pd-detail { margin-block-start: 0; }
.pd-detail dd { overflow-wrap: anywhere; }
.pd-status-tag { vertical-align: middle; font-size: .8rem; }
.pd-period .select select { min-height: 32px; }

@media (max-width: 767.98px) {
  .pd-filters { margin-inline-start: 0; width: 100%; }
  .pd-filter-text { flex: 1 1 100%; }
  .pd-sections { grid-template-columns: minmax(0, 1fr); }
  .pd-form-grid { grid-template-columns: minmax(0, 1fr); }
}

/* Tableau de bord (maquette) : tuiles des modules actifs, « À traiter » */
.pd-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: 1rem; margin-block-end: 1rem; }
.pd-tile { padding: .9rem 1rem; display: flex; flex-direction: column; gap: .3rem; margin-block-end: 0; }
.pd-tile .lbl { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pd-muted); }
.pd-tile .val { font-family: var(--bulma-family-code); font-size: 1.35rem; font-weight: 600; color: var(--pd-ink); font-variant-numeric: tabular-nums; }
.pd-tile .sub { font-size: .8rem; color: var(--pd-muted); }
a.pd-tile { color: inherit; }
a.pd-tile:hover { border-color: var(--pd-focus); }
.pd-todo { display: flex; flex-direction: column; list-style: none; margin: 0; padding: 0; }
.pd-todo a, .pd-todo .pd-todo-item { display: flex; gap: .75rem; align-items: flex-start; padding: .75rem 1rem; min-height: 44px; border-block-end: 1px solid var(--pd-rule); color: var(--pd-ink); }
.pd-todo li:last-child a, .pd-todo li:last-child .pd-todo-item { border-block-end: 0; }
.pd-todo a:hover { background: var(--pd-row-alt); }
.pd-todo small { display: block; color: var(--pd-muted); font-size: .8rem; }
.pd-dot { flex: none; width: .6rem; height: .6rem; border-radius: 50%; margin-block-start: .4rem; background: var(--bulma-primary); }
.pd-dot-gap { background: var(--pd-gap); }
.pd-dot-warn { background: var(--pd-warn); }

/* Saisie au clavier (maquette « Écriture d'achat », ADR-005 D5) */
.pd-entry-grid { display: grid; grid-template-columns: minmax(10rem, 14rem) 9rem 9rem minmax(0, 1fr); gap: .75rem 1rem; }
.pd-entry-grid .field { margin: 0; }
.pd-entry-grid .pd-wide { grid-column: span 2; }
.pd-lines td, .pd-inv-lines td { padding: .25rem .35rem; vertical-align: top; }
.pd-lines input, .pd-lines select, .pd-inv-lines input, .pd-inv-lines select { width: 100%; min-height: 36px; border: 1px solid var(--pd-field-border); background: var(--pd-surface); color: var(--pd-ink);
  font: inherit; padding: .35rem .45rem; border-radius: var(--bulma-radius-small); }
.pd-lines input:hover, .pd-lines select:hover, .pd-inv-lines input:hover, .pd-inv-lines select:hover { border-color: var(--pd-ink); }
.pd-lines input:focus, .pd-lines select:focus, .pd-inv-lines input:focus, .pd-inv-lines select:focus { outline: 2px solid var(--pd-focus); outline-offset: 0; background: var(--pd-surface); }
.pd-lines input[aria-invalid="true"], .pd-inv-lines input[aria-invalid="true"] { border-color: var(--pd-gap); }
.pd-lines input.amount, .pd-lines input.pd-mono, .pd-inv-lines .num, .pd-inv-lines .pd-mono { font-family: var(--bulma-family-code); }
.pd-inv-lines .num { text-align: end; }
.pd-lines .pd-field-errors, .pd-inv-lines .pd-field-errors { padding-inline-start: .45rem; }
.pd-col-account { width: 12rem; }
.pd-col-amount { width: 9rem; }
.pd-col-vat { width: 9rem; }
.pd-col-del { width: 2.75rem; }
/* Ventilation analytique dans la saisie (lot 5, D-UI-042) : un choix de poste par plan, clé. */
.pd-col-analytic { min-width: 12rem; }
.pd-ana { display: flex; flex-direction: column; gap: .15rem; }
.pd-ana-plans { display: block; font-weight: 400; font-size: .72rem; color: var(--pd-muted); }
.pd-ana-plans span + span::before { content: " · "; }
.pd-col-item { min-width: 14rem; }
.pd-col-qty { width: 5.5rem; }
.pd-col-unit { width: 5rem; }
.pd-col-price { width: 8rem; }
.pd-del { background: none; border: 0; color: var(--pd-muted); cursor: pointer; font-size: 1.1rem; line-height: 1; padding: .3rem .5rem; min-width: 32px; min-height: 32px;
  border-radius: var(--bulma-radius-small); }
.pd-del:hover, .pd-del:focus-visible { color: var(--pd-gap); background: var(--pd-gap-bg); }
.pd-entry-foot { padding-block-start: 0; }
.pd-keys { font-size: .78rem; color: var(--pd-muted); display: flex; gap: 1rem; flex-wrap: wrap; margin-block-start: .75rem; }
kbd { font-family: var(--bulma-family-code); font-size: .72rem; border: 1px solid var(--pd-rule); border-block-end-width: 2px; border-radius: .25rem; padding: 0 .3rem;
  background: var(--pd-surface); color: var(--pd-ink); }
.pd-entry-check { position: sticky; inset-block-end: 0; background: var(--pd-surface); border-radius: 0 0 var(--bulma-radius) var(--bulma-radius); }
.pd-balance { display: flex; align-items: center; gap: .75rem 1.5rem; flex-wrap: wrap; padding: .75rem 1rem; border-block-start: 1px solid var(--pd-rule); }
.pd-balance .fig { display: flex; flex-direction: column; }
.pd-balance .fig span { font-size: .7rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pd-muted); }
.pd-balance .fig b { font-family: var(--bulma-family-code); font-size: 1.05rem; font-variant-numeric: tabular-nums; }
.pd-state { padding: .3rem .7rem; border-radius: 1rem; font-weight: 600; font-size: .85rem; background: var(--pd-row-alt); color: var(--pd-muted); }
.pd-state.ok { background: var(--pd-ok-bg); color: var(--pd-ok); }
.pd-state.gap { background: var(--pd-gap-bg); color: var(--pd-gap); }
.pd-check-errors { list-style: none; margin: 0; padding: 0 1rem .75rem; }
.pd-draft { padding: 0 1rem .75rem; font-size: .85rem; }
.pd-draft > summary { cursor: pointer; min-height: 32px; color: var(--bulma-link); }
.pd-side-panel dl { display: grid; grid-template-columns: auto 1fr; gap: .35rem .75rem; font-size: .85rem; }
.pd-side-panel dt { color: var(--pd-muted); }
.pd-side-panel dd { margin: 0; text-align: end; overflow-wrap: anywhere; }

/* Facture d'achat reçue hors plateforme (ADR-004 D9, maquette « Facture reçue ») */
.pd-origin { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; font-size: .85rem; padding: .6rem 1rem; background: var(--pd-row-alt); border-bottom: 1px solid var(--pd-rule); }
.pd-attachment-preview { display: block; width: 100%; min-height: 28rem; border: 1px solid var(--pd-rule); border-radius: .25rem; background: var(--pd-row-alt); }
img.pd-attachment-preview { min-height: 0; height: auto; object-fit: contain; }

/* Comptes et tiers, lettrage (ADR-005 D9) */
.pd-acc-head { display: flex; gap: 1rem; flex-wrap: wrap; align-items: flex-end; }
.pd-acc-head .field { margin: 0; }
.pd-acc-pick { flex: 1 1 18rem; }
.pd-date-input { width: 8.5rem; }
.pd-sum { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 2fr); gap: 1rem; margin-block-end: 1rem; }
.pd-sum .pd-tile .val { font-size: 1.15rem; }
.pd-aging { display: flex; height: .7rem; border-radius: 1rem; overflow: hidden; background: var(--pd-row-alt); margin: .35rem 0 .5rem; }
.pd-aging span { display: block; height: 100%; }
.pd-legend { display: flex; flex-wrap: wrap; gap: .3rem .9rem; font-size: .76rem; color: var(--pd-muted); list-style: none; margin: 0; padding: 0; }
.pd-legend i { display: inline-block; width: .6rem; height: .6rem; border-radius: 2px; margin-inline-end: .3rem; }
.pd-let { font-family: var(--bulma-family-code); font-size: .75rem; font-weight: 600; color: var(--pd-muted); }
.pd-due-late { color: var(--pd-gap); font-weight: 600; }
.pd-show-s { display: none; }
.pd-table tr.pd-row-late td:first-child { box-shadow: inset 3px 0 0 var(--pd-gap); }
.pd-match-box { width: 1.25rem; height: 1.25rem; }
/* Retours et paiements rejetés (D-INV3-012) : règlement rejeté barré, son
   état écrit en toutes lettres à côté (jamais la seule couleur) ; nature du
   bon (livraison ou retour) sous son numéro. */
.pd-payments { list-style: none; margin: 0; padding: 0; font-size: .85rem; }
.pd-payment { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .25rem .75rem;
  padding-block: .4rem; border-block-end: 1px solid var(--pd-rule); }
.pd-payment:last-child { border-block-end: 0; }
.pd-payment-label { flex: 1 1 12rem; }
.pd-payment.is-rejected s { color: var(--pd-muted); }
.pd-rejection { flex-basis: 100%; margin: 0; color: var(--pd-gap); font-weight: 600; }
.pd-table td.pd-struck { text-decoration: line-through; color: var(--pd-muted); }
.pd-table tr.pd-row-rejected td:first-child { box-shadow: inset 3px 0 0 var(--pd-gap); }
.pd-ti-kind { color: var(--pd-muted); font-family: var(--bulma-family-primary); }
.pd-ti-kind.is-return { color: var(--pd-gap); font-weight: 600; }
.pd-ti-buttons { margin: 0; }

/* Devis et factures (maquette « Édition », « Aperçu ») */
.pd-inv-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .75rem 1rem; }
.pd-inv-grid .field { margin: 0; }
.pd-inv-grid .span2 { grid-column: span 2; }
/* Saisie express d'un particulier depuis la facture (ADR-004 D9). */
.pd-express summary { cursor: pointer; color: var(--pd-muted); }
.pd-express-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: .5rem .75rem; }
.pd-express-grid .field { margin: 0; }
/* Adresse de livraison d'un document (D-R5-004) : choix, puis autre adresse. */
.pd-delivery { border: 0; padding: 0; margin: 0; min-inline-size: 0; }
.pd-delivery legend { padding: 0; margin-block-end: .5rem; }
.pd-delivery-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); gap: .5rem .75rem; }
.pd-delivery-grid .field { margin: 0; }
.pd-delivery-grid .span2 { grid-column: span 2; }
@media (max-width: 480px) { .pd-delivery-grid .span2 { grid-column: 1 / -1; } }
.pd-totals { display: grid; grid-template-columns: 1fr auto; gap: .3rem 1.5rem; font-size: .9rem; max-width: 24rem; margin-inline-start: auto; margin-block-start: .75rem; }
.pd-totals dt { color: var(--pd-muted); }
.pd-totals dd { margin: 0; text-align: end; font-family: var(--bulma-family-code); font-variant-numeric: tabular-nums; }
.pd-totals .grand { font-weight: 700; color: var(--pd-ink); font-size: 1.05rem; border-block-start: 1px solid var(--pd-rule); padding-block-start: .35rem; }
.pd-status { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; padding: .6rem 1rem; border-block-end: 1px solid var(--pd-rule); background: var(--pd-row-alt); font-size: .85rem; }
/* Panneau d'une extension sur la fiche d'un document (Extensions.document_links) :
   cibles de 44 px, propriétés logiques, couleurs du thème (clair et sombre). */
.pd-ext-panel header { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.pd-ext-panel .pd-ext { color: var(--pd-muted); }
.pd-ext-links { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .4rem; }
.pd-ext-links .button { inline-size: 100%; justify-content: flex-start; white-space: normal; block-size: auto; }
.pd-ext-files a { display: flex; align-items: center; gap: .5rem; min-block-size: 44px; padding-inline: .25rem; overflow-wrap: anywhere; }
.pd-ext-files a .pd-icon { flex: none; }
.pd-ext-subtitle { font-size: .75rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pd-muted); margin-block: .75rem .35rem; }
.pd-ext-subtitle:first-child { margin-block-start: 0; }
.pd-mentions { font-size: .8rem; color: var(--pd-muted); display: grid; gap: .3rem; list-style: none; margin: 0; padding: 0; }
.pd-mentions li { padding-inline-start: 1.1rem; position: relative; }
.pd-mentions li::before { content: "✓"; position: absolute; inset-inline-start: 0; color: var(--pd-ok); }
.pd-deposit-form .input { max-width: 7rem; }
.pd-paper-wrap { background: var(--pd-ground); padding: 1rem 0; }
.pd-paper { background: #fff; color: #1b2a30; width: 100%; max-width: 46rem; margin: 0 auto; padding: 2rem; border-radius: .25rem; font-size: .85rem;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .25); }
.pd-paper h3 { font-size: 1.3rem; font-weight: 700; margin-block-end: .2rem; }
.pd-paper table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
.pd-paper th, .pd-paper td { border-block-end: 1px solid #dce3e4; padding: .3rem .25rem; text-align: start; }
.pd-paper .r { text-align: end; font-family: var(--bulma-family-code); white-space: nowrap; }
.pd-paper .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin: 0 0 1rem; }
.pd-paper .pd-dl dt { color: #445; }
.pd-paper .pd-totals dt, .pd-paper .pd-totals .grand { color: #1b2a30; }
.pd-paper footer { border-block-start: 1px solid #1b2a30; margin-block-start: 1.25rem; padding-block-start: .6rem; font-size: .75rem; color: #334; display: grid; gap: .25rem; }
.pd-paper .draft { color: #a32d2d; font-weight: 700; letter-spacing: .08em; }
.pd-paper-heading td { font-weight: 600; }

@media (max-width: 1100px) {
  .pd-sum { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .pd-sum .pd-aging-tile { grid-column: 1 / -1; }
  .pd-entry-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .pd-entry-grid .pd-wide { grid-column: 1 / -1; }
}

/* Tablette : menu latéral repliable (avec JavaScript seulement : sans lui,
   le bouton ne ferait rien et le menu reste affiché) */
@media (max-width: 1279.98px) {
  .pd-js .pd-burger { display: inline-flex; }
  .pd-app.is-menu-collapsed { grid-template-columns: minmax(0, 1fr); }
  .pd-app.is-menu-collapsed .pd-side { display: none; }
  .pd-grid2 { grid-template-columns: minmax(0, 1fr); }
}

/* Téléphone : barre non figée sur trois lignes, menu fermé par défaut avec
   JavaScript ; sans lui, menu affiché sous la barre supérieure (D-UI-005) */
@media (max-width: 767.98px) {
  .pd-app, .pd-app.is-menu-collapsed { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto 1fr; }
  .pd-js .pd-side, .pd-js .pd-app.is-menu-collapsed .pd-side { display: none; }
  .pd-js .pd-app.is-menu-open .pd-side { display: block; }
  .pd-main { padding: 1rem 1rem 3rem; }
  .pd-top { position: static; gap: .5rem .75rem; }
  .pd-brand { flex: 1 1 auto; }
  .pd-brand small, .pd-dossier span, .pd-user-name { display: none; }
  .pd-dossier { border-inline-start: 0; padding-inline-start: 0; order: 5; flex: 1 1 auto; }
  .pd-period { order: 6; }
  .pd-grow { order: 7; flex-basis: 100%; }
  .pd-hide-s { display: none; }
  .pd-show-s { display: table-cell; }
  /* Boutons d'une ligne de liste : cibles tactiles de 44 px au téléphone,
     libellé masqué (le nom accessible reste, aria-label). */
  .pd-row-button { min-height: 44px; min-width: 44px; }
  .pd-row-button .pd-icon { margin-inline-end: 0; }
  .pd-row-button > span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  /* Listes au téléphone : le tableau tient dans 375 px sans que la
     dernière colonne (« Actions ») soit coupée — marges de cellule
     réduites, en-têtes sans interlettrage, chiffres et codes un peu plus
     petits, libellés de pied
     (totaux par nature) repliés sur plusieurs lignes, cadenas d'une ligne
     intangible masqué (le texte pour les lecteurs d'écran reste, l'état de
     la période est dans l'en-tête du groupe). */
  .pd-table.is-narrow td, .pd-table.is-narrow th { padding-inline: .3rem; }
  .pd-table th { letter-spacing: 0; }
  /* En-tête d'une colonne de montants (« Valeur d'origine ») replié : la
     colonne garde la largeur de ses montants (D-LIB2-006). */
  .pd-table thead th.amount { white-space: normal; }
  .pd-table td.pd-mono, .pd-table td.amount { font-size: .8rem; }
  .pd-table tfoot td.pd-mono { white-space: normal; font-family: inherit; hyphens: auto; }
  .pd-table tr.pd-row-locked td:first-child .pd-icon { display: none; }
  .pd-sum { grid-template-columns: minmax(0, 1fr); }
  .pd-tiles { grid-template-columns: minmax(0, 1fr); }
  .pd-inv-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .pd-inv-grid .span2 { grid-column: 1 / -1; }
  .pd-paper { padding: 1rem; }
  .pd-paper .cols { grid-template-columns: minmax(0, 1fr); }
  .pd-levels { grid-template-columns: minmax(0, 1fr); }
  .pd-totp-grid { grid-template-columns: minmax(0, 1fr); }
  .pd-qr-box { max-width: 13rem; }
  .pd-code-list { grid-template-columns: minmax(0, 1fr); }
  .pd-auth { padding-block-start: 1rem; }
  .pd-auth-card { padding: 1rem; }
}

@media print {
  .pd-top, .pd-side, .pd-skip, .pd-auth-top, .buttons, .notification, .pd-crumb { display: none !important; }
  .pd-paper { box-shadow: none; max-width: none; padding: 0; }
  .pd-paper-wrap { background: none; padding: 0; }
  .pd-app { display: block; }
  .pd-panel, .pd-auth-card { border: 0; }
}

/* Éditions (lot 3) : critères compacts, sous-totaux et totaux, rubriques
   du bilan et du compte de résultat par niveau. */
.pd-report-grid { grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); }
.pd-table tr.pd-row-subtotal td { font-weight: 600; background: var(--pd-row-alt); }
.pd-table tr.pd-row-total td, .pd-table tfoot td { font-weight: 700; border-top: 2px solid var(--pd-rule); }
.pd-table tr.pd-row-heading td { font-weight: 600; text-transform: uppercase; letter-spacing: .04em; font-size: .8rem; color: var(--pd-muted); }
.pd-table tr.pd-row-section td { font-weight: 600; background: var(--pd-row-alt); }
.pd-table td.pd-indent-1 { padding-inline-start: 1.5rem; }
.pd-table td.pd-indent-2 { padding-inline-start: 2.5rem; }
.pd-table td.pd-indent-3 { padding-inline-start: 3.5rem; }

/* Mode simplifié de la micro-entreprise (ADR-007 D3) : saisie en quelques
   champs sur une colonne au téléphone, montant en grand ; jauges des seuils. */
.pd-quick { max-width: 44rem; }
.pd-quick-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem 1rem; }
.pd-quick-grid .field { margin: 0; }
.pd-quick-grid .pd-wide { grid-column: 1 / -1; }
.pd-quick-line-grid { grid-template-columns: minmax(0, 3fr) minmax(0, 1fr) minmax(0, 1.5fr); }
.pd-quick-line-grid .pd-wide { grid-column: auto; }
.pd-quick-line { margin-block-start: .75rem; }
.pd-quick #pd-f-amount { font-size: 1.5rem; font-weight: 600; min-height: 3rem; }
.pd-quick .input, .pd-quick select { min-height: 44px; }
.pd-more { margin-block: 1rem; }
.pd-more > summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; font-weight: 600; color: var(--bulma-link); }
.pd-more > summary:focus-visible { outline: 3px solid var(--pd-focus); outline-offset: 2px; }
.pd-gauges { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1rem; }
.pd-gauge-head { display: flex; justify-content: space-between; gap: 1rem; font-size: .9rem; }
.pd-gauge { height: .6rem; border-radius: .3rem; background: var(--pd-rule); overflow: hidden; margin-block: .3rem; }
.pd-gauge-bar { display: block; height: 100%; background: var(--pd-ok); }
.pd-gauge-warn { background: var(--pd-warn); }
.pd-gauge-gap { background: var(--pd-gap); }
.pd-gauge-neutral { background: var(--bulma-primary); }
.pd-break { overflow-wrap: anywhere; }
.pd-tax-ready { border-inline-start: 4px solid var(--pd-ok); }
.pd-tax-blocked { border-inline-start: 4px solid var(--pd-gap); }

@media (max-width: 767.98px) {
  .pd-quick-grid, .pd-quick-line-grid { grid-template-columns: minmax(0, 1fr); }
  .pd-quick-actions .button { width: 100%; }
  .pd-simple .pd-actions { width: 100%; }
  .pd-simple .pd-actions .button { flex: 1 1 100%; }
}
