/* ============================================================
   HARD DÉCO — Lot 9K-3
   Formulaires et sélecteurs avancés des pages dédiées.
   Couche visuelle uniquement : aucune règle métier n'est modifiée.
   ============================================================ */

:root {
  --hd-form-control-h: 42px;
  --hd-form-control-radius: 9px;
  --hd-form-section-radius: 11px;
  --hd-form-label-size: 11px;
  --hd-form-control-size: 12px;
  --hd-form-focus-ring: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent);
  --hd-form-soft-bg: color-mix(in srgb, var(--bg) 62%, var(--panel));
}

/* Rythme commun ------------------------------------------------ */
:is(
  .project-page-form,
  .quote-page-form,
  .invoice-page-form,
  #clientPageForm,
  #artistPageForm,
  .task-form,
  .task-filter-grid,
  .invoice-financial-form,
  .invoice-mail-form
) {
  box-sizing: border-box;
}

:is(
  .project-page-field,
  .quote-page-field,
  .invoice-page-field,
  .project-technical-grid label,
  .project-technical-surface-grid label,
  .client-editor-block label,
  .artist-editor-block label,
  .task-field,
  .invoice-financial-form > label,
  .invoice-mail-field,
  .quote-line-editor-field,
  .invoice-line-field
) {
  min-width: 0;
  gap: 6px;
}

:is(
  .project-page-field,
  .quote-page-field,
  .invoice-page-field,
  .project-technical-grid label,
  .project-technical-surface-grid label,
  .client-editor-block label,
  .artist-editor-block label,
  .task-field,
  .invoice-financial-form > label,
  .invoice-mail-field,
  .quote-line-editor-field,
  .invoice-line-field
) > :is(span:first-child, legend) {
  color: var(--hd-color-text-muted, var(--muted));
  font-size: var(--hd-form-label-size);
  font-weight: 680;
  line-height: 1.3;
}

/* Champs natifs ------------------------------------------------ */
:is(
  .project-page,
  .quote-page,
  .invoice-page,
  .client-page,
  .artist-page,
  .planning-page,
  .charges-page
) :is(
  .project-page-field,
  .project-technical-grid,
  .project-technical-surface-grid,
  .project-team-page-list,
  .quote-page-field,
  .quote-line-editor-field,
  .invoice-page-field,
  .invoice-line-field,
  .invoice-financial-form,
  .invoice-mail-form,
  .client-editor-block,
  .artist-editor-block,
  .task-field,
  .charges-period-select
) :is(input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]), select, textarea) {
  width: 100%;
  min-width: 0;
  min-height: var(--hd-form-control-h);
  padding: 9px 11px;
  box-sizing: border-box;
  border: 1px solid var(--hd-color-border, var(--border));
  border-radius: var(--hd-form-control-radius);
  outline: 0;
  background: var(--hd-color-surface, var(--panel));
  color: var(--hd-color-text, var(--text));
  font: inherit;
  font-size: var(--hd-form-control-size);
  line-height: 1.35;
  transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease;
}

:is(
  .project-page,
  .quote-page,
  .invoice-page,
  .client-page,
  .artist-page,
  .planning-page,
  .charges-page
) :is(
  .project-page-field,
  .project-technical-grid,
  .project-technical-surface-grid,
  .project-team-page-list,
  .quote-page-field,
  .quote-line-editor-field,
  .invoice-page-field,
  .invoice-line-field,
  .invoice-financial-form,
  .invoice-mail-form,
  .client-editor-block,
  .artist-editor-block,
  .task-field,
  .charges-period-select
) :is(input, select, textarea):hover:not(:disabled):not([readonly]) {
  border-color: color-mix(in srgb, var(--accent) 28%, var(--hd-color-border, var(--border)));
}

:is(
  .project-page,
  .quote-page,
  .invoice-page,
  .client-page,
  .artist-page,
  .planning-page,
  .charges-page
) :is(
  .project-page-field,
  .project-technical-grid,
  .project-technical-surface-grid,
  .project-team-page-list,
  .quote-page-field,
  .quote-line-editor-field,
  .invoice-page-field,
  .invoice-line-field,
  .invoice-financial-form,
  .invoice-mail-form,
  .client-editor-block,
  .artist-editor-block,
  .task-field,
  .charges-period-select
) :is(input, select, textarea):focus {
  border-color: color-mix(in srgb, var(--accent) 72%, var(--hd-color-border, var(--border)));
  outline: 0;
  box-shadow: var(--hd-form-focus-ring);
  background: var(--hd-color-surface, var(--panel));
}

:is(.project-page, .quote-page, .invoice-page, .client-page, .artist-page, .planning-page)
  :is(input, textarea)::placeholder {
  color: color-mix(in srgb, var(--hd-color-text-muted, var(--muted)) 72%, transparent);
  opacity: 1;
}

