/* #region zone:monitor.page.usage.providers — ค่าใช้จ่ายแยกตามผู้ให้บริการ AI */
/* Owner 2026-09-26 ~17:00: the OpenAI/Anthropic brand marks read as large coloured badges next to
   plain text. Smaller than the shared .service-icon default (18px) and desaturated toward the row's
   own ink — a quiet inline mark, not a logo. Scoped to this table only: ops-providers.js's provider
   health rows use the same .service-icon class at its normal size and stay as they are. */
.provider-usage .service-icon {
  width: 14px;
  height: 14px;
  border-radius: 3px;
  filter: grayscale(1);
  opacity: 0.7;
}
.provider-share {
  display: flex;
  align-items: center;
  gap: var(--s-2);
  min-width: 132px;
}
.provider-share .meter {
  flex: 1 1 72px;
}
.provider-share .num {
  flex: none;
  min-width: 5ch;
  text-align: end;
}
.provider-usage .provider-thb {
  white-space: nowrap;
}
/* A long model id wraps inside a bounded sticky first column instead of widening it on phones. */
.provider-usage .provider-model {
  max-width: 18ch;
  white-space: normal;
  overflow-wrap: anywhere;
}
/* #endregion */
/* #region zone:monitor.page.packages — แพ็กเกจและ Flex */
/* Packages & Flex (package-console.js, 2026-09-24) */
.package-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));
  align-items: start;
}
.package-card.is-dirty {
  border-color: var(--warning);
}
.package-toolbar {
  /* Sticky under the top bar so Save stays reachable on a long page. */
  position: sticky;
  top: var(--topbar-h);
  z-index: 15;
  padding: var(--s-3) 0;
  background: var(--surface-0);
  border-bottom: 1px solid var(--border-soft);
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--s-3) var(--s-4);
}
.package-toolbar-hint {
  font-size: var(--fs-sm);
  flex: 1 1 260px;
  min-width: 0;
}
.package-toolbar-actions {
  display: flex;
  gap: var(--s-2);
  margin-left: auto;
}
.package-numbers .field.is-dirty .field-label::after,
.toggle-row.is-dirty .toggle-label::after {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-left: var(--s-2);
  border-radius: 50%;
  background: var(--warning);
  vertical-align: middle;
}
@media (max-width: 699px) {
  .package-toolbar-hint {
    display: none;
  }
  .package-toolbar-actions {
    width: 100%;
    flex-direction: row-reverse;
  }
  .package-toolbar-actions .btn {
    flex: 1 1 0;
    min-width: 0;
  }
}
.package-numbers {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
  gap: var(--s-4);
  margin-top: var(--s-4);
}
.package-numbers .input {
  max-width: 200px;
}
.package-error {
  margin-top: var(--s-3);
}
.toggle-list {
  display: flex;
  flex-direction: column;
  gap: var(--u-space-2);
}
/* The shared ui.toggle stages edits without opening the row detail dialog. */
.toggle-row {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-3);
  min-height: 44px;
  border-bottom: 1px solid var(--border-soft);
  font-size: var(--fs-sm);
  cursor: pointer;
}
.toggle-row:last-child {
  border-bottom: 0;
}
.toggle-row:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
  border-radius: var(--r-sm);
}
/* package-elite (2026-09-27): the CAP_FEATURES row cap preview (map/nlIntent/claudeDesk), so the current
   per-day number is visible on the card without opening the row's modal. */
.toggle-label-wrap:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
  border-radius: var(--r-sm);
}
.toggle-label-wrap {
  align-items: flex-start;
  flex: 1;
  min-height: var(--u-tap);
  margin-block: var(--s-1);
  justify-content: center;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  text-align: start;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.toggle-cap-hint {
  font-size: var(--fs-xs);
  color: var(--text-3);
}
.modal-feature-switch {
  border-bottom: 0;
  cursor: default;
  min-height: 0;
}
.modal-feature-note {
  margin-top: var(--s-3);
}
.flex-tile-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-2);
  flex-wrap: wrap;
}
.flex-tile-id,
.flex-tile-label {
  font-weight: var(--fw-semibold);
}
.flex-tile-caption {
  font-size: var(--fs-xs);
}
.flex-tile-preview {
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
}
.flex-tile-preview:empty {
  display: none;
}
.flex-json {
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  align-items: flex-start;
}
.flex-json .package-json {
  width: 100%;
}
.flex-upload {
  border-bottom: 0;
}
.flex-upload > summary {
  min-height: 40px;
  font-size: var(--fs-sm);
}
.flex-upload-body {
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
  align-items: flex-start;
}
.file-row {
  display: flex;
  align-items: center;
  gap: var(--s-2);
  flex-wrap: wrap;
  min-width: 0;
}
.file-input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  overflow: hidden;
}
.file-input:focus-visible + .file-pick {
  box-shadow: var(--focus-ring);
}
.file-name {
  font-size: var(--fs-xs);
  overflow-wrap: anywhere;
}
.package-gallery {
  align-items: start;
}
/* #endregion */
/* #region zone:monitor.page.health.layout — หน้า "สุขภาพสูตร": คอลัมน์ บล็อกอธิบาย และกราฟ */
.fh-stack {
  display: grid;
  gap: var(--s-6);
  min-width: 0;
}
.fh-columns {
  margin-top: var(--s-6);
}
.fh-toggles {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s-2);
  margin: var(--s-4) 0;
}
.fh-toggles-label {
  font-size: var(--fs-sm);
  color: var(--text-2);
}
.fh-explain {
  margin: var(--s-4) 0 0;
  font-size: var(--fs-sm);
  line-height: 1.6;
  color: var(--text-2);
}
.fh-plot {
  margin-top: var(--s-2);
}
.fh-drift-value,
.fh-run {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: var(--s-2);
}
.fh-trail {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--s-1);
}
.fh-columns .segmented {
  max-width: 100%;
  flex-wrap: wrap;
}
/* #endregion */

