/* ============================================================
   Page-operation tools: shared layout
   ============================================================ */
.op-hero{padding:52px 0 30px; border-bottom:1px solid var(--rule);}
.op-hero h1{font-size:clamp(28px,3.8vw,44px); max-width:24ch; line-height:1.06; letter-spacing:-0.025em;}
.op-hero p{font-size:17px; max-width:56ch; margin-top:14px;}

.op-wrap{padding:44px 28px 64px; max-width:820px;}

.file-list{margin-bottom:24px;}
.file-row{
  display:grid; grid-template-columns:30px 1fr auto auto; gap:14px; align-items:center;
  padding:13px 0; border-bottom:1px solid var(--rule); font-size:14.5px;
}
.file-row:first-child{border-top:1px solid var(--rule-strong);}
.fr-n{font-family:var(--font-mono); font-size:12px; color:var(--ink-faint);}
.fr-name{font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.fr-meta{font-size:12.5px; color:var(--ink-faint); white-space:nowrap;}
.fr-actions{display:flex; gap:4px;}
.icon-btn{
  width:30px; height:30px; border:1px solid var(--rule); border-radius:var(--radius-sm);
  background:var(--card); color:var(--ink-soft); cursor:pointer; font-size:12px; line-height:1;
  display:flex; align-items:center; justify-content:center; transition:border-color .15s, color .15s;
}
.icon-btn:hover:not(:disabled){border-color:var(--accent); color:var(--accent);}
.icon-btn:disabled{opacity:.3; cursor:not-allowed;}
@media (max-width:520px){
  .file-row{grid-template-columns:24px 1fr auto; gap:8px;}
  .fr-meta{grid-column:2; font-size:12px;}
  .fr-actions{grid-row:1 / span 2; grid-column:3;}
}

.ctrl-field{margin-bottom:20px;}
.ctrl-field label{display:block; font-size:13px; font-weight:600; margin-bottom:8px; color:var(--ink);}
.ctrl-field .muted{font-weight:400; color:var(--ink-faint);}
.ctrl-field input[type=text], .ctrl-field input[type=number], .ctrl-field select{
  width:100%; padding:11px 13px; font-size:15px;
}
.ctrl-field input[type=range]{width:100%;}
.ctrl-field .hint{display:block; font-size:12.5px; color:var(--ink-faint); margin-top:7px;}
.ctrl-row{display:grid; grid-template-columns:1fr 1fr; gap:18px;}
@media (max-width:560px){ .ctrl-row{grid-template-columns:1fr; gap:0;} }
label.check{display:flex; align-items:center; gap:9px; font-size:14.5px; margin-bottom:22px; cursor:pointer;}
label.check input{width:16px; height:16px;}

.op-actions{display:flex; gap:12px; flex-wrap:wrap; margin-top:26px; padding-top:24px; border-top:1px solid var(--rule);}
@media (max-width:520px){ .op-actions .btn{width:100%;} }

.op-status{margin-top:18px; font-size:14.5px; color:var(--ink-soft); min-height:22px;}
.op-status.is-ok{color:var(--accent-deep); background:var(--accent-tint); border:1px solid var(--accent-line);
  padding:12px 15px; border-radius:var(--radius-sm);}
.op-status.is-error{color:var(--neg); background:var(--mark-soft); border:1px solid #EBC8C1;
  padding:12px 15px; border-radius:var(--radius-sm);}

/* Tools index */
.tools-index{padding:20px 0 40px;}
.tool-cat{margin-bottom:46px;}
.tool-cat h2{font-size:20px; letter-spacing:-0.02em; margin-bottom:4px;}
.tool-cat .cat-sub{font-size:14.5px; margin-bottom:20px;}
.tool-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:14px;}
@media (max-width:860px){ .tool-grid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:560px){ .tool-grid{grid-template-columns:1fr;} }
.tool-card{
  border:1px solid var(--rule); border-radius:var(--radius); background:var(--card);
  padding:20px; color:inherit; transition:border-color .18s ease, transform .18s ease, background .18s ease;
}
.tool-card:hover{border-color:var(--accent-line); transform:translateY(-2px); background:#fff;}
.tool-card h3{font-family:var(--font); font-size:16px; font-weight:600; margin:0 0 6px;}
.tool-card p{font-size:13.5px; margin:0; color:var(--ink-soft);}
.tool-card .tc-icon{color:var(--accent); margin-bottom:12px;}
.not-built{border-top:1px solid var(--rule); padding-top:34px; margin-top:10px;}
.not-built h2{font-size:20px; margin-bottom:6px;}
.not-built > p{max-width:62ch;}
.not-built dl{display:grid; grid-template-columns:180px 1fr; gap:12px 24px; margin:22px 0 0; font-size:14.5px;}
.not-built dt{font-weight:600;}
.not-built dd{margin:0; color:var(--ink-soft);}
@media (max-width:640px){ .not-built dl{grid-template-columns:1fr; gap:4px 0;} .not-built dd{margin-bottom:14px;} }

/* Breathing room between the page intro and the first category */
.listing-head + .tools-index{padding-top:44px;}
.tools-index .tool-cat:first-child{padding-top:6px;}


/* Limits band: the concrete, checkable claims */
.limits{background:var(--accent-tint); border:1px solid var(--accent-line); border-radius:var(--radius-lg);
  padding:36px 34px; margin:8px 0 46px;}
.limits h2{font-size:22px; letter-spacing:-0.02em; margin:0 0 8px;}
.limits > p{max-width:62ch; margin:0 0 26px; color:var(--accent-deep);}
.limits-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:0; border-top:1px solid var(--accent-line);}
@media (max-width:820px){ .limits-grid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:520px){ .limits-grid{grid-template-columns:1fr;} }
.limit{padding:20px 22px 18px 0; border-right:1px solid var(--accent-line);}
.limit:last-child{border-right:none;}
.limit + .limit{padding-left:22px;}
@media (max-width:820px){
  .limit{border-right:none; border-bottom:1px solid var(--accent-line); padding:16px 0;}
  .limit + .limit{padding-left:0;}
  .limit:nth-child(odd){padding-right:22px; border-right:1px solid var(--accent-line);}
}
@media (max-width:520px){ .limit:nth-child(odd){border-right:none; padding-right:0;} }
.limit .lv{display:block; font-family:var(--font-display); font-size:28px; font-weight:600; color:var(--accent); letter-spacing:-0.02em;}
.limit .ll{display:block; font-size:14px; font-weight:600; margin:4px 0 5px; color:var(--ink);}
.limit .ln{display:block; font-size:13px; color:var(--ink-soft); line-height:1.5;}
.limits-note{max-width:70ch; margin:26px 0 0 !important; font-size:14.5px; color:var(--ink-soft) !important;}
.op-status.is-warn{color:var(--mark-ink); background:var(--mark-soft); border:1px solid var(--mark-line);
  padding:12px 15px; border-radius:var(--radius-sm);}

