@layer commonpub {
/* ===========================================
   CommonPub Form Patterns — forms.css
   Shared form element styles.
   All values use CSS custom properties from base.css.
   =========================================== */

/* ─── TEXT INPUTS ─── */
.cpub-input {
  display: block;
  width: 100%;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  font-family: var(--font-sans);
  color: var(--text);
  background: var(--surface);
  border: var(--border-width-default) solid var(--border2);
  transition: border-color var(--transition-fast);
}

.cpub-input::placeholder {
  color: var(--text-faint);
}

.cpub-input:hover {
  border-color: var(--border);
}

.cpub-input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: var(--shadow-accent);
}

/* ─── TEXTAREA ─── */
.cpub-textarea {
  display: block;
  width: 100%;
  padding: var(--space-3);
  font-size: var(--text-sm);
  font-family: var(--font-sans);
  color: var(--text);
  background: var(--surface);
  border: var(--border-width-default) solid var(--border2);
  resize: vertical;
  min-height: 100px;
  transition: border-color var(--transition-fast);
}

.cpub-textarea::placeholder {
  color: var(--text-faint);
}

.cpub-textarea:hover {
  border-color: var(--border);
}

.cpub-textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: var(--shadow-accent);
}

/* ─── SELECT ─── */
.cpub-select {
  display: block;
  width: 100%;
  padding: var(--space-2) var(--space-3);
  padding-right: var(--space-8);
  font-size: var(--text-sm);
  font-family: var(--font-sans);
  color: var(--text);
  background: var(--surface);
  border: var(--border-width-default) solid var(--border2);
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b6b66' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  cursor: pointer;
  transition: border-color var(--transition-fast);
}

.cpub-select:hover {
  border-color: var(--border);
}

.cpub-select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: var(--shadow-accent);
}

/* ─── CONTEST / EDITOR FORM CONTROLS (strong-border variant) ───
   The contest editor family (ContestEditor settings rail, ContestStageCard, the
   shared FormTemplateEditor, ContestEmailEditor) uses a strong 2px --border input,
   distinct from .cpub-input's lighter --border2. This was copy-pasted verbatim into
   each component's scoped block; defined once here so ContestEmailEditor's inputs
   (which referenced the class but never defined it) render correctly. Components
   that keep a local scoped copy still win on specificity — zero visual change. */
.cpub-form-input {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  border: var(--border-width-default) solid var(--border);
  background: var(--surface);
  color: var(--text);
  font-size: var(--text-sm);
  font-family: var(--font-sans);
}
.cpub-form-input::placeholder {
  color: var(--text-faint);
}
.cpub-form-input:focus {
  border-color: var(--accent);
  outline: none;
  box-shadow: var(--shadow-accent);
}
.cpub-form-textarea {
  resize: vertical;
}

/* ─── FORM GROUP ─── */
.cpub-form-group {
  margin-bottom: var(--space-4);
}

.cpub-form-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: var(--font-weight-medium);
  color: var(--text-dim);
  margin-bottom: var(--space-1);
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
}

.cpub-form-hint {
  font-size: var(--text-xs);
  color: var(--text-faint);
  margin-top: var(--space-1);
}

.cpub-form-error {
  font-size: var(--text-xs);
  color: var(--red-text);
  margin-top: var(--space-1);
}

/* ─── CHECKBOX ─── */
.cpub-checkbox {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  font-size: var(--text-sm);
  color: var(--text);
}

.cpub-checkbox input[type="checkbox"] {
  width: 16px;
  height: 16px;
  border: var(--border-width-default) solid var(--border2);
  background: var(--surface);
  appearance: none;
  cursor: pointer;
  position: relative;
  flex-shrink: 0;
}

.cpub-checkbox input[type="checkbox"]:checked {
  background: var(--accent);
  border-color: var(--accent);
}

.cpub-checkbox input[type="checkbox"]:checked::after {
  content: '';
  position: absolute;
  left: 3px;
  top: 0px;
  width: 5px;
  height: 9px;
  border: solid var(--color-text-inverse);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.cpub-checkbox input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ─── RADIO ─── */
.cpub-radio {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  font-size: var(--text-sm);
  color: var(--text);
}

.cpub-radio input[type="radio"] {
  width: 16px;
  height: 16px;
  border: var(--border-width-default) solid var(--border2);
  border-radius: 50%;
  background: var(--surface);
  appearance: none;
  cursor: pointer;
  position: relative;
  flex-shrink: 0;
}

.cpub-radio input[type="radio"]:checked {
  border-color: var(--accent);
}

.cpub-radio input[type="radio"]:checked::after {
  content: '';
  position: absolute;
  left: 3px;
  top: 3px;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent);
}

.cpub-radio input[type="radio"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ─── INPUT SIZES ─── */
.cpub-input-sm {
  padding: 4px var(--space-2);
  font-size: var(--text-xs);
}

.cpub-input-lg {
  padding: var(--space-3) var(--space-4);
  font-size: var(--text-base);
}
}