/* #region zone:monitor.page.integrations.layout — ตาราง provider เป็นการ์ดบนมือถือ */

@container content (max-width:700px) {
}
/* #endregion */

/* LINE OA planning uses shared panel/table/form spacing. */
.oa-metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--s-4);
  margin-bottom: var(--s-5);
}
.oa-metric {
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  padding: var(--s-4);
  border: 1px solid var(--border-soft);
  border-radius: var(--r-lg);
  min-width: 0;
}
.oa-metric strong {
  font-size: 24px;
}
.oa-summary {
  display: flex;
  flex-direction: column;
  gap: var(--s-4);
}
.oa-summary > p {
  margin: 0;
}
.oa-summary > .banner {
  margin: 0;
}
.oa-details {
  margin: var(--s-5) 0;
}
.oa-details > summary {
  cursor: pointer;
  padding: var(--s-3) 0;
}
.oa-table-wrap {
  overflow-x: auto;
}
.oa-table-wrap table {
  min-width: 540px;
}
.provider-status-list {
  display: flex;
  flex-direction: column;
}
.provider-status-row {
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  padding: var(--s-3) 0;
  border-bottom: 1px solid var(--border-soft);
  min-width: 0;
}
.provider-status-row .note {
  margin: 0;
}
.provider-status-header,
.provider-bar-label,
.provider-bar-facts {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--s-2);
}
.provider-status-header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
}
.provider-status-header .service-name {
  font-weight: 600;
}
.provider-title {
  display: flex;
  flex-direction: column;
  gap: var(--s-1);
}
.provider-title > p {
  margin: 0;
}
.provider-activity,
.provider-quota {
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  min-width: 0;
}
.provider-quota > .provider-share {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  min-width: 0;
}
.provider-quota .provider-share > .num {
  grid-column: 2;
  grid-row: 1;
  white-space: normal;
}
.provider-quota .provider-share > .note {
  grid-column: 1;
  grid-row: 1;
}
.provider-quota .provider-share > .meter {
  grid-column: 1/-1;
  grid-row: 2;
  min-width: 0;
}
.provider-quota p {
  margin: 0;
}
.provider-activity-details > summary,
.provider-quota > details > summary {
  cursor: pointer;
  padding: 0;
  min-height: var(--h-sm);
  line-height: var(--h-sm);
  color: var(--text-2);
  font-size: var(--fs-xs);
}
.provider-product-table,
.provider-limit-table {
  margin: var(--s-2) 0;
  overflow-x: auto;
}
.provider-product-table .table {
  min-width: 640px;
}
.provider-product-table .table td.num,
.provider-limit-table .table td.num {
  text-align: right;
}
.provider-limit-table .table td:first-child {
  white-space: normal;
  min-width: 220px;
}
.provider-quota-item {
  display: flex;
  flex-direction: column;
  gap: var(--s-1);
}
.provider-row-actions {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: var(--s-2);
  flex-wrap: wrap;
}
.provider-row-actions > .btn {
  flex: 0 0 auto;
}
.provider-bar-facts .note {
  margin-right: auto;
}
.provider-limit-form {
  display: flex;
  flex-direction: column;
  gap: var(--s-4);
}
.provider-limit-form > p {
  margin: 0;
}
@media (max-width: 600px) {
  .oa-metrics {
    grid-template-columns: 1fr 1fr;
    gap: var(--s-3);
  }
  .oa-metric {
    padding: var(--s-3);
  }
  .oa-metric .note {
    overflow-wrap: anywhere;
  }
  .provider-bar-label > .num {
    white-space: normal;
  }
}

/* Read-only provider caps share one aligned value column. */
.setting-managed-value {
  min-width: 112px;
  padding: var(--s-2) var(--s-3);
  border-radius: var(--r-sm);
  background: var(--surface-2);
  justify-content: flex-end;
  font-variant-numeric: tabular-nums;
}
.setting-managed-value .num {
  font-family: inherit;
}
.oa-date {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.member-cards .grant-line {
  height: auto;
  flex-wrap: wrap;
}
.member-cards .grant-cell.plan-cell {
  max-width: 100%;
}