/* ---------- Batch fill: column → field mapping ---------- */
.map-h{font-size:15px; margin:26px 0 4px;}
.map-sub{margin-bottom:14px;}
.map-rows{border-top:1px solid var(--rule-strong);}
.map-row{display:grid; grid-template-columns:minmax(120px,1fr) minmax(160px,1.4fr) auto; gap:14px;
  align-items:center; padding:11px 0; border-bottom:1px solid var(--rule);}
.map-col{font-weight:600; font-size:14px; overflow:hidden; text-overflow:ellipsis;}
.map-row select{width:100%; padding:8px 10px; font-size:14px;}
.map-warn{font-size:12px; color:var(--mark-ink); white-space:nowrap;}
.map-none{font-size:12px; color:var(--ink-faint); white-space:nowrap;}
@media (max-width:620px){
  .map-row{grid-template-columns:1fr; gap:6px; padding:14px 0;}
  .map-warn,.map-none{justify-self:start;}
}

/* ---------- Compare: diff output ---------- */
.diff-out{margin-top:28px;}
.diff-summary{display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:0;
  border:1px solid var(--rule); border-radius:var(--radius); overflow:hidden; margin-bottom:26px;}
.diff-summary .ds{padding:16px 18px; border-right:1px solid var(--rule); background:var(--card);}
.diff-summary .ds:last-child{border-right:none;}
.dsv{display:block; font-family:var(--font-display); font-size:26px; font-weight:600; letter-spacing:-0.02em;}
.dsv.add{color:#1D6A4F;} .dsv.del{color:#A03328;}
.dsl{display:block; font-size:12.5px; color:var(--ink-faint); margin-top:2px;}
.diff-page{border-top:1px solid var(--rule); padding:20px 0;}
.diff-page h3{font-family:var(--font); font-size:15px; font-weight:600; margin:0 0 10px;}
.diff-note{font-weight:400; font-size:12.5px; color:var(--mark-ink);}
.diff-body{font-size:14.5px; line-height:1.85; margin:0; word-break:break-word;}
.d-same{color:var(--ink-faint);}
.d-gap{color:var(--rule-strong);}
ins.d-add{background:#E4F3EB; color:#12523C; text-decoration:underline; text-decoration-thickness:1.5px;
  padding:1px 3px; border-radius:3px;}
del.d-del{background:#F7ECEA; color:var(--neg); padding:1px 3px; border-radius:3px;}
.diff-same{background:var(--accent-tint); border:1px solid var(--accent-line); color:var(--accent-deep);
  padding:16px 18px; border-radius:var(--radius); font-size:15px;}
.diff-note-block{font-size:12.5px; color:var(--mark-ink); background:var(--mark-soft);
  border:1px solid var(--mark-line); padding:9px 11px; border-radius:var(--radius-sm); margin:10px 0 0;}
