:root{--bg: #050a12;--panel: rgba(13, 22, 36, .82);--line: rgba(94, 234, 212, .16);--line-strong: rgba(94, 234, 212, .45);--text: #e6f1f7;--muted: #8296a8;--accent: #22e3c4;--accent-ink: #03221d;--digit: #5cc8ff;--symbol: #f5a8ff;--warn: #ffb454;--bad: #ff6b7a;--mono: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;--sans: system-ui, -apple-system, "Segoe UI", "Noto Sans Thai", "Leelawadee UI", Thonburi, sans-serif;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;background-color:var(--bg);background-image:radial-gradient(60rem 30rem at 50% -10rem,rgba(34,227,196,.13),transparent 70%),linear-gradient(rgba(94,234,212,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(94,234,212,.045) 1px,transparent 1px);background-size:auto,40px 40px,40px 40px;background-attachment:fixed;color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.55}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.page{width:100%;max-width:720px;margin:0 auto;padding:28px 16px 40px}.top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:24px}.brand{display:flex;align-items:center;gap:12px}.logo{width:44px;height:44px;fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 8px rgba(34,227,196,.55))}h1{margin:0;font-family:var(--mono);font-size:1.6rem;line-height:1.1;letter-spacing:.28em;font-weight:700}.tagline{margin:2px 0 0;color:var(--muted);font-size:.9rem}.status{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.8rem;background:#22e3c40d}.status i{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);animation:pulse 2.4s ease-in-out infinite}@keyframes pulse{50%{opacity:.35}}main{display:grid;gap:16px}.panel{position:relative;padding:20px;border:1px solid var(--line);border-radius:14px;background:var(--panel);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.panel.output{border-color:var(--line-strong);box-shadow:0 0 0 1px #22e3c40d,0 20px 60px -30px #22e3c480}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}h2{margin:0;font-size:.82rem;font-weight:600;letter-spacing:.06em;color:var(--accent)}h2:before{content:"// ";font-family:var(--mono);opacity:.6}.meta{color:var(--muted);font-size:.8rem;font-variant-numeric:tabular-nums}.password{display:block;width:100%;padding:18px 16px 12px;border:1px dashed var(--line-strong);border-radius:10px;background:#02080ebf;text-align:left;transition:border-color .15s,box-shadow .15s}.password:hover{border-color:var(--accent)}.password.copied{border-style:solid;border-color:var(--accent);box-shadow:0 0 0 3px #22e3c42e}.chars{display:block;font-family:var(--mono);font-size:clamp(1.15rem,4.6vw,1.6rem);line-height:1.45;letter-spacing:.04em;overflow-wrap:anywhere;word-break:break-all;-webkit-user-select:all;user-select:all}.chars .digit{color:var(--digit)}.chars .symbol{color:var(--symbol)}.hint{display:block;margin-top:8px;color:var(--muted);font-size:.78rem}.password.copied .hint{color:var(--accent)}.strength{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:14px 0 16px;--level: var(--accent)}.strength[data-level="1"]{--level: var(--bad)}.strength[data-level="2"]{--level: var(--warn)}.bars{display:flex;gap:4px}.bars i{width:30px;height:6px;border-radius:3px;background:#8296a840;transition:background .2s}.bars i.on{background:var(--level);box-shadow:0 0 8px var(--level)}.strength-label{color:var(--level);font-weight:600;font-size:.9rem}.strength .meta{margin-left:auto}.actions{display:grid;grid-template-columns:1fr auto;gap:10px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 18px;border:1px solid var(--line-strong);border-radius:10px;background:#22e3c40f;font-weight:600;white-space:nowrap;transition:background .15s,transform .05s}.btn:hover{background:#22e3c424}.btn:active{transform:translateY(1px)}.btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.btn.primary{border-color:var(--accent);background:var(--accent);color:var(--accent-ink);box-shadow:0 0 24px -6px var(--accent)}.btn.primary:hover{background:#4cf0d6}.btn.done{color:var(--accent);border-color:var(--accent)}.link{padding:4px 0;border:0;background:none;color:var(--muted);font-size:.82rem;text-decoration:underline;text-underline-offset:3px}.link:hover{color:var(--bad)}.length{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:6px 12px;margin-bottom:16px}.length output{font-family:var(--mono);font-size:1.4rem;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums}.length input{grid-column:1 / -1;width:100%;height:28px;margin:0;accent-color:var(--accent);cursor:pointer}.groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px}.chip{display:flex;align-items:center;gap:12px;width:100%;min-height:60px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:#02080e80;text-align:left;transition:border-color .15s,background .15s}.chip:hover{border-color:var(--line-strong)}.chip[aria-checked=true]{border-color:var(--line-strong);background:#22e3c414}.check{position:relative;flex:none;width:22px;height:22px;border:1.5px solid var(--muted);border-radius:6px;transition:background .15s,border-color .15s}.chip[aria-checked=true] .check{border-color:var(--accent);background:var(--accent)}.chip[aria-checked=true] .check:after{content:"";position:absolute;left:6.5px;top:2.5px;width:6px;height:11px;border:solid var(--accent-ink);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}.chip-text{display:grid;min-width:0}.chip-text b{font-weight:600;font-size:.95rem}.chip-text small{color:var(--muted);font-size:.8rem}.groups .chip-text small{font-family:var(--mono)}.chip code{display:inline-block;margin:0 1px;padding:0 5px;border:1px solid var(--line);border-radius:4px;font-family:var(--mono);color:var(--text);background:#02080eb3}.history{display:grid;gap:8px;margin:0;padding:0;list-style:none}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:48px;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:#02080e80;text-align:left;transition:border-color .15s}.row:hover{border-color:var(--line-strong)}.row.copied{border-color:var(--accent)}.row-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:.95rem}.row-meta{flex:none;color:var(--muted);font-size:.78rem;font-variant-numeric:tabular-nums}.row.copied .row-meta{color:var(--accent)}.empty,.note{margin:0;color:var(--muted);font-size:.85rem}.note{margin-top:12px;font-size:.78rem}footer{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;margin-top:20px;color:var(--muted);font-size:.78rem}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);max-width:calc(100vw - 32px);padding:12px 20px;border:1px solid var(--accent);border-radius:999px;background:#06171a;color:var(--accent);font-weight:600;font-size:.92rem;text-align:center;box-shadow:0 10px 40px -10px #22e3c499;z-index:10}.toast-enter-active,.toast-leave-active{transition:opacity .2s,transform .2s}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,12px)}@media(max-width:480px){.actions,.groups{grid-template-columns:1fr}.strength .meta{margin-left:0;width:100%}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