:is(.project-page, .quote-page, .invoice-page, .client-page, .artist-page, .planning-page)
  :is(input, select, textarea):is(:disabled, [readonly]) {
  border-color: color-mix(in srgb, var(--hd-color-border, var(--border)) 78%, transparent);
  background: var(--hd-form-soft-bg);
  color: var(--hd-color-text-muted, var(--muted));
  cursor: not-allowed;
  opacity: 1;
}

:is(.project-page, .quote-page, .invoice-page, .client-page, .artist-page, .planning-page)
  [aria-invalid="true"] {
  border-color: var(--hd-color-danger, var(--danger, #dc2626)) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--hd-color-danger, var(--danger, #dc2626)) 11%, transparent) !important;
}

:is(.project-page, .quote-page, .invoice-page, .client-page, .artist-page, .planning-page) textarea {
  min-height: 92px;
  resize: vertical;
}

:is(.project-page, .quote-page, .invoice-page, .client-page, .artist-page, .planning-page) select {
  cursor: pointer;
}

/* Blocs et groupes de formulaire ------------------------------ */
:is(.project-page-editor, .quote-page-editor, .invoice-page-editor, .client-page-editor, .artist-page-editor) {
  border-color: color-mix(in srgb, var(--accent) 27%, var(--hd-color-border, var(--border)));
}

:is(.project-page-editor-head, .quote-page-editor-head, .invoice-page-editor-head, .client-editor-header, .artist-editor-header) {
  min-height: 64px;
  padding: 14px 16px;
  background: color-mix(in srgb, var(--accent) 4%, var(--hd-color-surface, var(--panel)));
}

:is(.project-page-form, .quote-page-form, .invoice-page-form, #clientPageForm, #artistPageForm) {
  gap: 14px;
  padding: 16px;
}

:is(.client-editor-block, .artist-editor-block, .project-technical-surface) {
  border-radius: var(--hd-form-section-radius);
  background: var(--hd-color-surface, var(--panel));
  box-shadow: 0 1px 2px rgba(15, 23, 42, .025);
}

:is(.client-editor-block, .artist-editor-block) {
  gap: 13px;
  padding: 14px;
}

:is(.client-editor-block, .artist-editor-block) > header {
  min-height: 28px;
  padding-bottom: 9px;
  border-bottom: 1px solid color-mix(in srgb, var(--hd-color-border, var(--border)) 82%, transparent);
}

:is(.client-editor-block, .artist-editor-block) > header h3 {
  font-size: 12px;
  font-weight: 720;
}

/* Dates et contrôles composés --------------------------------- */
:is(.project-date-control, .quote-date-control, .invoice-date-control) {
  position: relative;
  display: block;
}

:is(.project-date-control, .quote-date-control, .invoice-date-control) > .lucide {
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 12px;
  width: 15px;
  height: 15px;
  color: var(--accent);
  transform: translateY(-50%);
  pointer-events: none;
}

:is(.project-page-field, .quote-page-field, .invoice-page-field)
  :is(.project-date-control, .quote-date-control, .invoice-date-control) input {
  padding-left: 38px;
  cursor: pointer;
}

.quote-duration-control {
  grid-template-columns: minmax(0, 1fr) minmax(112px, .42fr);
  gap: 8px;
}

/* Sélecteurs Client / Artiste / Projet ------------------------- */
:is(.project-client-picker, .quote-entity-picker, .invoice-entity-picker) {
  position: relative;
}

:is(.project-client-picker, .quote-entity-picker, .invoice-entity-picker) > .lucide,
.quote-entity-search-icon {
  top: 50%;
  left: 12px;
  width: 15px;
  height: 15px;
  color: var(--accent);
  transform: translateY(-50%);
}

.project-client-picker #projectEditClientSearch,
.quote-page-field .quote-entity-search,
.invoice-entity-picker input[type="search"] {
  padding-left: 38px !important;
  padding-right: 42px !important;
}

:is(.project-client-clear, .quote-entity-clear, .invoice-entity-clear) {
  top: 6px;
  right: 6px;
  width: 30px;
  height: 30px;
  border-radius: 8px;
}

:is(.project-client-clear, .quote-entity-clear, .invoice-entity-clear):focus-visible {
  outline: 2px solid color-mix(in srgb, var(--accent) 55%, transparent);
  outline-offset: 1px;
}

:is(.project-client-suggestions, .quote-entity-suggestions, .invoice-entity-suggestions) {
  z-index: 90;
  top: calc(100% + 7px);
  max-height: min(320px, 42vh);
  padding: 6px;
  border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--hd-color-border, var(--border)));
  border-radius: 11px;
  background: var(--hd-color-surface, var(--panel));
  box-shadow: 0 18px 42px rgba(15, 23, 42, .16);
  overscroll-behavior: contain;
  scrollbar-width: thin;
  scrollbar-color: color-mix(in srgb, var(--accent) 45%, transparent) transparent;
}

