/*
 * EC / 会員機能向け共通フォーム基盤。
 * 既存ページへ影響させないため、すべて .ec-form 配下に限定する。
 * 新規フォームはネイティブ要素に ec-control 等のクラスを付けて利用する。
 */

.ec-form {
  --ec-form-color: #1c1c1c;
  --ec-form-muted: #666;
  --ec-form-border: #aaa;
  --ec-form-border-soft: #d8d8d8;
  --ec-form-surface: #fff;
  --ec-form-surface-subtle: #f7f7f5;
  --ec-form-focus: #111;
  --ec-form-danger: #b42318;
  --ec-form-danger-bg: #fff7f6;
  --ec-form-success: #507450;
  --ec-form-success-bg: #f5faf5;
  --ec-form-control-height: 52px;
  --ec-form-control-height-compact: 48px;
  box-sizing: border-box;
  width: 100%;
  color: var(--ec-form-color);
  font-size: 15px;
  line-height: 1.65;
}

.ec-form *,
.ec-form *::before,
.ec-form *::after {
  box-sizing: border-box;
}

.ec-form .ec-form__stack {
  display: flex;
  flex-direction: column;
  gap: 24px;
}

.ec-form .ec-form__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px 20px;
}

.ec-form .ec-form__grid--single {
  grid-template-columns: minmax(0, 1fr);
}

.ec-form .ec-field {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 8px;
}

.ec-form .ec-field--full {
  grid-column: 1 / -1;
}

.ec-form .ec-field__label,
.ec-form .ec-field__legend {
  display: block;
  margin: 0;
  color: #333;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.5;
}

.ec-form .ec-field__required,
.ec-form .ec-field__optional {
  margin-left: 6px;
  font-size: 13px;
  font-weight: 600;
}

.ec-form .ec-field__required {
  color: var(--ec-form-danger);
}

.ec-form .ec-field__optional {
  color: var(--ec-form-muted);
}

.ec-form .ec-field__help,
.ec-form .ec-field__error,
.ec-form .ec-field__success,
.ec-form .ec-field__counter {
  margin: 0;
  font-size: 13px;
  line-height: 1.6;
  overflow-wrap: anywhere;
}

.ec-form .ec-field__help,
.ec-form .ec-field__counter {
  color: var(--ec-form-muted);
}

.ec-form .ec-field__error {
  color: var(--ec-form-danger);
}

.ec-form .ec-field__success {
  color: var(--ec-form-success);
}

.ec-form .ec-field__meta {
  display: flex;
  min-width: 0;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px 16px;
}

.ec-form .ec-field__meta > :first-child {
  min-width: 0;
}

.ec-form .ec-field__counter {
  flex: 0 0 auto;
  margin-left: auto;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* 単一行入力。number/date 等のブラウザ固有操作は残す。 */
.ec-form input.ec-control:not([type]),
.ec-form input.ec-control[type="text"],
.ec-form input.ec-control[type="email"],
.ec-form input.ec-control[type="password"],
.ec-form input.ec-control[type="tel"],
.ec-form input.ec-control[type="url"],
.ec-form input.ec-control[type="search"],
.ec-form input.ec-control[type="number"],
.ec-form input.ec-control[type="date"],
.ec-form input.ec-control[type="time"],
.ec-form input.ec-control[type="datetime-local"],
.ec-form input.ec-control[type="month"],
.ec-form input.ec-control[type="week"],
.ec-form select.ec-control,
.ec-form textarea.ec-control {
  display: block;
  width: 100%;
  min-width: 0;
  min-height: var(--ec-form-control-height);
  margin: 0;
  padding: 12px 14px;
  border: 1px solid var(--ec-form-border);
  border-radius: 0;
  background-color: var(--ec-form-surface);
  color: var(--ec-form-color);
  font: inherit;
  font-size: 16px;
  line-height: 1.5;
  box-shadow: none;
  transition: border-color .15s ease, background-color .15s ease, color .15s ease;
}

.ec-form .ec-control--compact {
  min-height: var(--ec-form-control-height-compact);
  padding-top: 10px;
  padding-bottom: 10px;
}

.ec-form textarea.ec-control {
  min-height: 144px;
  resize: vertical;
}

.ec-form select.ec-control {
  padding-right: 40px;
}

.ec-form select.ec-control[multiple],
.ec-form select.ec-control[size]:not([size="1"]) {
  min-height: 144px;
  padding: 8px 10px;
}

.ec-form select.ec-control option,
.ec-form select.ec-control optgroup {
  font: inherit;
}

.ec-form .ec-control::placeholder {
  color: #6b6b6b;
  opacity: 1;
}

.ec-form .ec-control:hover:not(:disabled):not([readonly]) {
  border-color: #666;
}

.ec-form .ec-control:focus {
  border-color: var(--ec-form-focus);
}

.ec-form .ec-control:focus-visible,
.ec-form .ec-choice__input:focus-visible,
.ec-form .ec-form__button:focus-visible {
  outline: 2px solid var(--ec-form-focus);
  outline-offset: 3px;
}

.ec-form :is(input, select, textarea).ec-control:disabled {
  border-color: #ccc;
  background-color: #eee;
  color: #666;
  cursor: not-allowed;
  opacity: 1;
}

.ec-form :is(input, textarea).ec-control[readonly] {
  border-color: #ccc;
  background-color: var(--ec-form-surface-subtle);
  color: #555;
  cursor: default;
}

.ec-form :is(input, select, textarea).ec-control[aria-invalid="true"],
.ec-form .ec-field--error :is(input, select, textarea).ec-control {
  border-color: var(--ec-form-danger);
  background-color: var(--ec-form-danger-bg);
}

.ec-form :is(input, select, textarea).ec-control[aria-invalid="true"]:focus-visible,
.ec-form .ec-field--error :is(input, select, textarea).ec-control:focus-visible {
  outline-color: var(--ec-form-danger);
}

.ec-form .ec-field--success :is(input, select, textarea).ec-control {
  border-color: var(--ec-form-success);
  background-color: var(--ec-form-success-bg);
}

/* ブラウザ自動入力でも文字色とサイトの白黒基調を維持する。 */
.ec-form .ec-control:-webkit-autofill,
.ec-form .ec-control:-webkit-autofill:hover,
.ec-form .ec-control:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--ec-form-color);
  caret-color: var(--ec-form-color);
  box-shadow: inset 0 0 0 1000px #f4f4f2;
}

