/* 方倍工作室 · 在线工具页公共样式（依赖全站 site.css，仅补充工具页专属区块） */
.tw-hero { padding: 56px 0 10px; text-align: center; }
.tw-hero h1 { font-size: 32px; font-weight: 800; letter-spacing: -1px; color: #14181f; }
.tw-tags { margin-top: 16px; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
.tw-tags span { font-size: 12.5px; font-weight: 600; color: #4b5563; background: #f7f8fa; border: 1px solid #e5e7eb; border-radius: 50px; padding: 5px 14px; }

.tw-info { display: grid; grid-template-columns: 1fr; gap: 16px; margin-top: 30px; }
.tw-block { background: #f9fafb; border: 1px solid #eef2f0; border-radius: 16px; padding: 24px 22px; text-align: left; }
.tw-block h2 { font-size: 19px; font-weight: 800; margin-bottom: 10px; color: #14181f; }
.tw-block p { font-size: 13.8px; color: #4b5563; line-height: 1.8; margin: 0; }

.tw-stage { margin: 26px 0 60px; }
.tw-coming { border: 1.5px dashed #d1d5db; border-radius: 18px; padding: 56px 24px; text-align: center; background: linear-gradient(180deg, #fbfdfc, #f7f8fa); }
.tw-coming h2 { font-size: 20px; font-weight: 800; margin-bottom: 10px; color: #14181f; }
.tw-coming p { font-size: 13.8px; color: #6b7280; max-width: 480px; margin: 0 auto; }
.tw-btns { margin-top: 26px; display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.tw-btn-main, .tw-btn-ghost { display: inline-flex; align-items: center; padding: 11px 26px; border-radius: 11px; font-size: 14px; font-weight: 600; transition: all .2s; }
.tw-btn-main { background: #07c160; color: #fff; }
.tw-btn-main:hover { background: #06ad56; color: #fff; }
.tw-btn-ghost { background: #fff; border: 1.5px solid #e5e7eb; color: #14181f; }
.tw-btn-ghost:hover { border-color: #07c160; color: #059048; }

@media (max-width: 768px) {
  .tw-hero { padding-top: 36px; }
  .tw-hero h1 { font-size: 24px; }
  .tw-info { grid-template-columns: 1fr; }
}

/* 工具交互面板（表单 + 结果） */
.tw-panel { border: 1px solid #eef2f0; border-radius: 18px; background: #fff; padding: 28px 26px; box-shadow: 0 12px 32px rgba(16, 24, 40, .05); }
.tw-panel-hd h2 { font-size: 19px; font-weight: 800; color: #14181f; margin-bottom: 8px; }
.tw-panel-hd p { font-size: 13px; color: #6b7280; line-height: 1.7; margin: 0 0 20px; }
.tw-form { display: grid; grid-template-columns: 1fr; gap: 14px; }
.tw-field { display: flex; flex-direction: column; gap: 7px; }
.tw-field label { font-size: 12.5px; font-weight: 600; color: #374151; }
.tw-field input { height: 46px; border: 1.5px solid #e5e7eb; border-radius: 11px; padding: 0 14px; font-size: 14px; color: #14181f; outline: none; transition: border .2s; background: #fff; }
.tw-field input:focus { border-color: #07c160; }
.tw-field textarea { min-height: 132px; border: 1.5px solid #e5e7eb; border-radius: 11px; padding: 12px 14px; font-size: 14px; line-height: 1.75; color: #14181f; outline: none; resize: vertical; background: #fff; font-family: inherit; transition: border .2s; }
.tw-field textarea:focus { border-color: #07c160; }
.tw-field select { height: 46px; border: 1.5px solid #e5e7eb; border-radius: 11px; padding: 0 12px; font-size: 14px; color: #14181f; outline: none; background: #fff; font-family: inherit; }
.tw-field select:focus { border-color: #07c160; }
.tw-field .tw-hint { font-size: 11.5px; color: #9ca3af; }
.tw-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.tw-form-btns { grid-column: 1 / -1; display: flex; gap: 12px; margin-top: 6px; }
.tw-form-btns button { cursor: pointer; font-family: inherit; }
.tw-form-btns .tw-btn-main { border: none; }
/* IT 类工具公共补充 */
.tw-field.tw-full, .tw-form .tw-full { grid-column: 1 / -1; }
.tt-out { background: #f7f8fa; border: 1px solid #eef2f0; border-radius: 12px; padding: 12px 14px; font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 13px; line-height: 1.7; white-space: pre-wrap; word-break: break-all; color: #1f2937; max-height: 420px; overflow: auto; margin: 0; }
.tt-out.err { color: #dc2626; background: #fef7f7; border-color: #fecaca; }
.tt-acts { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.tt-acts button { padding: 7px 16px; font-size: 12.5px; font-weight: 600; border-radius: 9px; border: 1.5px solid #e5e7eb; background: #fff; color: #374151; cursor: pointer; font-family: inherit; transition: all .2s; }
.tt-acts button:hover { border-color: #07c160; color: #059048; }
.tw-result { margin-top: 20px; }
.tw-result:empty { display: none; }
.tw-step { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border-radius: 12px; border: 1px solid #eef2f0; margin-bottom: 10px; background: #fafbfb; }
.tw-step.ok { background: #f0fdf5; border-color: #d3f5e0; }
.tw-step.err { background: #fef2f2; border-color: #fecaca; }
.tw-step-bd { flex: 1; min-width: 0; }
.tw-step-t { font-size: 14px; font-weight: 700; color: #14181f; margin-bottom: 4px; }
.tw-step-d { font-size: 13px; color: #4b5563; line-height: 1.75; white-space: pre-wrap; word-break: break-word; }
.tw-summary { font-size: 13.5px; font-weight: 700; padding: 12px 16px; border-radius: 12px; margin-bottom: 14px; }
.tw-summary.ok { background: #ecfdf5; color: #059669; border: 1px solid #a7f3d0; }
.tw-summary.err { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; }

/* API IP白名单字段（调用 access_token 类工具页共用，与 accesstoken 页同款样式） */
.tw-ipfield .tw-ip-row { display: flex; align-items: center; gap: 10px; }
.tw-ipfield .tw-ip-input { flex: 1 1 auto; min-width: 0; }
.tw-ipfield .tw-ip-input:disabled { background: #f9fafb; color: #4b5563; -webkit-text-fill-color: #4b5563; opacity: 1; cursor: not-allowed; }
.tw-ipfield .tw-ip-copy, .tw-ipfield .tw-ip-refresh { flex: 0 0 auto; font-size: 12.5px; font-weight: 600; color: #059048; background: none; border: none; cursor: pointer; font-family: inherit; }
.tw-ipfield .tw-ip-note { font-size: 12px; line-height: 1.8; color: #4b6354; padding: 10px 14px; border-radius: 10px; background: #f6faf7; border: 1px solid #e3f0e8; }
.tw-ipfield .tw-ip-note a { color: #059048; }

@media (max-width: 768px) {
  .tw-panel { padding: 22px 18px; }
  .tw-form { grid-template-columns: 1fr; }
  .tw-row { grid-template-columns: 1fr; }
}

/* 工具页扫码登录门禁遮罩（assets/auth.js 动态创建） */
html.ta-locked, html.ta-locked body { overflow: hidden; }
.ta-mask { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(15, 23, 42, .55); }
.ta-dlg { width: 340px; max-width: 100%; background: #fff; border-radius: 18px; padding: 26px 22px 20px; text-align: center; box-shadow: 0 24px 60px rgba(16, 24, 40, .28); }
.ta-dlg-hd b { display: block; font-size: 17px; font-weight: 800; color: #14181f; }
.ta-dlg-hd span { display: block; margin-top: 8px; font-size: 12.5px; color: #6b7280; line-height: 1.7; }
.ta-qr { width: 200px; height: 200px; margin: 18px auto 10px; display: block; border: 1px solid #eef2f0; border-radius: 12px; background: #fff; }
.ta-tip { font-size: 13px; color: #4b5563; line-height: 1.7; min-height: 20px; margin: 0; }
.ta-dlg-ft { margin-top: 12px; }
.ta-retry { font-size: 12.5px; font-weight: 600; color: #059048; }

/* 页脚社交入口改为文字后的尺寸适配（仅工具页生效） */
.fsoc a { width: auto; height: 32px; padding: 0 12px; font-size: 12.5px; font-weight: 600; color: rgba(255, 255, 255, .86); }