:is(.project-client-suggestion, .quote-entity-suggestion, .invoice-entity-suggestions > button) {
  min-height: 50px;
  gap: 10px;
  padding: 8px 9px;
  border-radius: 8px;
}

:is(.project-client-suggestion, .quote-entity-suggestion, .invoice-entity-suggestions > button):is(:hover, .is-active, :focus-visible) {
  outline: 0;
  background: color-mix(in srgb, var(--accent) 8%, var(--hd-color-surface, var(--panel)));
}

:is(.project-client-suggestion-copy, .quote-entity-suggestion-copy, .invoice-entity-suggestions > button > span:last-child) strong {
  font-size: 11px;
  font-weight: 700;
}

:is(.project-client-suggestion-copy, .quote-entity-suggestion-copy, .invoice-entity-suggestions > button > span:last-child) small {
  color: var(--hd-color-text-muted, var(--muted));
  font-size: 9px;
}

:is(.project-client-summary, .quote-entity-summary) {
  min-height: 54px;
  padding: 7px 8px;
  border-color: color-mix(in srgb, var(--accent) 30%, var(--hd-color-border, var(--border)));
  border-radius: 10px;
  background: color-mix(in srgb, var(--accent) 5%, var(--hd-color-surface, var(--panel)));
}

/* Choix visuels : radios, cases et commutateurs --------------- */
:is(
  .project-page,
  .quote-page,
  .invoice-page,
  .client-page,
  .artist-page,
  .planning-page
) input:is([type="checkbox"], [type="radio"]) {
  accent-color: var(--accent);
}

:is(.quote-payment-methods span, .invoice-payment-methods label span, .client-type-choice span) {
  min-height: 38px;
  border-radius: 9px;
  background: var(--hd-form-soft-bg);
  font-size: 10px;
  font-weight: 700;
}

:is(.quote-payment-methods, .invoice-payment-methods, .client-type-choice)
  input:checked + span {
  border-color: color-mix(in srgb, var(--accent) 52%, var(--hd-color-border, var(--border)));
  background: color-mix(in srgb, var(--accent) 9%, var(--hd-color-surface, var(--panel)));
  color: var(--accent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 8%, transparent);
}

:is(.quote-payment-methods, .invoice-payment-methods, .client-type-choice)
  input:focus-visible + span {
  outline: 2px solid color-mix(in srgb, var(--accent) 70%, transparent);
  outline-offset: 2px;
}

:is(.artist-editor-switches, .quote-page-checks) label,
.client-contact-alt {
  min-height: 40px;
  padding: 8px 11px;
  border: 1px solid var(--hd-color-border, var(--border));
  border-radius: 9px;
  background: var(--hd-form-soft-bg);
}

:is(.artist-editor-switches, .quote-page-checks) input,
.client-contact-alt input,
.project-surface-visibility input,
.invoice-credit-refunded input {
  width: 17px;
  height: 17px;
  flex: 0 0 auto;
}

/* Palette projet ---------------------------------------------- */
.project-color-palette {
  min-height: var(--hd-form-control-h);
  gap: 10px;
  padding: 6px 3px;
}

.project-color-dot {
  width: 28px;
  height: 28px;
  transition: transform .15s ease, box-shadow .15s ease;
}

.project-color-dot:hover {
  transform: translateY(-1px) scale(1.06);
}

.project-color-dot[aria-checked="true"] {
  transform: none;
  box-shadow: 0 0 0 2px var(--hd-color-surface, var(--panel)), 0 0 0 4px var(--hd-color-text, var(--text));
}

/* Sections avancées et formulaires secondaires ---------------- */
:is(.quote-page-advanced, .task-advanced) {
  border-radius: var(--hd-form-section-radius);
  background: var(--hd-form-soft-bg);
}

:is(.quote-page-advanced, .task-advanced) > summary {
  min-height: 46px;
  transition: background-color .15s ease;
}

:is(.quote-page-advanced, .task-advanced) > summary:hover {
  background: color-mix(in srgb, var(--accent) 4%, transparent);
}

.planning-page .task-form {
  gap: 12px;
  padding: 14px;
  border-color: color-mix(in srgb, var(--accent) 24%, var(--hd-color-border, var(--border)));
  border-radius: var(--hd-form-section-radius);
  background: color-mix(in srgb, var(--accent) 3%, var(--hd-color-surface, var(--panel)));
}

.planning-page .task-filter-grid {
  gap: 11px;
  padding: 4px 12px 12px;
}

.charges-period-select select {
  min-width: 180px;
  min-height: var(--hd-form-control-h);
  font-size: 11px;
}