/* checkbox / radio はネイティブの操作性を維持する。 */
.ec-form .ec-choice-group {
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}

.ec-form .ec-choice-group__items {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 8px;
}

.ec-form .ec-choice-group__items--inline {
  flex-direction: row;
  flex-wrap: wrap;
  gap: 4px 24px;
}

.ec-form .ec-choice {
  display: inline-flex;
  width: fit-content;
  max-width: 100%;
  min-height: 44px;
  align-items: center;
  gap: 10px;
  color: #333;
  cursor: pointer;
  line-height: 1.5;
}

.ec-form .ec-choice__input {
  flex: 0 0 22px;
  width: 22px;
  height: 22px;
  margin: 0;
  accent-color: #111;
  cursor: pointer;
}

.ec-form .ec-choice__input:disabled {
  cursor: not-allowed;
  opacity: .55;
}

.ec-form .ec-choice__input:disabled + .ec-choice__text {
  color: #777;
}

/* file / range / color はネイティブUIを残しつつ外観だけ合わせる。 */
.ec-form input.ec-control[type="file"] {
  display: block;
  width: 100%;
  min-height: var(--ec-form-control-height);
  margin: 0;
  padding: 0;
  border: 1px solid var(--ec-form-border);
  border-radius: 0;
  background: var(--ec-form-surface);
  color: var(--ec-form-color);
  font: inherit;
  font-size: 15px;
}

.ec-form input.ec-control[type="file"]::file-selector-button {
  min-height: calc(var(--ec-form-control-height) - 2px);
  margin: 0 14px 0 0;
  padding: 10px 18px;
  border: 0;
  border-right: 1px solid var(--ec-form-border);
  background: #303030;
  color: #fff;
  font: inherit;
  cursor: pointer;
  transition: background-color .15s ease, color .15s ease;
}

.ec-form input.ec-control[type="file"]:hover:not(:disabled)::file-selector-button {
  background: #fff;
  color: #111;
}

.ec-form input.ec-control[type="range"] {
  width: 100%;
  min-height: 44px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  accent-color: #111;
}

.ec-form input.ec-control[type="color"] {
  width: 72px;
  min-height: var(--ec-form-control-height);
  margin: 0;
  padding: 4px;
  border: 1px solid var(--ec-form-border);
  border-radius: 0;
  background: #fff;
  cursor: pointer;
}

/* 接頭辞・単位・補助ボタン付き入力。各要素を接触させず意味を分離する。 */
.ec-form .ec-input-group {
  display: flex;
  min-width: 0;
  align-items: stretch;
  gap: 12px;
}

.ec-form .ec-input-group > :is(input, select, textarea).ec-control {
  width: auto;
  flex: 1 1 auto;
  min-width: 0;
}

