
:root{--blue:#1769ff;--blue2:#20a6ff;--ink:#10203d;--muted:#65728a;--line:#e4ebf5;--bg:#f4f8fd;--card:#fff;--danger:#ff4d55;--shadow:0 14px 34px rgba(33,86,160,.09);--soft:#f8fbff}
*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",Arial,sans-serif;background:linear-gradient(135deg,#edf6ff 0%,#fff 42%,#f7fbff 100%);color:var(--ink);font-size:14px}button,input,select,textarea{font:inherit}button{user-select:none}.hidden{display:none!important}
.logo{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:850;letter-spacing:-.5px}.mark,.mini{width:36px;height:36px;border-radius:11px;background:linear-gradient(135deg,#1fc7ff,#155dff);position:relative;box-shadow:0 10px 22px rgba(23,105,255,.20)}.mark:before,.mark:after{content:"";position:absolute;border:3px solid #fff;border-radius:5px}.mark:before{inset:8px}.mark:after{right:8px;bottom:8px;width:10px;height:10px;border-left:0;border-top:0}
.primary,.ghost,.danger{height:42px;border-radius:9px;padding:0 20px;cursor:pointer;font-weight:800;transition:.16s}.primary{border:0;background:linear-gradient(135deg,#188bff,#155dff);color:#fff;box-shadow:0 10px 22px rgba(23,105,255,.20)}.ghost{background:#fff;border:1px solid #dbe5f4;color:#17305c}.danger{background:#fff;border:1px solid #ff9aa0;color:#e43b43}.link{border:0;background:transparent;color:var(--blue);cursor:pointer;font-weight:800}.tiny{height:31px;border:1px solid #dce5f2;background:#fff;border-radius:8px;padding:0 10px;color:#203454;cursor:pointer}.toast{position:fixed;right:20px;bottom:20px;background:#10203d;color:#fff;padding:12px 16px;border-radius:10px;box-shadow:var(--shadow);z-index:20}
/* 登录页 */
.login-page{min-height:100vh;display:grid;grid-template-columns:minmax(620px,1.05fr) minmax(500px,.95fr);background:#fff}.login-brand{position:relative;overflow:hidden;padding:42px 0 34px 64px;background:radial-gradient(circle at 60% 20%,#fff 0,#eaf4ff 50%,#dcecff 100%)}.login-brand .logo{position:relative;z-index:2}.brand-center{text-align:center;margin-top:100px;position:relative;z-index:2}.brand-center h1{font-size:44px;margin:0 0 15px}.brand-center p{font-size:19px;color:#64718b;margin:0}.hero-photos{position:absolute;left:0;right:35px;top:320px;height:350px}.paper{position:absolute;background:#fff;padding:15px;border-radius:10px;box-shadow:0 20px 45px rgba(61,84,120,.2);transform:rotate(-10deg);left:-10px;top:35px}.paper.after{left:430px;top:25px;transform:rotate(2deg);box-shadow:0 0 0 8px rgba(41,142,255,.14),0 20px 50px rgba(27,104,230,.22)}.paper img{display:block;width:340px;height:220px;object-fit:cover;border-radius:5px}.feature-row{position:absolute;bottom:56px;left:70px;right:70px;display:grid;grid-template-columns:repeat(4,1fr);gap:28px;text-align:center}.feature i{display:inline-grid;place-items:center;width:64px;height:64px;border-radius:17px;background:#fff;color:var(--blue);font-style:normal;font-size:28px;box-shadow:var(--shadow)}.feature b{display:block;margin-top:12px;font-size:17px}.feature span{display:block;margin-top:5px;color:#65728a;font-size:13px}.copyright{position:absolute;bottom:20px;left:0;right:0;text-align:center;color:#76849b}.login-panel{display:flex;align-items:center;justify-content:center;padding:54px}.login-card{width:500px;background:rgba(255,255,255,.92);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:45px 50px;text-align:center}.lock{width:64px;height:64px;margin:auto;border-radius:50%;background:#eef5ff;display:grid;place-items:center;font-size:29px;color:var(--blue)}.login-card h2{font-size:29px;margin:21px 0 8px}.login-card p{color:#68758e;margin:0 0 32px}.field{text-align:left;margin:18px 0}.field label{display:block;margin-bottom:8px;font-weight:750}.field input,.control input,.control select,.control textarea{width:100%;border:1px solid #d9e2f1;border-radius:10px;background:#fff;color:var(--ink);outline:none}.field input,.control input,.control select{height:42px;padding:0 12px}.control textarea{min-height:64px;padding:9px 11px;resize:vertical}.field input:focus,.control input:focus,.control select:focus,.control textarea:focus{border-color:var(--blue);box-shadow:0 0 0 4px rgba(23,105,255,.10)}.login-card .primary{width:100%;margin-top:20px}.err{color:#e33e48;height:22px;margin-top:10px}.note-line{display:flex;align-items:center;gap:14px;color:#778399;margin-top:30px}.note-line:before,.note-line:after{content:"";height:1px;background:#e5ebf5;flex:1}
/* 工作台：100% 屏幕直接看完整功能 */
.app{min-height:100vh;display:grid;grid-template-columns:205px minmax(0,1fr)}.side{background:rgba(255,255,255,.88);backdrop-filter:blur(16px);border-right:1px solid var(--line);padding:18px 13px;display:flex;flex-direction:column;gap:14px;position:sticky;top:0;height:100vh}.side .logo{font-size:22px}.side .mark{width:34px;height:34px}.uploadBtn{height:43px;border:0;border-radius:9px;background:linear-gradient(135deg,#197fff,#125dff);color:#fff;font-weight:850;cursor:pointer}.nav{display:flex;flex-direction:column;gap:4px}.nav button,.folder{display:flex;justify-content:space-between;align-items:center;height:36px;border:0;background:transparent;border-radius:9px;padding:0 10px;color:#344562;font-weight:750;cursor:pointer;font-size:13px}.nav button.active,.folder:hover{background:#edf4ff;color:var(--blue)}.badge{background:#e4eaf3;padding:2px 8px;border-radius:99px;color:#56657c;font-size:12px}.folder-title{display:flex;justify-content:space-between;color:#506078;border-top:1px solid var(--line);padding-top:14px;font-size:13px}.folders{display:grid;gap:3px}.folder span:first-child{display:flex;align-items:center;gap:8px}.folder-icon{width:14px;height:11px;border:1.6px solid #d19b00;border-radius:2px;background:#ffd95b;display:inline-block;position:relative;flex:0 0 auto}.folder-icon:before{content:"";position:absolute;left:1px;top:-5px;width:8px;height:5px;border-radius:2px 2px 0 0;background:#ffd95b;border:1.6px solid #d19b00;border-bottom:0}.side-foot{margin-top:auto;color:#687790;font-size:12px}.side-foot .mini{width:31px;height:31px;border-radius:8px;margin-bottom:6px}.main{padding:14px 20px 18px;min-width:0}.topbar{height:30px;display:flex;justify-content:flex-end;align-items:center;gap:18px;margin-bottom:8px}.topbar button{border:0;background:transparent;color:#1c2c49;cursor:pointer;font-weight:750}.workspace{background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:18px;min-height:calc(100vh - 70px);display:flex;flex-direction:column}.title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:18px}.title-row h1{margin:0;font-size:25px;letter-spacing:-.2px}.title-row p{margin:7px 0 0;color:#63718a}.tutorial{height:36px;border:1px solid #dce6f4;background:#fff;border-radius:9px;padding:0 15px;color:#263e68;font-weight:750;cursor:pointer;white-space:nowrap}.steps{display:flex;align-items:center;gap:10px;margin:16px 0 16px}.step{display:flex;align-items:center;gap:7px;color:#6a768c;white-space:nowrap;font-size:13px}.num{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#dfe7f3;font-weight:850}.step.on{color:var(--blue);font-weight:850}.step.on .num{background:var(--blue);color:#fff}.line{height:2px;background:#e4ebf5;flex:0 1 86px;min-width:30px}.grid{display:grid;grid-template-columns:minmax(360px,31%) minmax(470px,1fr) 275px;gap:14px;align-items:stretch;flex:1;min-height:0}.panel{background:#fff;border:1px solid var(--line);border-radius:14px;padding:13px}.drop{height:126px;border:1.5px dashed #a9c5f4;border-radius:12px;display:grid;place-items:center;text-align:center;color:#69778f;background:linear-gradient(180deg,#fbfdff,#f7fbff);cursor:pointer}.drop strong{display:block;font-size:14px;color:#18315a;margin:6px 0}.drop span{font-size:12px}.dropIcon{font-size:32px;color:var(--blue)}.thumb-head{display:flex;justify-content:space-between;align-items:center;margin:12px 0 10px}.thumbs{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;align-content:start}.thumb{height:64px;border-radius:8px;border:2px solid transparent;overflow:hidden;position:relative;background:#f4f7fb;cursor:pointer}.thumb.selected{border-color:var(--blue);box-shadow:0 0 0 3px rgba(23,105,255,.12)}.thumb img{width:100%;height:100%;object-fit:cover}.check{position:absolute;right:3px;top:3px;background:var(--blue);color:#fff;border-radius:50%;width:16px;height:16px;display:grid;place-items:center;font-size:11px}.add-tile{height:64px;border-radius:8px;border:1px solid #dfe7f3;display:grid;place-items:center;color:#7888a2;font-size:28px;background:#fafcff;cursor:pointer}.preview-wrap{position:relative}.preview{display:grid;grid-template-columns:1fr 1fr;gap:0;min-height:350px}.preview h3{font-size:15px;margin:0 0 10px}.before,.after{padding:0 7px}.before{border-right:1px solid var(--line)}.previewImg{height:300px;border-radius:10px;background:linear-gradient(135deg,#f3f7fc,#f9fbff);display:grid;place-items:center;overflow:hidden}.previewImg img{width:100%;height:100%;object-fit:contain}.empty{color:#7a879c;text-align:center;padding:18px}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-top:10px}.toolBtns{display:flex;gap:7px}.settings{padding:13px;max-height:calc(100vh - 215px);overflow:auto}.settings h3,.download h3{margin:0 0 10px;font-size:15px}.switch-row{display:grid;grid-template-columns:22px 1fr 38px;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid #f0f3f8}.switch-row:last-child{border-bottom:0}.switch-row b{font-size:13px}.switch-row small{color:#78869d;font-size:11px}.switch{width:37px;height:20px;border-radius:99px;background:#c8d2e0;position:relative;cursor:pointer}.switch.on{background:var(--blue)}.switch:after{content:"";position:absolute;width:16px;height:16px;background:#fff;border-radius:50%;top:2px;left:2px;transition:.15s}.switch.on:after{left:19px}.control{margin:10px 0}.control label{font-size:12px;color:#5c6880;font-weight:850;display:block;margin-bottom:6px}.seg{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.seg button{height:34px;border:1px solid #dce5f2;border-radius:8px;background:#fff;cursor:pointer;font-weight:780;color:#273c62}.seg button.active{border-color:var(--blue);color:var(--blue);box-shadow:0 0 0 3px rgba(23,105,255,.08)}.custom-size{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.ai-box{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.ai-box small{display:block;color:#6f7c93;margin-bottom:6px}.download{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.download a{display:block;text-align:center;text-decoration:none;height:38px;line-height:38px;border-radius:9px;background:#eef3fa;color:#8a97aa;font-weight:850;pointer-events:none}.download a.ready{background:linear-gradient(135deg,#188bff,#155dff);color:#fff;pointer-events:auto}.progress-panel{display:grid;grid-template-columns:310px 1fr;gap:12px;margin-top:12px}.progress-card{display:flex;align-items:center;gap:14px}.ring{width:55px;height:55px;border-radius:50%;background:conic-gradient(var(--blue) calc(var(--p)*1%),#e8eef7 0);display:grid;place-items:center;position:relative;flex:0 0 auto}.ring:after{content:"";position:absolute;inset:7px;border-radius:50%;background:#fff}.ring span{position:relative;z-index:1;font-weight:850;font-size:13px}.bar{width:150px;height:6px;background:#e4ebf5;border-radius:99px;margin:9px 0;overflow:hidden}.bar i{display:block;height:100%;background:var(--blue);border-radius:99px}.progress-card span,.current{color:#65728a;font-size:12px}.actions{display:flex;gap:14px;align-items:center;justify-content:center;border-top:1px solid var(--line);padding-top:12px;margin-top:12px}.actions button{min-width:170px;height:40px}
@media (max-width:1400px){.app{grid-template-columns:190px minmax(0,1fr)}.grid{grid-template-columns:minmax(330px,30%) minmax(420px,1fr) 260px;gap:12px}.previewImg{height:270px}.preview{min-height:320px}.thumb{height:58px}.add-tile{height:58px}.side{padding:16px 12px}.main{padding:12px 16px}.workspace{padding:16px}.settings{max-height:calc(100vh - 205px)}}
@media (max-width:1180px){.app{grid-template-columns:1fr}.side{position:static;height:auto}.grid{grid-template-columns:1fr}.settings{max-height:none}.progress-panel{grid-template-columns:1fr}.login-page{grid-template-columns:1fr}.login-brand{display:none}}


/* v1.1.5 紧凑适配：100% 屏幕尽量完整显示，页面本身不再纵向滚动 */
html, body { height: 100%; overflow: hidden; }
body { font-size: 13px; }
.app { height: 100vh; min-height: 0; grid-template-columns: 170px minmax(0,1fr); overflow: hidden; }
.side { height: 100vh; padding: 14px 10px; gap: 11px; overflow: hidden; }
.side .logo { font-size: 18px; gap: 8px; }
.side .mark { width: 30px; height: 30px; border-radius: 9px; }
.uploadBtn { height: 38px; border-radius: 8px; }
.nav button, .folder { height: 31px; padding: 0 8px; font-size: 12px; }
.folder-title { padding-top: 10px; font-size: 12px; }
.folders { min-height: 120px; }
.empty-album { height: 120px; border-radius: 10px; background: #f5f8fc; color: #8a98ad; display: grid; place-items: center; text-align: center; padding: 12px; line-height: 1.7; }
.empty-album .album-icon { font-size: 28px; opacity: .7; display: block; margin-bottom: 4px; }
.side-foot { font-size: 11px; }
.side-foot .mini { width: 28px; height: 28px; }
.main { height: 100vh; overflow: hidden; padding: 10px 14px 12px; }
.topbar { height: 24px; margin-bottom: 6px; gap: 14px; font-size: 12px; }
.workspace { height: calc(100vh - 42px); min-height: 0; padding: 14px; border-radius: 14px; overflow: hidden; }
.title-row h1 { font-size: 22px; }
.title-row p { margin-top: 5px; font-size: 12px; }
.tutorial { height: 32px; padding: 0 13px; font-size: 12px; }
.steps { margin: 12px 0 12px; gap: 8px; }
.step { font-size: 12px; }
.num { width: 21px; height: 21px; }
.line { flex-basis: 56px; min-width: 24px; }
.grid { flex: 0 0 auto; height: clamp(370px, calc(100vh - 300px), 500px); grid-template-columns: minmax(330px, 31%) minmax(455px, 1fr) 255px; gap: 10px; }
.panel { padding: 10px; border-radius: 12px; }
.drop { height: 112px; border-radius: 10px; }
.dropIcon { font-size: 28px; }
.drop strong { font-size: 13px; margin: 4px 0; }
.drop span { font-size: 11px; }
.thumb-head { margin: 9px 0 8px; }
.thumbs { grid-template-columns: repeat(5, minmax(48px, 1fr)); gap: 7px; max-height: calc(100% - 160px); overflow: auto; padding-right: 2px; }
.thumb, .add-tile { height: 56px; }
.preview { height: 100%; min-height: 0; }
.preview h3 { font-size: 14px; margin-bottom: 8px; }
.previewImg { height: calc(100% - 52px); min-height: 230px; }
.toolbar { margin-top: 8px; }
.tiny { height: 28px; padding: 0 9px; font-size: 12px; }
.settings { height: 100%; max-height: none; padding: 10px; overflow-y: auto; overflow-x: hidden; }
.settings h3, .download h3 { font-size: 14px; margin-bottom: 7px; }
.switch-row { grid-template-columns: 18px 1fr 34px; padding: 5px 0; gap: 6px; }
.switch-row b { font-size: 12px; }
.switch-row small { font-size: 10px; }
.switch { width: 34px; height: 18px; }
.switch:after { width: 14px; height: 14px; }
.switch.on:after { left: 18px; }
.control { margin: 7px 0; }
.control label { font-size: 11px; margin-bottom: 5px; }
.field input, .control input, .control select { height: 34px; border-radius: 8px; font-size: 12px; }
.control textarea { min-height: 52px; font-size: 12px; }
.seg button { height: 30px; font-size: 12px; }
.ai-box, .download { margin-top: 9px; padding-top: 9px; }
.download a { height: 34px; line-height: 34px; }
.progress-panel { flex: 0 0 auto; grid-template-columns: 270px 1fr; gap: 10px; margin-top: 10px; }
.progress-card { padding: 9px 10px; }
.ring { width: 48px; height: 48px; }
.bar { width: 126px; margin: 7px 0; }
.current { padding: 10px; }
.actions { flex: 0 0 auto; padding-top: 9px; margin-top: 9px; gap: 12px; }
.actions button { min-width: 145px; height: 36px; }
@media (max-width: 1400px) {
  .app { grid-template-columns: 164px minmax(0,1fr); }
  .main { padding: 8px 12px 10px; }
  .workspace { height: calc(100vh - 36px); padding: 12px; }
  .grid { height: clamp(350px, calc(100vh - 285px), 470px); grid-template-columns: minmax(310px, 30%) minmax(410px, 1fr) 245px; gap: 9px; }
  .drop { height: 104px; }
  .thumb, .add-tile { height: 52px; }
  .previewImg { min-height: 220px; }
  .settings { height: 100%; max-height: none; }
  .progress-panel { margin-top: 8px; }
  .actions { margin-top: 8px; }
}


/* v1.1.6 终版紧凑修复：不让页面主体产生纵向滚动，底部按钮完整可见 */
html, body { width:100%; height:100%; max-height:100%; overflow:hidden !important; }
#app { height:100vh; overflow:hidden; }
.app { height:100vh; max-height:100vh; overflow:hidden; }
.main { height:100vh; max-height:100vh; overflow:hidden; display:flex; flex-direction:column; padding:8px 12px 8px; }
.topbar { flex:0 0 24px; height:24px; margin-bottom:6px; }
.workspace { flex:1 1 auto; height:auto !important; min-height:0 !important; padding:12px 14px 10px; overflow:hidden; display:flex; flex-direction:column; }
.title-row { flex:0 0 auto; }
.title-row h1 { font-size:20px; line-height:1.15; }
.title-row p { font-size:12px; line-height:1.35; }
.steps { flex:0 0 auto; margin:10px 0 10px; }
.grid { flex:0 0 auto; height:clamp(310px, calc(100vh - 430px), 410px) !important; min-height:0; grid-template-columns:minmax(320px,31%) minmax(430px,1fr) 250px; }
.panel { min-height:0; }
.drop { height:98px; }
.thumbs { max-height:calc(100% - 142px); }
.thumb, .add-tile { height:50px; }
.preview { height:100%; min-height:0; }
.previewImg { height:calc(100% - 46px) !important; min-height:0; }
.toolbar { margin-top:6px; }
.settings { height:100%; max-height:100%; overflow-y:auto; padding-right:8px; }
.settings::-webkit-scrollbar { width:6px; }
.settings::-webkit-scrollbar-thumb { background:#c8d6ea; border-radius:99px; }
.switch-row { padding:4px 0; }
.control { margin:6px 0; }
.progress-panel { flex:0 0 58px; min-height:58px; margin-top:8px; grid-template-columns:280px 1fr; }
.progress-card { min-height:58px; padding:8px 10px; }
.ring { width:44px; height:44px; }
.ring:after { inset:6px; }
.bar { height:5px; }
.current { min-height:58px; padding:8px 10px; }
.actions { flex:0 0 42px; min-height:42px; padding-top:8px; margin-top:8px; }
.actions button { height:34px; min-width:136px; }
.side { overflow:hidden; }
.folders { min-height:0; }
.empty-album { height:104px; font-size:12px; }
@media (max-height: 780px) {
  .workspace { padding:10px 12px 8px; }
  .title-row h1 { font-size:19px; }
  .title-row p { margin-top:3px; }
  .steps { margin:8px 0; }
  .grid { height:clamp(285px, calc(100vh - 410px), 360px) !important; }
  .drop { height:88px; }
  .thumb, .add-tile { height:46px; }
  .progress-panel { flex-basis:54px; min-height:54px; }
  .actions { flex-basis:38px; min-height:38px; }
  .actions button { height:32px; }
}


/* v1.1.7：将底部操作按钮移入最底部操作区，避免压在进度信息框上 */
.workspace { position: relative; }
.progress-panel { flex:0 0 58px; margin-top:8px; }
.actions {
  margin-top: auto !important;
  flex: 0 0 86px !important;
  min-height: 86px !important;
  padding-top: 18px !important;
  border-top: 1px solid var(--line);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  background: #fff;
}
.actions button { height:36px; min-width:150px; }
@media (max-height: 780px) {
  .actions { flex-basis: 72px !important; min-height:72px !important; padding-top:14px !important; }
  .actions button { height:34px; }
}


/* v1.1.9：最终布局修复——上方工作区自动放大，底部操作区压缩到固定高度 */
.workspace{
  height:calc(100vh - 38px) !important;
  padding:12px 14px 10px !important;
  overflow:hidden !important;
  display:flex !important;
  flex-direction:column !important;
}
.title-row{flex:0 0 auto !important;}
.steps{flex:0 0 auto !important;margin:8px 0 10px !important;}
.grid{
  flex:1 1 auto !important;
  height:auto !important;
  min-height:0 !important;
  margin-bottom:8px !important;
}
.upload-panel,.preview-wrap,.settings{height:100% !important;min-height:0 !important;}
.upload-panel{display:flex !important;flex-direction:column !important;}
.drop{flex:0 0 96px !important;height:96px !important;}
.thumbs{flex:1 1 auto !important;max-height:none !important;overflow:auto !important;align-content:start !important;padding-right:2px;}
.preview{height:100% !important;min-height:0 !important;}
.previewImg{height:calc(100% - 46px) !important;min-height:190px !important;}
.settings{max-height:100% !important;overflow-y:auto !important;}
.progress-panel{
  flex:0 0 60px !important;
  min-height:60px !important;
  margin-top:0 !important;
  grid-template-columns:260px 1fr !important;
}
.progress-card,.current{min-height:60px !important;padding:8px 10px !important;}
.actions{
  margin-top:8px !important;
  flex:0 0 48px !important;
  min-height:48px !important;
  padding:7px 0 0 !important;
  border-top:1px solid var(--line) !important;
  display:flex !important;
  align-items:flex-start !important;
  justify-content:center !important;
  background:#fff !important;
  gap:12px !important;
}
.actions button{height:34px !important;min-width:142px !important;}
@media (max-height:780px){
  .workspace{padding:10px 12px 8px !important;}
  .steps{margin:6px 0 8px !important;}
  .drop{flex-basis:86px !important;height:86px !important;}
  .progress-panel{flex-basis:54px !important;min-height:54px !important;}
  .progress-card,.current{min-height:54px !important;}
  .actions{flex-basis:42px !important;min-height:42px !important;padding-top:5px !important;}
  .actions button{height:32px !important;}
}

/* v1.1.9：接口实时处理状态与批量动态过渡 */
.thumb { position: relative; overflow: hidden; }
.thumb.processing::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(110deg, transparent 0%, rgba(37,99,235,.12) 45%, rgba(37,99,235,.28) 50%, rgba(37,99,235,.12) 55%, transparent 100%);
  animation: scanova-sweep 1.15s linear infinite;
}
.thumb .thumb-progress {
  position:absolute;
  left:0;
  bottom:0;
  height:3px;
  background:#1769ff;
  border-radius:999px;
  transition:width .35s ease;
  z-index:3;
}
.thumb.processing .check { animation: scanova-spin 1s linear infinite; }
.progress-card .bar i { transition: width .45s ease; }
.ring { transition: all .45s ease; }
.current { transition: background .3s ease, border-color .3s ease; }
@keyframes scanova-sweep { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
@keyframes scanova-spin { to { transform: rotate(360deg); } }

/* v1.2.2: 基于 v1.1.9 的稳定版界面微调，仅改前端，不改处理逻辑 */
:root{--soft-blue:#eef6ff;--deep-blue:#1769ff;--text-dark:#10213d}
.side{background:linear-gradient(180deg,#ffffff 0%,#f8fbff 100%) !important;box-shadow:8px 0 28px rgba(40,91,160,.06)}
.side .logo{letter-spacing:-.4px}.uploadBtn{box-shadow:0 10px 22px rgba(23,105,255,.22);font-size:15px}
.empty-album{height:118px;border-radius:14px;background:linear-gradient(180deg,#f3f7fd,#ffffff);display:grid;place-items:center;color:#8a97aa;text-align:center;border:1px solid #edf2fa}.album-icon{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#e8eef7;color:#94a3b8;margin-bottom:6px}
.drop{height:104px !important}.dropIcon{font-size:26px !important}.drop strong{margin:4px 0 !important}.panel{box-shadow:0 6px 22px rgba(15,45,90,.035)}
.grid{grid-template-columns:minmax(360px,31%) minmax(500px,1fr) 275px !important;gap:12px !important}.preview{min-height:410px !important}.previewImg{height:365px !important}.thumbs{max-height:190px;overflow:auto;padding-right:2px}
.progress-panel{grid-template-columns:260px 1fr !important;gap:10px !important;margin-top:10px !important}.progress-card{min-height:58px;padding:8px 12px !important}.ring{width:48px !important;height:48px !important}.bar{width:130px !important}.actions{padding-top:10px !important;margin-top:10px !important}.actions button{height:38px !important;min-width:150px !important}
.log-card{display:grid;gap:5px;align-content:center;min-height:58px;padding:8px 12px !important;background:linear-gradient(180deg,#ffffff,#f9fbff)}.log-title{display:flex;align-items:center;gap:8px;color:#1d3154}.log-title b{font-size:13px}.log-dot{width:8px;height:8px;border-radius:50%;background:#cbd5e1}.log-dot.on{background:#22c55e;box-shadow:0 0 0 5px rgba(34,197,94,.12);animation:scanova-pulse 1.2s ease-in-out infinite}.log-line{display:grid;grid-template-columns:72px 1fr;gap:8px;align-items:center;font-size:12px}.log-line span{color:#7b8799}.log-line b{font-weight:800;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.thumb.processing::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 0%,rgba(255,255,255,.55) 45%,transparent 70%);animation:scanova-sweep 1.05s linear infinite}.thumb .thumb-progress{position:absolute;left:0;right:auto;bottom:0;height:3px;background:#1769ff;transition:width .35s ease}.thumb.processing .check{animation:scanova-spin 1s linear infinite}.live-processing{position:relative;overflow:hidden;background:linear-gradient(135deg,#f4f8ff,#eef6ff) !important}.processing-stage{position:relative;z-index:2;display:grid;place-items:center;text-align:center;gap:8px;color:#49617f}.pulse-icon{width:58px;height:58px;border-radius:18px;background:linear-gradient(135deg,#1769ff,#25a8ff);color:#fff;font-weight:900;display:grid;place-items:center;box-shadow:0 14px 28px rgba(23,105,255,.28)}.scanner{position:absolute;left:8%;right:8%;height:3px;top:20%;background:linear-gradient(90deg,transparent,#1769ff,transparent);box-shadow:0 0 16px rgba(23,105,255,.45);animation:scanova-scanline 1.6s ease-in-out infinite}.processing-stage span{max-width:72%;font-size:12px;color:#75849b}
@keyframes scanova-pulse{0%,100%{opacity:.55;transform:scale(.96)}50%{opacity:1;transform:scale(1.12)}}@keyframes scanova-sweep{from{transform:translateX(-110%)}to{transform:translateX(110%)}}@keyframes scanova-spin{to{transform:rotate(360deg)}}@keyframes scanova-scanline{0%{top:18%;opacity:.2}20%,80%{opacity:1}100%{top:82%;opacity:.2}}
@media (max-height:900px){.main{padding-top:10px !important}.topbar{height:24px !important;margin-bottom:4px !important}.workspace{padding:14px !important;min-height:calc(100vh - 52px) !important}.title-row h1{font-size:22px !important}.title-row p{margin-top:4px !important}.steps{margin:10px 0 12px !important}.drop{height:92px !important}.preview{min-height:350px !important}.previewImg{height:310px !important}.settings{max-height:calc(100vh - 180px) !important}.switch-row{padding:5px 0 !important}.control{margin:7px 0 !important}.progress-panel{margin-top:8px !important}.actions{margin-top:8px !important}}

/* v1.2.3：基于 v1.1.9 稳定逻辑的界面美化补丁，只调整前端样式 */
:root{
  --blue:#1d74ff;
  --blue2:#22b2ff;
  --ink:#0e1f3d;
  --muted:#6b7890;
  --line:#e6edf7;
  --bg:#f6f9fe;
  --shadow:0 14px 36px rgba(20,70,140,.08);
}
html,body{height:100%;overflow:hidden;background:linear-gradient(135deg,#f5f9ff 0%,#ffffff 48%,#f7fbff 100%) !important;}
.app{height:100vh;max-height:100vh;overflow:hidden;grid-template-columns:190px minmax(0,1fr) !important;}
.side{padding:18px 10px 14px !important;background:linear-gradient(180deg,#fff 0%,#f9fcff 100%) !important;box-shadow:8px 0 26px rgba(36,83,150,.055);}
.side .logo{font-size:20px !important;font-weight:900 !important;gap:8px !important;margin-bottom:8px;}
.side .mark{width:34px !important;height:34px !important;border-radius:10px !important;box-shadow:0 10px 22px rgba(23,105,255,.18)}
.uploadBtn{height:40px !important;border-radius:10px !important;font-size:14px !important;margin-bottom:4px !important;box-shadow:0 10px 20px rgba(23,105,255,.18)}
.nav{gap:5px !important}.nav button{height:34px !important;font-size:13px !important;padding:0 9px !important}.nav button.active{background:linear-gradient(90deg,#eef5ff,#f7fbff) !important;box-shadow:inset 3px 0 0 var(--blue)}
.badge{min-width:25px;text-align:center;background:#e9eef6 !important;color:#536278 !important;}
.folder-title{padding-top:12px !important;margin-top:2px !important}.empty-album{height:112px !important;border:1px solid #eef3fa !important;border-radius:14px !important;background:linear-gradient(180deg,#f4f8fd 0%,#fff 100%) !important;box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
.album-icon{width:30px;height:30px;border-radius:9px;background:#e9f0f8;color:#9aa8bb;margin:0 auto 7px;display:grid;place-items:center}.side-foot{font-size:12px !important;line-height:1.45}.side-foot .mini{width:30px !important;height:30px !important}
.main{height:100vh !important;overflow:hidden !important;padding:8px 12px 8px !important;}
.topbar{height:24px !important;margin:0 0 5px !important;font-size:12px !important}.topbar button{font-size:12px !important}
.workspace{height:calc(100vh - 37px) !important;min-height:0 !important;padding:12px 14px 10px !important;border-radius:15px !important;overflow:hidden !important;background:rgba(255,255,255,.96) !important;}
.title-row h1{font-size:22px !important;line-height:1.12 !important;letter-spacing:-.3px}.title-row p{margin-top:4px !important;font-size:12px !important;color:#647187}.tutorial{height:32px !important;border-radius:9px !important;font-size:12px !important;padding:0 13px !important}
.steps{margin:9px 0 11px !important;gap:8px !important}.step{font-size:12px !important}.num{width:22px !important;height:22px !important}.line{max-width:74px !important}
.grid{flex:1 1 auto !important;height:auto !important;min-height:0 !important;display:grid !important;grid-template-columns:minmax(330px,30%) minmax(520px,1fr) 260px !important;gap:12px !important;margin-bottom:8px !important;}
.panel{border-color:#e5edf8 !important;border-radius:14px !important;box-shadow:0 8px 24px rgba(14,49,100,.035) !important;background:#fff !important;}
.upload-panel{height:100% !important;display:flex !important;flex-direction:column !important;padding:12px !important;}
.drop{height:88px !important;flex:0 0 88px !important;border-radius:12px !important;background:linear-gradient(180deg,#fbfdff,#f7fbff) !important;}
.dropIcon{font-size:25px !important}.drop strong{font-size:13px !important;margin:3px 0 !important}.drop span{font-size:11px !important;color:#718096 !important}.thumb-head{margin:10px 0 8px !important;font-size:13px !important}.thumbs{flex:1 1 auto !important;overflow:auto !important;display:grid !important;grid-template-columns:repeat(4,minmax(0,1fr)) !important;align-content:start !important;gap:8px !important;min-height:0 !important;padding-right:2px;}
.thumb,.add-tile{height:54px !important;border-radius:9px !important}.thumb{box-shadow:0 4px 14px rgba(20,70,140,.05)}.add-tile{font-size:24px !important;background:linear-gradient(180deg,#fbfdff,#f8fbff) !important}
.preview-wrap{height:100% !important;min-height:0 !important;padding:12px !important;}.preview{height:calc(100% - 40px) !important;min-height:0 !important;}.preview h3{font-size:14px !important;margin-bottom:8px !important}.previewImg{height:calc(100% - 34px) !important;min-height:260px !important;border-radius:11px !important;background:linear-gradient(135deg,#f4f8fd,#f9fbff) !important;}.previewImg img{object-fit:contain !important}.toolbar{height:30px !important;margin-top:8px !important}.tiny{height:28px !important;border-radius:8px !important;font-size:12px !important;padding:0 9px !important}.toolBtns{gap:6px !important}
.settings{height:100% !important;max-height:100% !important;overflow-y:auto !important;padding:13px 11px !important;}.settings h3{font-size:14px !important;margin-bottom:7px !important}.switch-row{grid-template-columns:18px 1fr 34px !important;padding:5px 0 !important;gap:7px !important}.switch-row b{font-size:12px !important}.switch-row small{font-size:10px !important}.switch{width:34px !important;height:18px !important}.switch:after{width:14px !important;height:14px !important}.switch.on:after{left:18px !important}.control{margin:7px 0 !important}.control label{font-size:12px !important;margin-bottom:5px !important}.control input,.control select{height:34px !important;font-size:12px !important}.control textarea{min-height:58px !important;font-size:12px !important}.seg button{height:31px !important;font-size:12px !important}.download{margin-top:7px !important}.download a{height:34px !important;font-size:12px !important}
.progress-panel{flex:0 0 58px !important;min-height:58px !important;margin-top:0 !important;display:grid !important;grid-template-columns:260px minmax(0,1fr) !important;gap:10px !important;}.progress-card,.current{min-height:58px !important;padding:8px 12px !important;border-radius:13px !important}.progress-card{display:flex !important;align-items:center !important;gap:12px !important}.ring{width:46px !important;height:46px !important;flex:0 0 46px}.ring span{font-size:12px !important}.progress-card b{font-size:13px !important}.progress-card span{font-size:12px !important;color:#687790}.bar{height:5px !important;width:130px !important;margin:6px 0 !important;border-radius:99px;background:#e8eef7 !important}.bar i{height:100%;display:block;border-radius:99px;background:linear-gradient(90deg,#1d74ff,#22b2ff)}
.log-card{display:grid !important;grid-template-columns:140px 1fr 1fr !important;align-items:center !important;gap:12px !important;background:linear-gradient(180deg,#fff,#fbfdff) !important;overflow:hidden}.log-title{display:flex !important;align-items:center !important;gap:8px !important;white-space:nowrap}.log-title b{font-size:13px !important}.log-dot{width:8px;height:8px;border-radius:50%;background:#cbd5e1;display:inline-block}.log-dot.on{background:#16a34a;box-shadow:0 0 0 5px rgba(22,163,74,.12);animation:scanova-pulse 1.15s ease-in-out infinite}.log-line{display:grid !important;grid-template-columns:64px minmax(0,1fr) !important;gap:6px !important;align-items:center !important;font-size:12px !important;min-width:0}.log-line span{color:#7b8799 !important}.log-line b{font-weight:800 !important;color:#334155 !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important;min-width:0}
.actions{flex:0 0 44px !important;min-height:44px !important;margin-top:8px !important;padding:7px 0 0 !important;border-top:1px solid var(--line) !important;background:#fff !important;display:flex !important;justify-content:center !important;align-items:flex-start !important;gap:12px !important}.actions button{height:34px !important;min-width:140px !important;border-radius:9px !important;font-size:13px !important}
.live-processing{position:relative !important;overflow:hidden !important;background:linear-gradient(135deg,#f2f7ff,#f9fcff) !important}.live-processing:before{content:"";position:absolute;inset:10px;border-radius:12px;border:1px solid rgba(29,116,255,.12);background:radial-gradient(circle at 50% 50%,rgba(29,116,255,.09),transparent 58%);}.processing-stage{position:relative;z-index:2;width:100%;height:100%;display:flex !important;flex-direction:column;align-items:center;justify-content:center;gap:9px;text-align:center;color:#344b70}.pulse-icon{width:58px;height:58px;border-radius:18px;background:linear-gradient(135deg,#1d74ff,#22b2ff);color:#fff;font-weight:900;display:grid;place-items:center;box-shadow:0 14px 32px rgba(29,116,255,.26);animation:scanova-float 1.8s ease-in-out infinite}.scanner{position:absolute;left:10%;right:10%;height:3px;top:20%;background:linear-gradient(90deg,transparent,#1d74ff,transparent);box-shadow:0 0 18px rgba(29,116,255,.5);animation:scanova-scanline 1.65s ease-in-out infinite}.processing-stage b{font-size:16px}.processing-stage span{max-width:72%;font-size:12px;color:#6b7890}.stage-bar{width:58%;height:6px;border-radius:99px;background:#e3ebf6;overflow:hidden}.stage-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#1d74ff,#22b2ff);transition:width .35s ease}.thumb.processing::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 0%,rgba(255,255,255,.66) 45%,transparent 70%);animation:scanova-sweep 1.05s linear infinite}.thumb .thumb-progress{position:absolute;left:0;bottom:0;height:3px;background:linear-gradient(90deg,#1d74ff,#22b2ff);z-index:3;transition:width .35s ease}.thumb.processing .check{animation:scanova-spin 1s linear infinite}
@keyframes scanova-pulse{0%,100%{opacity:.55;transform:scale(.96)}50%{opacity:1;transform:scale(1.12)}}@keyframes scanova-sweep{from{transform:translateX(-110%)}to{transform:translateX(110%)}}@keyframes scanova-spin{to{transform:rotate(360deg)}}@keyframes scanova-scanline{0%{top:18%;opacity:.18}20%,80%{opacity:1}100%{top:82%;opacity:.18}}@keyframes scanova-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@media (max-height:820px){.workspace{padding:10px 12px 8px !important}.title-row h1{font-size:20px !important}.title-row p{font-size:11px !important}.steps{margin:7px 0 9px !important}.drop{height:76px !important;flex-basis:76px !important}.dropIcon{font-size:21px !important}.thumb,.add-tile{height:48px !important}.previewImg{min-height:220px !important}.progress-panel{flex-basis:54px !important;min-height:54px !important}.progress-card,.current{min-height:54px !important;padding:7px 10px !important}.actions{flex-basis:40px !important;min-height:40px !important;padding-top:5px !important}.actions button{height:32px !important}.settings{padding-top:10px !important}.switch-row{padding:4px 0 !important}.control{margin:5px 0 !important}}

/* v1.2.4 科技现代风 + 处理体验优化（基于 v1.1.9 稳定版，不改核心后端结构） */
:root{
  --blue:#1769ff;
  --blue2:#00b7ff;
  --ink:#071b3a;
  --muted:#6c7c96;
  --card:#ffffffcc;
  --line:#dce8f8;
  --glow:0 18px 55px rgba(23,105,255,.14);
}
body{
  background:
    radial-gradient(circle at 12% 6%, rgba(42,136,255,.12), transparent 30%),
    radial-gradient(circle at 88% 8%, rgba(0,183,255,.10), transparent 26%),
    linear-gradient(180deg,#f8fbff 0%,#eef5ff 100%) !important;
  color:var(--ink);
}
.side{
  background:linear-gradient(180deg,rgba(255,255,255,.96),rgba(247,251,255,.92)) !important;
  border-right:1px solid rgba(170,197,234,.65) !important;
  box-shadow:10px 0 35px rgba(15,46,91,.05);
}
.logo .mark,.mini{
  background:linear-gradient(135deg,#09b7ff,#2468ff 70%,#724dff) !important;
  box-shadow:0 10px 28px rgba(37,104,255,.28), inset 0 0 0 1px rgba(255,255,255,.45);
}
.logo span{letter-spacing:-.5px;color:#061d40}
.uploadBtn,.primary{
  background:linear-gradient(135deg,#15b9ff 0%,#1769ff 52%,#3655ff 100%) !important;
  box-shadow:0 12px 24px rgba(23,105,255,.24);
  transition:transform .18s ease, box-shadow .18s ease;
}
.uploadBtn:hover,.primary:hover{transform:translateY(-1px);box-shadow:0 16px 32px rgba(23,105,255,.30)}
.nav button.active,.nav button:hover{
  background:linear-gradient(90deg,rgba(23,105,255,.12),rgba(0,183,255,.06)) !important;
  border:1px solid rgba(23,105,255,.12);
}
.badge{background:#e8f1ff !important;color:#33516f !important}
.workspace{
  background:rgba(255,255,255,.78) !important;
  backdrop-filter:blur(16px);
  border:1px solid rgba(183,207,238,.75) !important;
  box-shadow:var(--glow) !important;
}
.title-row h1{letter-spacing:-.5px;background:linear-gradient(90deg,#061a38,#0d4cbd);-webkit-background-clip:text;color:transparent}
.steps .step.on .num,.step.on .num{box-shadow:0 8px 22px rgba(23,105,255,.30)}
.line{background:linear-gradient(90deg,rgba(23,105,255,.25),rgba(0,183,255,.12)) !important}
.panel{
  background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(250,253,255,.84)) !important;
  border:1px solid rgba(185,207,237,.76) !important;
  box-shadow:0 12px 35px rgba(12,49,96,.06);
}
.drop{
  background:
    linear-gradient(90deg,rgba(23,105,255,.18) 50%,transparent 0) repeat-x,
    linear-gradient(90deg,rgba(23,105,255,.18) 50%,transparent 0) repeat-x,
    linear-gradient(0deg,rgba(23,105,255,.18) 50%,transparent 0) repeat-y,
    linear-gradient(0deg,rgba(23,105,255,.18) 50%,transparent 0) repeat-y,
    linear-gradient(180deg,rgba(247,251,255,.82),rgba(255,255,255,.72)) !important;
  background-size:12px 1px,12px 1px,1px 12px,1px 12px,100% 100% !important;
  background-position:left top,left bottom,left top,right top,0 0 !important;
  border:0 !important;
  box-shadow:inset 0 0 0 1px rgba(23,105,255,.16);
}
.dropIcon{color:#1769ff;text-shadow:0 8px 22px rgba(23,105,255,.25)}
.thumbs{scrollbar-width:thin;scrollbar-color:#b9cef1 transparent}
.thumb{border-radius:10px !important;box-shadow:0 6px 16px rgba(17,44,86,.07);transition:transform .15s ease, box-shadow .15s ease}
.thumb:hover{transform:translateY(-1px);box-shadow:0 10px 22px rgba(17,44,86,.12)}
.thumb.selected{box-shadow:0 0 0 2px #1769ff, 0 10px 24px rgba(23,105,255,.20) !important}
.previewImg{
  background:linear-gradient(135deg,#f4f8ff,#edf4fc) !important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.6);
}
.previewImg img{filter:saturate(1.02);}
.live-processing{
  position:relative;
  overflow:hidden;
  background:radial-gradient(circle at 50% 40%,rgba(23,105,255,.12),transparent 36%),linear-gradient(135deg,#f7fbff,#eef5ff) !important;
}
.live-processing:before{
  content:"";position:absolute;inset:22px;border-radius:18px;border:1px solid rgba(23,105,255,.22);
  box-shadow:0 0 40px rgba(23,105,255,.16),inset 0 0 40px rgba(0,183,255,.08);
  animation:pulseFrame 1.5s ease-in-out infinite;
}
.scanner{
  position:absolute;left:8%;right:8%;height:3px;top:18%;border-radius:99px;
  background:linear-gradient(90deg,transparent,#00b7ff,#1769ff,transparent);
  box-shadow:0 0 18px rgba(0,183,255,.65);
  animation:scanova-scan 2.1s ease-in-out infinite;
}
.pulse-icon{
  width:54px;height:54px;border-radius:18px;display:grid;place-items:center;margin:0 auto 12px;
  background:linear-gradient(135deg,#0bbcff,#1769ff);color:#fff;font-weight:900;letter-spacing:.5px;
  box-shadow:0 12px 35px rgba(23,105,255,.32),0 0 0 8px rgba(23,105,255,.08);
  animation:softPulse 1.35s ease-in-out infinite;
}
.stage-bar{height:7px;background:#dfeafd;border-radius:99px;overflow:hidden;margin-top:12px;min-width:210px}
.stage-bar i{display:block;height:100%;background:linear-gradient(90deg,#00b7ff,#1769ff);border-radius:99px;box-shadow:0 0 14px rgba(23,105,255,.45);transition:width .4s ease}
.switch.on{background:linear-gradient(135deg,#11b8ff,#1769ff) !important;box-shadow:0 6px 16px rgba(23,105,255,.22)}
.control select,.control textarea,.control input{
  background:#fbfdff !important;border-color:#d8e5f7 !important;box-shadow:0 4px 12px rgba(15,60,115,.035)
}
.ai-box{background:linear-gradient(180deg,rgba(23,105,255,.045),rgba(0,183,255,.025));border-radius:12px;padding:10px;margin-left:-2px;margin-right:-2px}
.settings::-webkit-scrollbar{width:7px}.settings::-webkit-scrollbar-thumb{background:linear-gradient(#c7d9f4,#9fbce8);border-radius:99px}
.progress-panel{gap:10px !important}.progress-card,.log-card{background:rgba(255,255,255,.82) !important}
.log-card{display:grid;grid-template-columns:180px 1fr;column-gap:12px;align-items:center;overflow:hidden}
.log-title{display:flex;gap:8px;align-items:center}.log-title b{font-size:13px}.conn{font-size:11px;padding:3px 8px;border-radius:99px;background:#eaf2ff;color:#1769ff;border:1px solid #d7e6ff}.conn.polling{background:#fff7e6;color:#9a6200;border-color:#f3d591}.conn.connecting{background:#eef4ff;color:#51657d}
.log-flow{display:flex;align-items:center;gap:6px;grid-row:2;grid-column:1;margin-top:6px}.log-flow i{width:28px;height:2px;background:#d9e5f5;border-radius:99px}.dot{width:9px;height:9px;border-radius:50%;background:#c9d7e8}.dot.done{background:#21c483}.dot.on{background:#1769ff;box-shadow:0 0 0 6px rgba(23,105,255,.11);animation:softPulse 1.2s infinite}
.log-line{display:flex;gap:8px;align-items:center;min-width:0}.log-line span{color:#718198;font-size:12px;white-space:nowrap}.log-line b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-line.status b{color:#1769ff}
.ring{background:conic-gradient(#15b9ff var(--p), #e5eefb 0) !important}.bar i{background:linear-gradient(90deg,#15b9ff,#1769ff) !important;position:relative}.bar i:after{content:"";position:absolute;right:0;top:-3px;width:9px;height:9px;border-radius:50%;background:#fff;box-shadow:0 0 12px #1769ff}
.actions{background:linear-gradient(180deg,rgba(255,255,255,.70),#fff) !important}.ghost{background:#fff !important}.danger{background:#fff !important}
@keyframes scanova-scan{0%{top:18%;opacity:.4}50%{top:78%;opacity:1}100%{top:18%;opacity:.4}}
@keyframes pulseFrame{0%,100%{opacity:.55;transform:scale(.995)}50%{opacity:1;transform:scale(1.005)}}
@keyframes softPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.04);opacity:.82}}
@keyframes scanova-sweep{0%{transform:translateX(-120%)}100%{transform:translateX(120%)}}

/* 图二：缩小左侧上传/缩略图工作区占比，让预览更清爽 */
.grid{grid-template-columns:minmax(290px,28%) minmax(520px,1fr) 255px !important;gap:10px !important;}
.drop{flex-basis:88px !important;height:88px !important;}
.upload-panel{padding:10px !important;}
.thumbs{grid-template-columns:repeat(4,minmax(50px,1fr)) !important;}
.thumb,.add-tile{height:48px !important;}
.previewImg{min-height:210px !important;}
@media (min-width:1600px){.grid{grid-template-columns:minmax(340px,29%) minmax(650px,1fr) 270px !important}.previewImg{min-height:260px !important}}
.log-line.time b{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#1769ff;letter-spacing:.2px}.log-title::after{content:'北京时间';margin-left:8px;font-size:11px;color:#7a8ba3;font-weight:600;background:#f1f6ff;border:1px solid #dbe8ff;border-radius:999px;padding:2px 8px}


/* v1.2.7：修复处理日志状态徽标错位/乱码问题 */
.log-card{
  display:grid !important;
  grid-template-columns:150px minmax(180px,1.2fr) minmax(180px,1.1fr) 170px !important;
  align-items:center !important;
  gap:14px !important;
  padding:8px 14px !important;
  overflow:hidden !important;
}
.log-title{
  display:flex !important;
  align-items:center !important;
  gap:8px !important;
  min-width:0 !important;
  white-space:nowrap !important;
}
.log-title::after{content:none !important;display:none !important;}
.log-title b{font-size:13px !important;color:#13233f !important;line-height:1 !important;}
.conn{
  position:static !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:auto !important;
  max-width:none !important;
  min-width:54px !important;
  height:22px !important;
  padding:0 9px !important;
  line-height:22px !important;
  white-space:nowrap !important;
  overflow:visible !important;
  text-overflow:clip !important;
  border-radius:999px !important;
  font-size:11px !important;
  font-weight:700 !important;
  background:#ecf5ff !important;
  color:#1769ff !important;
  border:1px solid #d7e8ff !important;
}
.conn.polling{background:#fff7e6 !important;color:#9a6200 !important;border-color:#f3d591 !important;}
.conn.connecting{background:#edf2ff !important;color:#4f6078 !important;border-color:#dbe6f7 !important;}
.log-flow{display:none !important;}
.log-line{
  display:grid !important;
  grid-template-columns:64px minmax(0,1fr) !important;
  align-items:center !important;
  gap:8px !important;
  min-width:0 !important;
  margin:0 !important;
}
.log-line span{font-size:12px !important;color:#7a8aa2 !important;white-space:nowrap !important;}
.log-line b{font-size:12px !important;color:#253957 !important;font-weight:800 !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important;min-width:0 !important;}
.log-line.status b{color:#1769ff !important;}
.log-line.time b{color:#1769ff !important;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important;}
@media (max-width:1500px){
  .log-card{grid-template-columns:142px minmax(150px,1fr) minmax(150px,1fr) 150px !important;gap:10px !important;}
  .log-line{grid-template-columns:58px minmax(0,1fr) !important;}
}

/* v1.2.8：新增相册保存、相册筛选、处理队列防重复 */
.folder.active{background:linear-gradient(135deg,#eaf3ff,#f5f9ff)!important;color:var(--blue)!important;box-shadow:inset 3px 0 0 var(--blue)}
.download{display:grid;gap:8px}.download .current-download{background:linear-gradient(135deg,#15a5ff,#1769ff);color:#fff;pointer-events:auto}.save-album-btn{height:34px;border:1px solid #d8e4f5;background:#fff;border-radius:9px;color:#234062;font-weight:850;cursor:pointer}.save-album-btn:hover{border-color:#1769ff;color:#1769ff;box-shadow:0 0 0 3px rgba(23,105,255,.08)}.save-album-btn:disabled{background:#eef3fa;color:#8a97aa;cursor:not-allowed}.album-empty-note{grid-column:1/-1;display:grid;place-items:center;height:72px;border:1px dashed #dbe6f4;border-radius:10px;color:#8391a8;font-size:12px;background:#fafcff}.folder .badge{min-width:20px;text-align:center}

/* v1.2.9：相册保存弹窗美化 + 单张/批量保存 */
.album-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.save-album-btn{height:36px;border-radius:10px;border:1px solid #cfe0f8;background:linear-gradient(180deg,#fff,#f7fbff);color:#1769ff;font-weight:850;cursor:pointer;transition:.16s;box-shadow:0 6px 16px rgba(23,105,255,.06)}
.save-album-btn:hover:not(:disabled){transform:translateY(-1px);border-color:#1769ff;box-shadow:0 10px 22px rgba(23,105,255,.12)}
.save-album-btn:disabled,.save-album-btn.disabled{cursor:not-allowed;opacity:.55;color:#8b9bb2;background:#eef3fa;border-color:#e1e8f2;box-shadow:none}
.modal-mask{position:fixed;inset:0;z-index:100;background:rgba(8,20,40,.48);backdrop-filter:blur(8px);display:grid;place-items:center;padding:24px;animation:modalFade .16s ease-out}
.album-modal{width:min(560px,94vw);background:rgba(255,255,255,.96);border:1px solid rgba(219,230,245,.92);border-radius:22px;box-shadow:0 30px 80px rgba(18,56,120,.28);overflow:hidden;animation:modalPop .18s ease-out}
.album-modal-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;padding:22px 24px 16px;background:linear-gradient(135deg,#f7fbff,#ffffff)}
.album-modal-head h2{margin:0;font-size:22px;letter-spacing:-.3px;color:#10203d}.album-modal-head p{margin:7px 0 0;color:#6b7890;line-height:1.45}.modal-close{width:34px;height:34px;border:1px solid #dfe8f5;background:#fff;border-radius:10px;cursor:pointer;color:#64748b;font-size:22px;line-height:1}.modal-close:hover{color:#1769ff;border-color:#bcd5ff}
.album-save-tabs{display:flex;align-items:center;gap:10px;padding:0 24px 14px;background:#fff}.album-save-tabs .tab{height:30px;border:1px solid #d8e6fb;background:#eef6ff;color:#1769ff;border-radius:999px;padding:0 12px;font-weight:850}.save-count{height:30px;display:inline-flex;align-items:center;padding:0 10px;border-radius:999px;background:#f0f4fa;color:#62718a;font-weight:800}
.album-modal-body{padding:18px 24px 8px}.album-input-label,.album-choice-title{display:block;font-size:13px;font-weight:850;color:#223656;margin-bottom:8px}.album-name-input{width:100%;height:44px;border:1px solid #d7e2f2;border-radius:12px;padding:0 14px;outline:none;font-weight:750;color:#122340;background:#fff}.album-name-input:focus{border-color:#1769ff;box-shadow:0 0 0 4px rgba(23,105,255,.10)}.album-choice-title{margin-top:16px}.album-choice-list{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-height:210px;overflow:auto;padding-right:2px}.album-choice{min-height:62px;border:1px solid #e1e9f5;background:#fff;border-radius:14px;display:flex;align-items:center;gap:10px;text-align:left;padding:10px 12px;cursor:pointer;transition:.16s}.album-choice:hover,.album-choice.active{border-color:#1769ff;background:linear-gradient(135deg,#f4f9ff,#ffffff);box-shadow:0 10px 22px rgba(23,105,255,.10)}.album-choice-icon{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#eaf4ff,#f9fcff);color:#1769ff;display:grid;place-items:center;font-weight:900}.album-choice b{display:block;color:#152844;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.album-choice small{display:block;color:#7b879b;margin-top:3px}.album-choice-empty{grid-column:1/-1;border:1px dashed #cbd9ea;border-radius:14px;padding:18px;text-align:center;color:#8190a6;background:#f8fbff}.album-modal-foot{display:flex;justify-content:flex-end;gap:12px;padding:18px 24px 22px;background:#fff}.album-modal-foot .ghost,.album-modal-foot .primary{min-width:112px}
@keyframes modalFade{from{opacity:0}to{opacity:1}}@keyframes modalPop{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:900px){.album-choice-list{grid-template-columns:1fr}.album-modal{width:min(520px,96vw)}}
.folder-actions{display:flex;align-items:center;gap:5px}
.album-del{width:20px;height:20px;border:0;border-radius:7px;background:transparent;color:#95a3b8;font-size:15px;line-height:20px;cursor:pointer;opacity:.45}
.folder:hover .album-del{opacity:1;background:#eef4ff;color:#1769ff}
.folder.active .album-del{opacity:1}
.album-del:hover{background:#ffecec!important;color:#e53935!important}
.folder span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* v1.3.1 相册下载/删除增强 */
.save-album-btn.danger{color:#dc2626;border-color:#fecaca;background:linear-gradient(180deg,#fff,#fff7f7)}
.save-album-btn.danger:hover:not(:disabled){color:#b91c1c;border-color:#ef4444;box-shadow:0 10px 22px rgba(239,68,68,.12)}
.download h3::after{content:"";display:block;width:28px;height:3px;margin-top:6px;border-radius:99px;background:linear-gradient(90deg,#1769ff,#22b2ff)}
