*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#fdf3ec;--panel:#ffffff;--ink:#2b2118;--muted:#8a7a6c;
  --red:#e8513a;--gold:#f0a818;--green:#2f9e44;--blue:#1971c2;
  --line:#f0e2d4;--shadow:0 10px 30px rgba(180,90,30,.12);
}
body{font-family:system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--ink);min-height:100vh}
button{cursor:pointer;font-family:inherit}
input,select,textarea{font-family:inherit;font-size:14px;color:var(--ink)}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;word-break:break-all}

/* ===== 抽奖页 ===== */
.lucky{max-width:520px;margin:0 auto;padding:28px 18px 40px;text-align:center}
.lucky-head h1{font-size:28px;color:var(--red);letter-spacing:1px}
.lucky-head p{color:var(--muted);margin:6px 0 18px}
.wheel-stage{position:relative;width:380px;height:380px;margin:0 auto}
#wheel-wrap{width:100%;height:100%;will-change:transform}
#wheel{width:100%;height:100%}
.pointer{position:absolute;top:-6px;left:50%;transform:translateX(-50%);z-index:5;
  width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-top:26px solid #333;
  filter:drop-shadow(0 2px 2px rgba(0,0,0,.3))}
.draw-btn{margin-top:22px;width:240px;padding:15px 0;font-size:18px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#ff7a59,#e8513a);border:none;border-radius:40px;box-shadow:0 8px 20px rgba(232,81,58,.4)}
.draw-btn:disabled{background:#c9b8a8;box-shadow:none;cursor:not-allowed}
.countdown{margin-top:14px;color:var(--muted);font-size:13px}
.result-box{margin:18px auto 0;max-width:340px;padding:18px;border-radius:16px;background:#fff;box-shadow:var(--shadow)}
.result-box.win{background:linear-gradient(135deg,#fff6e0,#ffe9c2);border:2px solid var(--gold)}
.result-box.muted .prize-name{color:var(--muted)}
.result-box h2{font-size:22px;color:var(--red)}
.result-box .prize-name{font-size:20px;font-weight:700;margin-top:8px;color:var(--red)}

/* ===== 登录 ===== */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:360px;background:#fff;border-radius:20px;padding:34px 30px;box-shadow:var(--shadow);text-align:center}
.login-card .logo{font-size:44px}
.login-card h1{font-size:20px;margin:8px 0 22px}
.login-card label{display:block;text-align:left;margin-bottom:14px;font-size:13px;color:var(--muted)}
.login-card input{width:100%;margin-top:6px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;font-size:15px}
.login-card input:focus{outline:none;border-color:var(--gold)}
.btn-primary{background:linear-gradient(135deg,#ff7a59,#e8513a);color:#fff;border:none;padding:11px 20px;border-radius:10px;font-size:15px;font-weight:600}
.login-card .btn-primary{width:100%;margin-top:8px}

/* ===== 管理后台布局 ===== */
.admin{display:flex;min-height:100vh}
.admin aside{width:210px;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;padding:20px 14px}
.brand{font-size:18px;font-weight:700;padding:6px 10px 18px;color:var(--red)}
.admin nav{display:flex;flex-direction:column;gap:4px;flex:1}
.admin nav button{text-align:left;padding:11px 14px;border:none;background:transparent;border-radius:10px;font-size:15px;color:var(--ink)}
.admin nav button.active{background:#fdeee2;color:var(--red);font-weight:600}
.logout{margin-top:10px;padding:10px;border:1px solid var(--line);background:#fff;border-radius:10px}
.admin main{flex:1;padding:30px 34px;overflow:auto}
#admin-content h1{font-size:23px;margin-bottom:8px}
.hint{color:var(--muted);font-size:13.5px;line-height:1.7;margin-bottom:20px}
.hint .ok{color:var(--green)}
.hint .bad{color:var(--red)}

/* ===== 奖项编辑 ===== */
.prize-rows{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}
.prize-row{display:flex;gap:8px;align-items:center;background:#fff;padding:10px 12px;border-radius:12px;box-shadow:var(--shadow)}
.prize-row input{padding:9px 10px;border:1px solid var(--line);border-radius:8px}
.prize-row input[data-f=name]{flex:2;min-width:90px}
.prize-row input[data-f=weight],.prize-row input[data-f=stock]{width:88px}
.switch{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:4px;white-space:nowrap}
.btn-mini{padding:8px 12px;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:13px}
.btn-mini.danger{color:var(--red);border-color:#f3c7be}
.add-line{display:flex;gap:8px;background:#fff;padding:12px;border-radius:12px;box-shadow:var(--shadow)}
.add-line input{padding:9px 10px;border:1px solid var(--line);border-radius:8px}
#np-name{flex:2}
#np-weight,#np-stock{width:100px}

/* ===== 链接 ===== */
.gen-line{display:flex;gap:8px;margin-bottom:20px}
.gen-line input{padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}
#g-hours{width:110px}#g-note{flex:1}
.link-list{display:flex;flex-direction:column;gap:10px}
.link-row{background:#fff;border-radius:12px;padding:12px 14px;box-shadow:var(--shadow)}
.link-url{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.link-url .mono{flex:1;background:#faf2ea;padding:7px 10px;border-radius:8px}
.link-meta{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--muted)}
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600}
.badge.active{background:#e6f6ea;color:var(--green)}
.badge.win{background:#fff0d6;color:#d98300}
.badge.gray{background:#f0e8e0;color:var(--muted)}
.empty{color:var(--muted);padding:24px;text-align:center}

/* ===== 表格/记录 ===== */
.table-wrap{background:#fff;border-radius:12px;box-shadow:var(--shadow);overflow:auto}
table{width:100%;border-collapse:collapse;font-size:13.5px}
th,td{padding:11px 14px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
th{background:#faf2ea;color:#7a6655;font-weight:600}
tr:last-child td{border-bottom:none}

/* ===== toast ===== */
#toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%) translateY(20px);
  background:#3b2f25;color:#fff;padding:11px 20px;border-radius:30px;font-size:14px;opacity:0;pointer-events:none;transition:.25s}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media(max-width:760px){
  .admin{flex-direction:column}
  .admin aside{width:100%;flex-direction:row;align-items:center;overflow-x:auto;padding:10px}
  .brand{padding:0 10px}
  .admin nav{flex-direction:row}
  .admin nav button{white-space:nowrap}
  .logout{margin:0}
  .wheel-stage,.lucky{width:100%;max-width:340px}
  .wheel-stage{height:auto;aspect-ratio:1}
  .prize-row,.add-line,.gen-line{flex-wrap:wrap}
}
