:root{--fg:#f1f6fa;--muted:rgba(241,246,250,.62);--accent:#22d3ee;--glass:rgba(255,255,255,.10);--glass-strong:rgba(255,255,255,.18);--line:rgba(255,255,255,.22)}
*{box-sizing:border-box}
body{margin:0;min-height:100vh;color:var(--fg);font:15px/1.5 system-ui,"Noto Sans TC",sans-serif;background:#0b1c2c;position:relative}
body::before,body::after{content:"";position:fixed;z-index:-1;border-radius:50%;filter:blur(90px);opacity:.75}
body::before{width:60vmax;height:60vmax;left:-15vmax;top:-20vmax;background:radial-gradient(circle,#0ea5b7,transparent 65%)}
body::after{width:55vmax;height:55vmax;right:-15vmax;bottom:-20vmax;background:radial-gradient(circle,#4f46e5,transparent 65%)}
header,aside,section,.tabs button,input,textarea,.wrap,th{
  -webkit-backdrop-filter:blur(18px) saturate(160%);backdrop-filter:blur(18px) saturate(160%)}
header{margin:16px auto 0;width:calc(100% - 32px);max-width:1168px;padding:14px 20px;font-weight:600;font-size:17px;border:1px solid var(--line);border-radius:18px;background:var(--glass);box-shadow:0 8px 32px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.3)}
main{display:block;padding:16px;max-width:1200px;margin:auto}.grid{display:grid;grid-template-columns:210px 1fr;gap:16px}
@media(max-width:700px){.grid{grid-template-columns:1fr}}
aside,section{background:var(--glass);border:1px solid var(--line);border-radius:18px;padding:14px;box-shadow:0 8px 32px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.3)}
aside button{display:block;width:100%;text-align:left;padding:8px 12px;border:1px solid transparent;background:none;color:inherit;border-radius:12px;cursor:pointer;font:inherit;transition:.2s}
aside button:hover{background:var(--glass-strong)}
aside button.on{background:linear-gradient(135deg,rgba(34,211,238,.55),rgba(79,70,229,.45));border-color:var(--line);box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}
.tabs{display:flex;gap:8px;margin-bottom:12px}
.tabs button{padding:7px 18px;border:1px solid var(--line);background:var(--glass);color:inherit;border-radius:999px;cursor:pointer;font:inherit;transition:.2s}
.tabs button.on{background:linear-gradient(135deg,rgba(34,211,238,.55),rgba(79,70,229,.45));box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}
input,textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:rgba(0,0,0,.2);color:inherit;font:inherit;outline:0}
input:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(34,211,238,.25)}
::placeholder{color:var(--muted)}
textarea{font-family:ui-monospace,monospace;min-height:110px}
.row{display:flex;gap:8px;margin:10px 0;align-items:center}
.btn{padding:8px 18px;border:1px solid var(--line);border-radius:999px;background:linear-gradient(135deg,rgba(34,211,238,.6),rgba(79,70,229,.55));color:#fff;cursor:pointer;font:inherit;box-shadow:inset 0 1px 0 rgba(255,255,255,.4);transition:.2s}
.btn:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.15)}.btn:disabled{opacity:.35;cursor:default}
.wrap{overflow:auto;max-height:60vh;border:1px solid var(--line);border-radius:14px;background:rgba(0,0,0,.18)}
table{border-collapse:collapse;width:100%}th,td{padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.1);text-align:left;white-space:nowrap}
th{position:sticky;top:0;background:rgba(20,40,60,.55);font-weight:600}
tbody tr:hover{background:rgba(255,255,255,.08)}
td.null{color:var(--muted);font-style:italic}
.msg{color:var(--muted);font-size:13px}.err{color:#fda4af}
@supports not (backdrop-filter:blur(1px)){header,aside,section{background:rgba(30,50,70,.85)}}

#login,#keybox{max-width:460px;margin:60px auto}
#login h2{margin:0 0 12px}#login input{margin-bottom:10px}
.hdr{display:flex;justify-content:space-between;align-items:center}
.btn.ghost{background:var(--glass);padding:5px 14px;font-size:13px}
[hidden]{display:none!important}
.pad{padding:4px 10px}.mt{margin-top:10px}
.card{display:flex;gap:24px;flex-wrap:wrap;margin-top:16px}
.photo{width:150px;height:195px;object-fit:cover;border-radius:16px;border:1px solid var(--line);box-shadow:0 8px 24px rgba(0,0,0,.3)}
.info{flex:1;min-width:240px}.info h2{margin:0 0 10px}
.f{display:flex;gap:12px;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.12);align-items:baseline}
.f b{flex:0 0 96px;color:var(--muted);font-weight:500}.f span{flex:1;word-break:break-all;white-space:pre-wrap}
.btn.sm{padding:2px 12px;font-size:12px}
#sf input{flex:1}
.key{font:700 17px/1.6 ui-monospace,monospace;letter-spacing:1px;word-break:normal;overflow-wrap:normal;padding:14px;margin:12px 0;border-radius:12px;background:rgba(0,0,0,.3);border:1px dashed var(--accent);user-select:all}
.chk{width:auto;margin-right:6px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;margin:10px 0}
@media(max-width:700px){.grid2{grid-template-columns:1fr}}
.fl{display:block;margin-bottom:10px}.fl span{display:block;font-size:12px;color:var(--muted);margin-bottom:3px}
input[type=file]{padding:8px}
.btn.danger{background:linear-gradient(135deg,rgba(244,63,94,.6),rgba(190,24,93,.5))}
#edel{border-color:rgba(244,63,94,.6)}
.btn{white-space:nowrap;flex:none}