/* Lignes de devis et facture ---------------------------------- */
:is(.quote-line-editor-row, .invoice-line-row) {
  gap: 9px;
  padding: 11px;
  border-radius: 10px;
  background: var(--hd-color-surface, var(--panel));
  box-shadow: 0 1px 2px rgba(15, 23, 42, .025);
}

:is(.quote-line-editor-field, .invoice-line-field)
  :is(input, select, textarea) {
  min-height: 38px !important;
  padding: 8px 9px !important;
 
}

:is(.quote-line-editor-actions, .invoice-line-actions) button:focus-visible {
  outline: 2px solid color-mix(in srgb, var(--accent) 60%, transparent);
  outline-offset: 1px;
}

.invoice-financial-form {
  gap: 12px;
  padding: 14px;
  border-radius: var(--hd-form-section-radius);
  background: color-mix(in srgb, var(--accent) 4%, var(--hd-color-surface, var(--panel)));
}

.invoice-mail-fieldset,
.invoice-mail-templates {
  border-radius: var(--hd-form-section-radius);
  background: var(--hd-form-soft-bg);
}

/* Validation et actions --------------------------------------- */
:is(
  .project-page-form-error,
  .quote-page-form-error,
  .invoice-page-form-error,
  .client-editor-error,
  .artist-editor-error
) {
  min-height: 40px;
  padding: 10px 12px;
  box-sizing: border-box;
  border: 1px solid color-mix(in srgb, var(--hd-color-danger, var(--danger, #dc2626)) 28%, var(--hd-color-border, var(--border)));
  border-radius: 9px;
  background: color-mix(in srgb, var(--hd-color-danger, var(--danger, #dc2626)) 7%, var(--hd-color-surface, var(--panel)));
  color: var(--hd-color-danger, var(--danger, #b91c1c));
  font-size: 11px;
  line-height: 1.45;
}

:is(
  .project-page-form-actions,
  .quote-page-form-actions,
  .invoice-page-form-actions,
  .client-editor-actions,
  .artist-editor-actions,
  .project-technical-actions,
  .project-team-page-actions,
  .task-form-actions,
  .invoice-financial-form-actions,
  .invoice-mail-actions
) {
  gap: 8px;
  padding-top: 4px;
}

/* Responsive -------------------------------------------------- */
@media (max-width: 900px) {
  :is(.client-editor-grid, .client-editor-grid-3, .artist-editor-grid, .artist-editor-grid-3) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  :is(.quote-line-editor-row, .invoice-line-row) {
    box-shadow: none;
  }
}

@media (max-width: 720px) {
  :root {
    --hd-form-control-h: 44px;
    --hd-form-control-size: 13px;
  }

  :is(.project-page-form, .quote-page-form, .invoice-page-form, #clientPageForm, #artistPageForm) {
    grid-template-columns: 1fr;
    padding: 13px;
  }

  :is(
    .project-page-field-wide,
    .quote-page-field-wide,
    .invoice-page-field-wide,
    .client-editor-wide,
    .artist-editor-wide
  ) {
    grid-column: 1;
  }

  :is(.client-editor-grid, .client-editor-grid-3, .artist-editor-grid, .artist-editor-grid-3) {
    grid-template-columns: 1fr;
  }

  :is(.project-page-editor-head, .quote-page-editor-head, .invoice-page-editor-head, .client-editor-header, .artist-editor-header) {
    align-items: flex-start;
    padding: 13px;
  }

  .quote-duration-control {
    grid-template-columns: minmax(0, 1fr) 112px;
  }

  :is(.project-client-suggestions, .quote-entity-suggestions, .invoice-entity-suggestions) {
    max-height: min(280px, 40vh);
  }

  :is(
    .project-page-form-actions,
    .quote-page-form-actions,
    .invoice-page-form-actions,
    .client-editor-actions,
    .artist-editor-actions,
    .task-form-actions,
    .invoice-financial-form-actions
  ) > button {
    flex: 1;
    justify-content: center;
  }

  .charges-period-select,
  .charges-period-select select {
    width: 100%;
  }
}

@media (max-width: 480px) {
  :is(.client-editor-block, .artist-editor-block) {
    padding: 12px;
  }

  .quote-duration-control {
    grid-template-columns: 1fr;
  }

  :is(.quote-payment-methods, .invoice-payment-methods > div, .client-type-choice) {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  :is(.quote-payment-methods span, .invoice-payment-methods label span, .client-type-choice span) {
    width: 100%;
    justify-content: center;
    box-sizing: border-box;
  }
}

@media (prefers-reduced-motion: reduce) {
  :is(
    .project-page,
    .quote-page,
    .invoice-page,
    .client-page,
    .artist-page,
    .planning-page,
    .charges-page
  ) :is(input, select, textarea, summary, .project-color-dot) {
    scroll-behavior: auto;
    transition: none !important;
  }
}