.ec-form .ec-input-group__affix {
  display: inline-flex;
  min-height: var(--ec-form-control-height);
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  padding: 10px 14px;
  border: 1px solid var(--ec-form-border-soft);
  background: var(--ec-form-surface-subtle);
  color: #555;
  white-space: nowrap;
}

.ec-form .ec-form__actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 32px;
}

.ec-form .ec-form__actions--start {
  justify-content: flex-start;
}

.ec-form .ec-form__actions--center {
  justify-content: center;
}

.ec-form .ec-form__actions--end {
  justify-content: flex-end;
}

.ec-form .ec-form__button {
  box-sizing: border-box;
  display: inline-flex;
  min-width: 200px;
  min-height: var(--ec-form-control-height);
  align-items: center;
  justify-content: center;
  padding: 12px 24px;
  border: 1px solid #111;
  border-radius: 0;
  background: #fff;
  color: #111;
  font: inherit;
  font-size: 16px;
  line-height: 1.4;
  letter-spacing: .04em;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}

.ec-form .ec-form__button--primary {
  background: #111;
  color: #fff;
}

.ec-form .ec-form__button--primary:focus {
  color: #fff;
}

.ec-form .ec-form__button--danger {
  border-color: var(--ec-form-danger);
  background: var(--ec-form-danger);
  color: #fff;
}

.ec-form .ec-form__button:hover:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]),
.ec-form .ec-form__button--primary:hover:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]) {
  background: #303030;
  color: #fff;
}

.ec-form .ec-form__button--primary:hover:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]) {
  background: #fff;
  color: #111;
}

.ec-form .ec-form__button--danger:hover:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]) {
  background: #fff;
  color: var(--ec-form-danger);
}

.ec-form .ec-form__button:disabled,
.ec-form .ec-form__button[aria-disabled="true"],
.ec-form .ec-form__button[aria-busy="true"] {
  border-color: #aaa;
  background: #aaa;
  color: #fff;
  cursor: not-allowed;
  opacity: 1;
}

.ec-form .ec-form__status {
  min-width: 0;
  flex: 1 1 240px;
  margin: 12px 0 0;
  color: var(--ec-form-muted);
  font-size: 13px;
  line-height: 1.6;
  text-align: right;
}

.ec-form .ec-form__summary {
  margin: 0 0 24px;
  padding: 16px 20px;
  border: 1px solid var(--ec-form-danger);
  background: var(--ec-form-danger-bg);
  color: #8a1c14;
}

.ec-form .ec-form__summary:focus-visible {
  outline: 2px solid var(--ec-form-danger);
  outline-offset: 3px;
}

.ec-form .ec-form__summary-title {
  margin: 0 0 6px;
  font-weight: 700;
}

.ec-form .ec-form__summary-list {
  margin: 0;
  padding-left: 1.4em;
}

.ec-form .ec-form__summary a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: .18em;
}

.ec-form .ec-form__summary a:focus-visible {
  outline: 2px solid var(--ec-form-danger);
  outline-offset: 3px;
}

@media (max-width: 767px) {
  .ec-form .ec-form__grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .ec-form .ec-field--full {
    grid-column: auto;
  }

  .ec-form .ec-field__meta {
    flex-wrap: wrap;
  }

  .ec-form .ec-choice-group__items--inline {
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 4px;
  }

  .ec-form .ec-input-group {
    flex-wrap: wrap;
  }

  .ec-form .ec-input-group__affix {
    min-width: 64px;
  }

  .ec-form .ec-form__actions,
  .ec-form .ec-form__actions--start,
  .ec-form .ec-form__actions--center,
  .ec-form .ec-form__actions--end {
    align-items: stretch;
    flex-direction: column;
  }

  .ec-form .ec-form__button {
    width: 100%;
    min-width: 0;
  }

  .ec-form .ec-form__status {
    width: 100%;
    flex-basis: auto;
    text-align: left;
  }
}

@media (prefers-reduced-motion: reduce) {
  .ec-form .ec-control,
  .ec-form .ec-form__button,
  .ec-form input.ec-control[type="file"]::file-selector-button {
    transition: none;
  }
}

@media (forced-colors: active) {
  .ec-form .ec-control,
  .ec-form .ec-form__button,
  .ec-form .ec-input-group__affix,
  .ec-form input.ec-control[type="file"] {
    border-color: CanvasText;
  }

  .ec-form .ec-control:focus-visible,
  .ec-form .ec-choice__input:focus-visible,
  .ec-form .ec-form__button:focus-visible {
    outline-color: Highlight;
  }
}
