/* ============================================================
   منصة الربط الحكومي — مكونات خاصة (منصة الاختبار، ملف المكلف، الخريطة)
   ============================================================ */
.ltr { direction: ltr; text-align: left; }
code { color: var(--gov-primary-700); font-family: var(--font-mono); font-size: .85em; }
code.wrap { white-space: pre-wrap; word-break: break-all; }
pre.code, textarea.code { font-family: var(--font-mono); font-size: 13px; background: #0F172A; color: #E2E8F0; border-radius: var(--radius-md); padding: var(--space-3); max-height: 520px; overflow: auto; white-space: pre-wrap; word-break: break-word; }
textarea.code { background: #0F172A; color: #E2E8F0; border-color: #0F172A; }
textarea.code:focus { background: #0F172A; color: #fff; }
pre.code.small { font-size: 12px; }
.card-app.compact { padding: var(--space-3) var(--space-4); }
.grid-form.g-tight { gap: var(--space-3); grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); }

/* ---------- الحالات ---------- */
.oc-ok { background: var(--success-tint); color: var(--success); border-color: var(--success-border); }
.oc-muted { background: var(--gov-surface-alt); color: var(--gov-ink-2); border-color: var(--gov-border-strong); }
.oc-warn { background: var(--warning-tint); color: var(--warning); border-color: var(--warning-border); }
.oc-err { background: var(--danger-tint); color: var(--danger); border-color: var(--danger-border); }
.health { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-xs); font-weight: 600; white-space: nowrap; }
.health .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--gov-border-strong); }
.health-up { color: var(--success); } .health-up .dot { background: var(--success); box-shadow: 0 0 0 3px var(--success-tint); }
.health-down { color: var(--danger); } .health-down .dot { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-tint); }
.health-disabled { color: var(--gov-ink-3); }
.health-unknown { color: var(--gov-ink-3); } .health-unknown .dot { background: var(--warning-border); }
.chip { display: inline-flex; align-items: center; gap: 4px; padding: 1px 9px; border-radius: var(--radius-pill); font-size: var(--text-xs); background: var(--gov-surface-alt); border: 1px solid var(--gov-border); direction: ltr; }
.chip.ok { color: var(--success); border-color: var(--success-border); background: var(--success-tint); }
.chip.warn { color: var(--warning); border-color: var(--warning-border); background: var(--warning-tint); }
.chip.err { color: var(--danger); border-color: var(--danger-border); background: var(--danger-tint); }
.proto { font-family: var(--font-mono); font-size: 11px; font-weight: 700; padding: 1px 6px; border-radius: 4px; background: var(--gov-surface-alt); border: 1px solid var(--gov-border); }

