:root{
  --bg:#eef1fb;
  --card:#ffffff;
  --ink:#1c2540;
  --muted:#6b7280;
  --accent:#3355ee;
  --accent-2:#5b6df8;
  --border:#e3e7f5;
  --letter:#1c2540;
  --digit:#2b6fff;
  --symbol:#e0435c;
  --good:#1f9d55;
  --warn:#e0a72e;
  --bad:#e0435c;
  --radius:18px;
}
*{box-sizing:border-box;}
html,body{
  margin:0;padding:0;
  background:linear-gradient(180deg,#eef2ff 0%,#f6f8ff 100%);
  color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",Helvetica,Arial,sans-serif;
  min-height:100vh;
}
.wrap{max-width:760px;margin:0 auto;padding:36px 20px 60px;}
h1{text-align:center;font-size:2.1rem;font-weight:800;color:var(--accent);margin:0 0 6px;letter-spacing:.5px;}
.sub{text-align:center;color:var(--muted);margin:0 0 18px;font-size:.95rem;}
.card{
  background:var(--card);border-radius:var(--radius);border:1px solid var(--border);
  box-shadow:0 10px 30px -18px rgba(30,40,90,.25);padding:20px 26px;margin-bottom:14px;
}
.row{display:flex;align-items:center;flex-wrap:wrap;gap:14px;margin-bottom:12px;}
.row:last-child{margin-bottom:0;}
.modes{display:flex;gap:16px;font-size:.95rem;}
.modes label{display:flex;align-items:center;gap:6px;cursor:pointer;}
input[type=radio]{accent-color:var(--accent);width:16px;height:16px;}
input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px;cursor:pointer;}
.slider-block{display:flex;align-items:center;gap:10px;flex:1 1 220px;font-size:.9rem;color:var(--muted);white-space:nowrap;}
input[type=range]{flex:1;accent-color:var(--accent);}
.opts{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:.88rem;}
.opts label{display:flex;align-items:center;gap:5px;cursor:pointer;user-select:none;white-space:nowrap;}
.token-btns{gap:10px;}
.token-btn{font-size:.85rem;padding:9px 16px;}
.symset{display:flex;align-items:center;gap:8px;flex:1 1 100%;font-size:.88rem;color:var(--muted);}
.symset input[type=text]{
  flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.95rem;
  padding:7px 10px;border-radius:10px;border:1px solid var(--border);background:#f7f8fd;
  color:var(--ink);letter-spacing:2px;
}
.display{
  background:var(--card);border-radius:var(--radius);border:1px solid var(--border);
  box-shadow:0 10px 30px -18px rgba(30,40,90,.25);padding:24px 24px 20px;text-align:center;margin-bottom:14px;
}
#pwOut{
  font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  font-size:clamp(1.3rem,4.4vw,2.1rem);font-weight:700;letter-spacing:1px;word-break:break-all;
  line-height:1.5;min-height:2.2em;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;
}
#pwOut span{display:inline-block;}
#pwOut .c-letter{color:var(--letter);}
#pwOut .c-digit{color:var(--digit);}
#pwOut .c-symbol{color:var(--symbol);}
.meta{
  display:flex;justify-content:center;gap:26px;flex-wrap:wrap;margin-top:18px;padding-top:16px;
  border-top:1px solid var(--border);font-size:.92rem;color:var(--muted);
}
.meta b{color:var(--ink);}
.strength-strong{color:var(--good)!important;}
.strength-medium{color:var(--warn)!important;}
.strength-weak{color:var(--bad)!important;}
.actions{display:flex;justify-content:center;gap:12px;margin-top:22px;flex-wrap:wrap;}
button{
  font-family:inherit;font-size:.95rem;font-weight:600;border-radius:999px;padding:11px 22px;
  cursor:pointer;border:1px solid transparent;transition:transform .08s ease,opacity .15s ease;
  display:inline-flex;align-items:center;gap:8px;
}
button:active{transform:scale(.96);}
button:focus-visible{outline:3px solid var(--accent);outline-offset:2px;}
.btn-primary{background:var(--accent);color:#fff;}
.btn-primary:hover{opacity:.92;}
.btn-outline{background:#fff;color:var(--accent);border-color:var(--accent);}
.btn-outline:hover{background:#f2f4ff;}
.btn-ghost{background:transparent;color:var(--muted);border-color:var(--border);font-weight:500;font-size:.85rem;padding:8px 14px;}
.btn-ghost:hover{color:var(--ink);border-color:var(--muted);}
.hist-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;}
.hist-head h2{font-size:1.05rem;margin:0;color:var(--ink);}
.hist-list{display:flex;flex-direction:column;gap:8px;max-height:340px;overflow-y:auto;}
.hist-item{display:flex;align-items:center;gap:10px;background:#f7f8fd;border:1px solid var(--border);border-radius:12px;padding:9px 12px;}
.hist-pw{
  flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9rem;
  letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.hist-pw .c-letter{color:var(--letter);}
.hist-pw .c-digit{color:var(--digit);}
.hist-pw .c-symbol{color:var(--symbol);}
.hist-pw.masked span{color:var(--muted)!important;}
.hist-type{font-size:.72rem;color:var(--accent);background:#eef0ff;border-radius:999px;padding:3px 9px;white-space:nowrap;flex-shrink:0;}
.hist-time{font-size:.75rem;color:var(--muted);white-space:nowrap;}
.hist-btn{background:none;border:none;cursor:pointer;color:var(--muted);font-size:.8rem;padding:4px 6px;border-radius:6px;}
.hist-btn:hover{color:var(--accent);background:#eaeeff;}
.empty{text-align:center;color:var(--muted);font-size:.88rem;padding:18px 0;}
.reveal-row{display:flex;align-items:center;gap:6px;font-size:.85rem;color:var(--muted);cursor:pointer;}
.toast{
  position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);
  background:var(--ink);color:#fff;padding:10px 18px;border-radius:999px;font-size:.88rem;
  opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
footer{text-align:center;color:var(--muted);font-size:.78rem;margin-top:10px;line-height:1.7;}
.is-hidden{display:none!important;}
.row-tight{margin-bottom:10px;}
.nf{text-align:center;padding:60px 20px;}
.nf h1{font-size:3.4rem;margin-bottom:8px;}
@media (prefers-reduced-motion:reduce){*{transition:none!important;}}
@media (max-width:480px){.card,.display{padding:20px 16px;}}
