/* ============================================================
   app.css — croptool.net 改版新增样式
   只新增站点原 site.css / editor.css 里没有的部件；已有部件（.panel / .btn /
   .icon-btn / .upload-zone / .canvas-actions / .toast / .busy-mask）一律复用。
   ============================================================ */

/* ---------- 顶部导航：图片工具大菜单 ---------- */
.drop-menu.mega{
  min-width:640px;left:auto;right:-40px;transform:translateY(6px);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px 10px;padding:12px;
}
.drop:hover .drop-menu.mega,.drop:focus-within .drop-menu.mega{transform:translateY(0)}
.drop-menu .mega-col{display:flex;flex-direction:column;gap:1px;min-width:0}
.drop-menu .mega-title{
  font-size:11.5px;font-weight:700;color:var(--brand-strong);letter-spacing:1px;
  padding:6px 11px 4px;text-transform:uppercase;
}
.drop-menu.mega a{padding:7px 11px}
.drop-menu.mega a b{font-size:13px}
.drop-menu.mega a small{font-size:11px}

/* ---------- 页脚：品牌 + 4 组工具 = 5 列一行 ---------- */
.footer-inner.cols5{grid-template-columns:1.6fr 1fr 1fr 1fr 1fr;gap:26px}

/* ---------- 首页：快捷比例直达卡 ---------- */
.ratio-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:26px 0 30px}
.ratio-card{display:flex;flex-direction:column;gap:6px;align-items:flex-start;background:#fff;
  border:1px solid var(--line,#e5e7eb);border-radius:14px;padding:16px 18px;text-decoration:none;
  box-shadow:0 1px 2px rgba(15,23,42,.05);transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}
.ratio-card:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(67,56,202,.12);border-color:#c7d2fe}
.ratio-card b{font-size:21px;font-weight:800;letter-spacing:.5px;
  background:linear-gradient(120deg,#4338ca,#0ea5e9);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:#4338ca}
.ratio-card span{font-size:12.5px;color:var(--ink-2,#64748b)}

/* ---------- 导航：当前分组高亮 ---------- */
.desk-nav .drop.on>.drop-a{color:var(--brand-strong,#4338ca)}

/* ---------- 修正：导航里的渐变按钮文字被 .desk-nav > a / .mnav-panel a 的
   color 覆盖成了深灰，压在靛蓝渐变上几乎看不见（老站同样存在，这里修掉） ---------- */
.desk-nav .nav-cta,.mnav-panel .btn{color:#fff}
.desk-nav .nav-cta:hover{color:#fff}

/* ============================================================
   工具页通用版式：左预览 + 右参数（与裁剪编辑器同一套骨架）
   ============================================================ */
.tool-app{width:100%;padding:0 14px 20px}
.tl-body{
  display:flex;flex-direction:row;gap:14px;min-height:0;
  padding:8px 0 16px;align-items:stretch;
}
.tl-stage{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;min-height:0}
.tl-prev{
  flex:1 1 auto;min-height:340px;position:relative;
  display:flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:16px;background:var(--card);
  box-shadow:0 10px 30px -12px rgba(24,37,64,.16);overflow:hidden;padding:14px;
}
.tl-prev canvas{
  display:block;max-width:100%;max-height:100%;border-radius:8px;
  background:conic-gradient(#eef1fa 25%,#fff 0 50%,#eef1fa 0 75%,#fff 0) 0 0/22px 22px;
  box-shadow:0 0 0 1px var(--line);
}
.tl-prev canvas.pickable{cursor:crosshair;touch-action:none}
.tl-prev canvas.paintable{cursor:crosshair;touch-action:none}
.tl-panels{
  flex:0 0 340px;width:340px;min-height:0;overflow-y:auto;
  display:flex;flex-direction:column;gap:6px;
}
.tl-panels .actions-panel{display:flex;flex-direction:column;gap:8px}

/* ---------- 表单控件 ---------- */
.fld{margin:9px 0 0}
.fld:first-child{margin-top:0}
.fld>label{display:block;font-size:12.5px;font-weight:600;color:var(--muted-fg);margin-bottom:5px;letter-spacing:.3px}
.inp-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.inp{
  width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;
  padding:7px 9px;font-size:13.5px;color:var(--ink);outline:none;background:#fff;
  font-family:inherit;
}
.inp:focus{border-color:var(--pink,#cfd6ff);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.inp.sm{width:74px;text-align:center}
.inp.xs{width:58px;text-align:center}
textarea.inp{resize:vertical;min-height:76px;font-size:12.5px;line-height:1.6}
.unit{font-size:12.5px;color:var(--muted-fg)}
.fld-note{font-size:11.5px;color:var(--muted-fg);line-height:1.6;margin-top:6px}

.rng-head{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;font-weight:600;color:var(--muted-fg)}
.rng-val{color:var(--brand-strong);font-weight:700;font-variant-numeric:tabular-nums}
input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;height:22px;background:transparent;margin:0;cursor:pointer;
}
input[type=range]::-webkit-slider-runnable-track{height:5px;border-radius:99px;background:linear-gradient(90deg,#6366f1,#0ea5e9)}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:17px;height:17px;border-radius:50%;
  background:#fff;border:2px solid var(--brand);margin-top:-6px;box-shadow:0 1px 4px rgba(24,37,64,.28);
}
input[type=range]::-moz-range-track{height:5px;border-radius:99px;background:linear-gradient(90deg,#6366f1,#0ea5e9)}
input[type=range]::-moz-range-thumb{width:15px;height:15px;border-radius:50%;background:#fff;border:2px solid var(--brand)}

.seg{display:grid;gap:6px}
.seg.c2{grid-template-columns:repeat(2,1fr)}
.seg.c3{grid-template-columns:repeat(3,1fr)}
.seg.c4{grid-template-columns:repeat(4,1fr)}
.seg button,.seg a{
  border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 4px;font-size:12.5px;
  cursor:pointer;color:var(--ink);text-align:center;line-height:1.3;font-family:inherit;
}
.seg button small{display:block;font-size:10.5px;color:var(--muted-fg);margin-top:2px}
.seg button.active{border-color:var(--brand);background:rgba(99,102,241,.11);color:var(--brand-strong);font-weight:600}
.seg button.active small{color:var(--brand-strong);opacity:.8}
.seg button:hover:not(.active){border-color:var(--pink,#cfd6ff)}

.pos-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;width:132px}
.pos-grid button{
  height:38px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;
  font-size:13px;color:var(--ink);
}
.pos-grid button.active{border-color:var(--brand);background:rgba(99,102,241,.13);font-weight:700}
.pos-grid button:hover:not(.active){border-color:var(--pink,#cfd6ff)}

.sw-row{display:flex;align-items:center;gap:8px;padding:5px 0}
.sw{position:relative;display:inline-flex;flex:0 0 auto}
.sw input{position:absolute;opacity:0;width:0;height:0}
.sw i{
  width:38px;height:21px;border-radius:99px;background:#dfe4f3;display:block;
  transition:background .18s;position:relative;cursor:pointer;
}
.sw i::after{
  content:"";position:absolute;top:2px;left:2px;width:17px;height:17px;border-radius:50%;
  background:#fff;transition:transform .18s;box-shadow:0 1px 3px rgba(24,37,64,.3);
}
.sw input:checked + i{background:var(--brand)}
.sw input:checked + i::after{transform:translateX(17px)}
.sw-row label{font-size:13px;color:var(--ink);cursor:pointer;user-select:none}

.swatches{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.swatch{
  width:26px;height:26px;border-radius:8px;border:1px solid var(--line-strong);
  cursor:pointer;padding:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.5);
}
.swatch.active{outline:2px solid var(--brand);outline-offset:1px}
input[type=color]{
  width:38px;height:26px;border:1px solid var(--line-strong);border-radius:8px;
  background:#fff;padding:1px;cursor:pointer;
}

.stat{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:8px}
.stat>div{background:var(--muted,#eef1fc);border-radius:9px;padding:7px 9px;min-width:0}
.stat b{display:block;font-size:13.5px;color:var(--ink);word-break:break-all;font-variant-numeric:tabular-nums}
.stat span{font-size:11px;color:var(--muted-fg)}
.stat>div.ok b{color:#16a34a}
.stat>div.warn b{color:#d97706}

.tl-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:8px 10px;margin-top:10px}
.tl-actions .spacer{flex:1 1 auto}
.tl-actions .btn{font-size:14px}
.zoom-tag{font-size:12.5px;color:var(--muted-fg);font-variant-numeric:tabular-nums;padding:0 6px}

/* 批量列表 */
.batch-list{display:flex;flex-direction:column;gap:5px;max-height:230px;overflow-y:auto;margin-top:8px}
.batch-row{
  display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);
  border-radius:9px;padding:5px 8px;font-size:12px;min-width:0;
}
.batch-row .bi{width:30px;height:30px;border-radius:6px;object-fit:cover;flex:0 0 auto;background:#eef1fc}
.batch-row .bn{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
.batch-row .bs{flex:0 0 auto;color:var(--muted-fg);font-variant-numeric:tabular-nums}
.batch-row .bs.ok{color:#16a34a;font-weight:600}
.batch-row .bx{border:0;background:transparent;color:var(--muted-fg);cursor:pointer;font-size:14px;padding:0 2px}
.batch-row .bx:hover{color:#d54941}

/* 取色器 */
.pick-color{
  display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);
  border-radius:11px;padding:9px 11px;
}
.pick-color .pc-chip{width:44px;height:44px;border-radius:11px;border:1px solid var(--line-strong);flex:0 0 auto}
.pick-color .pc-tx{min-width:0;flex:1 1 auto}
.pick-color .pc-tx b{display:block;font-size:15px;letter-spacing:.5px;font-variant-numeric:tabular-nums}
.pick-color .pc-tx span{display:block;font-size:11.5px;color:var(--muted-fg);margin-top:2px}
.picked-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.picked-list .pl{
  width:34px;height:34px;border-radius:9px;border:1px solid var(--line-strong);cursor:pointer;
  position:relative;
}
.picked-list .pl::after{content:attr(data-hex);position:absolute;left:50%;top:105%;transform:translateX(-50%);
  font-size:9px;color:var(--muted-fg);white-space:nowrap;opacity:0}
.picked-list .pl:hover::after{opacity:1}

/* 信息表 */
.info-rows{display:flex;flex-direction:column;gap:4px}
.info-rows div{display:flex;gap:8px;font-size:12.5px;line-height:1.7;border-bottom:1px dashed var(--line);padding:3px 0}
.info-rows div:last-child{border-bottom:0}
.info-rows span{flex:0 0 96px;color:var(--muted-fg)}
.info-rows b{flex:1 1 auto;min-width:0;color:var(--ink);word-break:break-all;font-weight:600}

.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace}

@media (max-width:1100px){
  .footer-inner.cols5{grid-template-columns:1fr 1fr 1fr;gap:24px}
  .ratio-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:960px){
  .tl-body{flex-direction:column;min-height:0}
  .tl-panels{flex:0 0 auto;width:100%;overflow:visible}
  .tl-prev{min-height:min(52vh,440px)}
  .drop-menu.mega{min-width:0;width:min(92vw,560px);right:auto;left:50%;transform:translateX(-50%) translateY(6px);
    grid-template-columns:repeat(2,minmax(0,1fr))}
  .drop:hover .drop-menu.mega,.drop:focus-within .drop-menu.mega{transform:translateX(-50%) translateY(0)}
  .footer-inner.cols5{grid-template-columns:1fr 1fr;gap:22px}
}
@media (max-width:640px){
  .tool-app{padding:0 10px 16px}
  .tl-prev{min-height:min(46vh,360px);padding:10px;border-radius:14px}
  .tl-actions .btn{flex:1 1 auto}
  .pos-grid{width:126px}
  .batch-row .bi{width:26px;height:26px}
  .info-rows span{flex:0 0 78px}
  .stat{grid-template-columns:1fr}
  .footer-inner.cols5{grid-template-columns:1fr}
}