.method { font-family: var(--font-mono); font-size: 11px; font-weight: 700; min-width: 42px; text-align: center; display: inline-block; direction: ltr; }
.m-get { color: #1A7F37; } .m-post { color: #9A6700; } .m-put { color: #0B5FA3; } .m-patch { color: #6F42C1; } .m-delete { color: #B42318; }
.m-sql { color: #0F4C81; } .m-file { color: #6A737D; }

/* ---------- لوحة المتابعة ---------- */
.hours { display: grid; grid-template-columns: repeat(24, 1fr); gap: 3px; height: 140px; align-items: end; direction: ltr; }
.hour { display: flex; flex-direction: column-reverse; height: 100%; background: var(--gov-surface-alt); border-radius: 3px; overflow: hidden; }
.bar-ok { background: var(--gov-primary); display: block; }
.bar-failed { background: var(--danger); display: block; }
.hours-axis { display: flex; justify-content: space-between; font-size: var(--text-xs); color: var(--gov-ink-3); margin-top: 4px; direction: ltr; }
.hours-axis span:first-child { order: 0; }
.legend { display: flex; gap: var(--space-4); font-size: var(--text-xs); color: var(--gov-ink-2); margin-top: var(--space-2); }
.sw { display: inline-block; width: 10px; height: 10px; border-radius: 2px; vertical-align: middle; }
.sw.ok { background: var(--gov-primary); } .sw.failed { background: var(--danger); }
.agency-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: var(--space-3); }
.agency-tile { display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto auto; column-gap: var(--space-3); row-gap: 4px; padding: var(--space-3) var(--space-4);
  border: 1px solid var(--gov-border); border-radius: var(--radius-lg); text-decoration: none; color: var(--gov-ink); background: var(--gov-surface); }
.agency-tile:hover { border-color: var(--gov-primary); box-shadow: var(--shadow-sm); }
.agency-tile.internal { border-inline-start: 4px solid var(--gov-primary); }
.agency-tile.external { border-inline-start: 4px solid var(--gov-secondary); }
.tile-icon { grid-row: 1 / 4; font-size: 1.5rem; color: var(--gov-primary); align-self: center; }
.agency-tile.external .tile-icon { color: var(--gov-secondary); }
.tile-name { font-weight: 600; font-size: var(--text-sm); }
.tile-meta { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.tile-sub { font-size: var(--text-xs); color: var(--gov-ink-3); }

/* ---------- منصة الاختبار ---------- */
.studio { display: grid; grid-template-columns: 270px minmax(0, 1fr); gap: var(--space-5); align-items: start; }
.studio-side { background: var(--gov-surface); border: 1px solid var(--gov-border); border-radius: var(--radius-lg); padding: var(--space-3); position: sticky; top: 80px; max-height: calc(100vh - 100px); overflow: auto; font-size: var(--text-sm); }
.side-head { display: flex; gap: 6px; margin-bottom: var(--space-3); }
.studio-side details { margin-bottom: var(--space-2); }
.studio-side summary { cursor: pointer; font-weight: 600; padding: 4px 2px; color: var(--gov-ink-2); font-size: var(--text-xs); }
.studio-side ul { list-style: none; padding: 0; margin: 4px 0 0; }
.side-item { display: flex; gap: 6px; align-items: center; padding: 4px 6px; border-radius: var(--radius-sm); color: var(--gov-ink); text-decoration: none; }
.side-item:hover { background: var(--gov-surface-alt); }
.side-item.active { background: var(--gov-primary-100); color: var(--gov-primary); font-weight: 600; }
.req-bar { display: flex; align-items: stretch; border: 1px solid var(--gov-border-strong); border-radius: var(--radius-md); background: var(--gov-surface); margin-bottom: var(--space-3); direction: ltr; overflow: hidden; }
.req-bar .method-select { width: 110px; border: 0; border-right: 1px solid var(--gov-border); border-radius: 0; font-family: var(--font-mono); font-weight: 700; }
.req-bar .base { display: flex; align-items: center; padding: 0 10px; background: var(--gov-surface-alt); color: var(--gov-ink-3); font-family: var(--font-mono); font-size: 12px; border-right: 1px solid var(--gov-border); white-space: nowrap; max-width: 40%; overflow: hidden; text-overflow: ellipsis; }
.req-bar .path { border: 0; border-radius: 0; font-family: var(--font-mono); flex: 1; }
.req-bar .path:focus { box-shadow: none; }
.req-bar .send { border-radius: 0; padding-inline: 22px; }
.req-bar > .method { align-self: center; padding: 0 12px; }
.ctx-bar { display: grid; grid-template-columns: 170px 170px 90px 1fr; gap: var(--space-3); margin-bottom: var(--space-3); }
.ctx-bar .form-label { font-size: var(--text-xs); }
.tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--gov-border); margin-bottom: -1px; flex-wrap: wrap; }
.tab { border: 1px solid transparent; background: none; padding: 6px 14px; font-size: var(--text-sm); color: var(--gov-ink-2); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.tab.on { border-color: var(--gov-border); border-bottom-color: var(--gov-surface); background: var(--gov-surface); color: var(--gov-primary); font-weight: 600; }
.tab-body { border-top-left-radius: 0; border-top-right-radius: 0; }
.kv-tbl input { font-family: var(--font-mono); font-size: 13px; }
.kv-off input { opacity: .5; }
.map-tbl input, .map-tbl select { min-width: 110px; }
.map-tbl td.preview { font-weight: 600; color: var(--gov-primary-700); max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.resp-head { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
.resp-body { border: 1px solid var(--gov-border); border-radius: 0 0 var(--radius-md) var(--radius-md); padding: var(--space-3); max-height: 620px; overflow: auto; }

/* شجرة JSON */
.jt { list-style: none; margin: 0; padding-inline-start: 18px; direction: ltr; text-align: left; font-family: var(--font-mono); font-size: 13px; }
.resp-body > .jt { padding-inline-start: 0; }
.jt-row { display: flex; align-items: center; gap: 6px; padding: 1px 0; border-radius: 3px; }
.jt-row:hover { background: var(--gov-primary-100); }
.jt-key { color: #6F42C1; }
.jt-key::after { content: ":"; color: var(--gov-ink-3); }
.jt-val { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 520px; }
.jt-str { color: #1A7F37; } .jt-num { color: #0B5FA3; } .jt-bool { color: #9A6700; } .jt-null { color: var(--gov-ink-3); }
.jt-meta { color: var(--gov-ink-3); font-size: 11px; }
.jt-empty { color: var(--gov-ink-3); }
.jt-pick { border: 1px solid var(--gov-primary); color: var(--gov-primary); background: var(--gov-surface); border-radius: 4px; width: 20px; height: 20px; line-height: 1; padding: 0; font-size: 12px; opacity: 0; display: inline-grid; place-items: center; }
.jt-row:hover .jt-pick, .jt-pick:focus-visible { opacity: 1; }
.jt-pick:hover { background: var(--gov-primary); color: #fff; }

/* ---------- ملف المكلف ---------- */
.refresh-bar { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: flex-end; }
.refresh-bar .grow, .ctx-bar .grow { flex: 1 1 280px; }
.profile-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--space-4); }
.pcard { background: var(--gov-surface); border: 1px solid var(--gov-border); border-radius: var(--radius-lg); padding: var(--space-3) var(--space-4); border-top: 3px solid var(--gov-border-strong); }
.pcard.found { border-top-color: var(--success); }
.pcard.not_found { border-top-color: var(--gov-border-strong); }
.pcard.unreachable { border-top-color: var(--warning-border); }
.pcard.error { border-top-color: var(--danger); }
.pcard.stale { background: linear-gradient(0deg, var(--gov-surface), var(--gov-surface)), repeating-linear-gradient(45deg, transparent, transparent 6px, #F8FAFC 6px, #F8FAFC 12px); }
.pcard header { display: flex; gap: var(--space-2); align-items: flex-start; }
.pcard header > .bi { font-size: 1.2rem; color: var(--gov-primary); margin-top: 2px; }
.ph-text { display: flex; flex-direction: column; flex: 1; line-height: 1.3; }
.ph-text small { color: var(--gov-ink-3); font-size: var(--text-xs); }
.pc-state { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin: 6px 0 8px; }
.pc-state .sim { color: var(--warning); font-size: var(--text-xs); }
.pc-msg { font-size: var(--text-xs); color: var(--warning); margin: 0 0 6px; }
.pc-msg.muted { color: var(--gov-ink-3); }
dl.facts { display: grid; grid-template-columns: 1fr auto; gap: 4px var(--space-3); margin: 0; font-size: var(--text-sm); }
dl.facts dt { color: var(--gov-ink-3); font-weight: 400; }
dl.facts dd { margin: 0; font-weight: 600; text-align: end; }
dl.facts dd.num { font-variant-numeric: tabular-nums; }
.risk-list { list-style: none; padding: 0; margin: 0 0 var(--space-3); }
.risk { border: 1px solid var(--gov-border); border-inline-start: 4px solid; border-radius: var(--radius-md); padding: var(--space-2) var(--space-3); margin-bottom: var(--space-2); }
.risk.sev-high { border-inline-start-color: var(--danger); background: var(--danger-tint); }
.risk.sev-medium { border-inline-start-color: var(--warning-border); background: var(--warning-tint); }
.risk.sev-low { border-inline-start-color: var(--info-border); background: var(--info-tint); }
.risk-head { display: flex; justify-content: space-between; gap: var(--space-2); font-size: var(--text-sm); }
.risk .sev { font-size: var(--text-xs); font-weight: 700; }
.risk-exp { font-size: var(--text-xs); color: var(--gov-ink-2); margin-top: 2px; }
.sev-pill { font-size: var(--text-xs); font-weight: 700; padding: 1px 8px; border-radius: var(--radius-pill); }
.sev-pill.sev-high { background: var(--danger-tint); color: var(--danger); }
.sev-pill.sev-medium { background: var(--warning-tint); color: var(--warning); }
.sev-pill.sev-low { background: var(--info-tint); color: var(--info); }
tr.sel td { background: var(--gov-primary-100); }

@media (max-width: 1100px) {
  .studio { grid-template-columns: minmax(0, 1fr); }
  .studio-side { position: static; max-height: 260px; }
  .ctx-bar { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 900px) {
  .req-bar { flex-wrap: wrap; }
  .req-bar .base { max-width: 100%; flex: 1 1 100%; border-right: 0; border-bottom: 1px solid var(--gov-border); padding: 4px 10px; }
  .ctx-bar { grid-template-columns: 1fr; }
  .profile-grid { grid-template-columns: 1fr; }
}
.jt-str { font-family: "IBM Plex Sans Arabic", var(--font-mono); unicode-bidi: plaintext; }
.pcard.skipped { opacity: .7; border-top-style: dashed; }
.map-tbl input, .map-tbl select { min-width: 96px; font-size: 12px; }
.map-tbl td:first-child input, .map-tbl td:nth-child(2) input { min-width: 170px; font-family: var(--font-mono); }
dl.facts { grid-template-columns: minmax(130px, 1fr) auto; }

/* ---------- مسارات الربط ---------- */
.stat-link { text-decoration: none; color: inherit; }
.stat-link:hover { border-color: var(--gov-primary); }
.flow-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); gap: var(--space-4); margin-bottom: var(--space-4); }
.flow-card { background: var(--gov-surface); border: 1px solid var(--gov-border); border-radius: var(--radius-lg); padding: var(--space-3) var(--space-4); display: flex; flex-direction: column; gap: var(--space-3); }
.flow-card.off { opacity: .6; }
.flow-card header, .flow-card footer { display: flex; gap: var(--space-2); align-items: center; flex-wrap: wrap; }
.flow-card .grow { flex: 1; min-width: 0; }
.flow-card .trig { font-size: 1.4rem; color: var(--gov-primary); }
.chain { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.chain .node { font-size: 12px; padding: 3px 9px; border-radius: var(--radius-pill); border: 1px solid var(--gov-border); background: var(--gov-surface-alt); white-space: nowrap; }
.chain .trig-node { background: var(--gov-primary-100); border-color: var(--info-border); color: var(--gov-primary); font-weight: 600; }
.chain .arrow { color: var(--gov-ink-3); font-size: 12px; }
.node.op-read { border-color: var(--info-border); }
.node.op-create, .node.op-upsert, .node.op-update { border-color: var(--success-border); background: var(--success-tint); }
.node.op-delete { border-color: var(--danger-border); background: var(--danger-tint); }

.flow-layout { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: var(--space-5); align-items: start; }
.flow-side { position: sticky; top: 80px; max-height: calc(100vh - 100px); overflow: auto; }
.step-no { display: inline-grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--gov-primary); color: #fff; font-size: 13px; }
.trigger-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: var(--space-2); }
.trigger-card { border: 1px solid var(--gov-border); border-radius: var(--radius-md); padding: var(--space-3); cursor: pointer; display: flex; flex-direction: column; gap: 2px; }
.trigger-card .bi { font-size: 1.2rem; color: var(--gov-ink-3); }
.trigger-card small { color: var(--gov-ink-3); font-size: 11px; line-height: 1.4; }
.trigger-card.on { border-color: var(--gov-primary); background: var(--gov-primary-100); }
.trigger-card.on .bi { color: var(--gov-primary); }
.step-card { border-inline-start: 4px solid var(--info-border); }
.step-card.op-create, .step-card.op-update, .step-card.op-upsert { border-inline-start-color: var(--success); }
.step-card.op-delete { border-inline-start-color: var(--danger); }
.step-head { display: flex; gap: var(--space-2); align-items: center; margin-bottom: var(--space-3); }
.step-badge { min-width: 30px; height: 30px; border-radius: var(--radius-md); background: var(--gov-surface-alt); display: grid; place-items: center; font-weight: 700; }
.step-head .code-in { max-width: 140px; font-family: var(--font-mono); }
.op-row { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: var(--space-3); }
.op-chip { border: 1px solid var(--gov-border); background: var(--gov-surface); border-radius: var(--radius-pill); padding: 3px 12px; font-size: 13px; }
.op-chip.on { background: var(--gov-primary); color: #fff; border-color: var(--gov-primary); }
.io-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-4); }
.io-grid > div { border-top: 1px dashed var(--gov-border); padding-top: var(--space-3); }
.fields-tbl td:nth-child(2) input { min-width: 220px; }
.io-head { display: flex; flex-direction: column; margin-bottom: 4px; }
.io-head small { color: var(--gov-ink-3); font-size: 11px; }
.fields-tbl input, .fields-tbl select { font-size: 12px; min-height: 30px; }
.fields-tbl input.ltr { font-family: var(--font-mono); }
.leaf-cloud { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.leaf { border: 1px dashed var(--gov-border-strong); background: none; border-radius: 4px; font-family: var(--font-mono); font-size: 11px; padding: 1px 6px; direction: ltr; }
.leaf:hover { border-color: var(--gov-primary); color: var(--gov-primary); }
.leaf.arr { border-style: solid; border-color: var(--info-border); }
.trace-list { padding-inline-start: 18px; font-size: 13px; }
.trace-list li { margin-bottom: 8px; }
.tr-err strong { color: var(--danger); }
.oc-info { background: var(--info-tint); color: var(--info); border-color: var(--info-border); }
@media (max-width: 1300px) { .flow-layout { grid-template-columns: minmax(0, 1fr); } .flow-side { position: static; max-height: none; } }
@media (max-width: 900px) { .io-grid { grid-template-columns: 1fr; } .flow-cards { grid-template-columns: 1fr; } }
.form-control::placeholder { color: #A9B0B8; font-style: italic; opacity: 1; }
