:root{
  --bg:#0c0a14;--card:#1a1428;--card2:#221a34;--line:rgba(255,255,255,.09);
  --txt:#f5f1fb;--mut:#9b93b0;--accent:#ff4d8d;--accent2:#ffb04d;
  --grad:linear-gradient(120deg,#ff4d8d,#ffb04d);--ok:#4dd4ac;
}
*{margin:0;padding:0;box-sizing:border-box}
body{background:radial-gradient(circle at 50% 0%,#181128,#0c0a14 60%);color:var(--txt);font-family:'Inter',sans-serif;-webkit-font-smoothing:antialiased;min-height:100vh;display:grid;place-items:center;padding:24px}
h1,h2,h3,.brand{font-family:'Sora',sans-serif}
.phone{width:100%;max-width:410px;height:min(840px,94vh);background:var(--bg);border:1px solid var(--line);border-radius:38px;box-shadow:0 40px 100px rgba(0,0,0,.6);overflow:hidden;position:relative;display:flex;flex-direction:column}
.notch{height:26px;display:flex;justify-content:center;align-items:flex-start;padding-top:8px}
.notch::after{content:"";width:110px;height:7px;border-radius:10px;background:#000}
.screen{flex:1;overflow-y:auto;padding:8px 22px 90px}
.screen::-webkit-scrollbar{display:none}
.btn{width:100%;font-family:'Sora';font-weight:600;font-size:15px;padding:15px;border-radius:14px;border:none;cursor:pointer;transition:.2s;background:var(--grad);color:#0c0a14}
.btn:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(255,77,141,.3)}
.btn.o{background:transparent;color:var(--txt);border:1px solid var(--line)}
.btn.o:hover{border-color:var(--accent);box-shadow:none}
.field{margin-bottom:14px}
.field label{display:block;font-size:12.5px;color:var(--mut);margin-bottom:7px;font-weight:500}
.field input{width:100%;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px;color:var(--txt);font-family:inherit;font-size:14.5px;outline:none;transition:.2s}
.field input:focus{border-color:var(--accent)}
.auth-logo{width:60px;height:60px;border-radius:16px;background:var(--grad);display:grid;place-items:center;color:#0c0a14;margin:14px auto 18px}
.auth-logo svg{width:30px;height:30px}
.auth h1{text-align:center;font-size:24px;font-weight:700;letter-spacing:-.5px}
.auth .sub{text-align:center;color:var(--mut);font-size:14px;margin:8px 0 24px}
.tabs{display:flex;background:var(--card);border-radius:12px;padding:4px;margin-bottom:22px}
.tabs button{flex:1;padding:10px;border:none;background:none;color:var(--mut);font-family:'Sora';font-weight:600;font-size:14px;border-radius:9px;cursor:pointer;transition:.2s}
.tabs button.on{background:var(--grad);color:#0c0a14}
.err{color:#ff6b81;font-size:12.5px;margin:-6px 0 12px;display:none}
.mut-c{text-align:center;color:var(--mut);font-size:12.5px;margin-top:16px}
/* dashboard */
.topbar{display:flex;justify-content:space-between;align-items:center;padding:14px 0 16px}
.topbar .hi{font-size:13px;color:var(--mut)}
.topbar .hi b{display:block;font-family:'Sora';font-size:20px;font-weight:700;margin-top:2px}
.topbar .av{width:44px;height:44px;border-radius:50%;background:var(--grad);display:grid;place-items:center;color:#0c0a14;font-family:'Sora';font-weight:700;font-size:17px}
.search{display:flex;align-items:center;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-bottom:18px;color:var(--mut)}
.search svg{width:18px;height:18px}
.search input{flex:1;background:none;border:none;outline:none;color:var(--txt);font-family:inherit;font-size:14px}
.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:16px}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;background:var(--card);border:1px solid var(--line);padding:8px 16px;border-radius:30px;font-size:13px;color:var(--mut);cursor:pointer;transition:.2s}
.chip.on{background:var(--grad);color:#0c0a14;border-color:transparent;font-weight:600}
/* event card */
.evc{background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-bottom:14px;cursor:pointer;transition:.2s}
.evc:hover{border-color:var(--accent)}
.evc .img{height:140px;position:relative;overflow:hidden}
.evc .img img{width:100%;height:100%;object-fit:cover}
.evc .date{position:absolute;top:10px;left:10px;background:rgba(12,10,20,.85);border-radius:11px;padding:7px 11px;text-align:center;line-height:1}
.evc .date .d{font-family:'Sora';font-size:18px;font-weight:700}
.evc .date .mo{font-size:10px;color:var(--accent);text-transform:uppercase;margin-top:2px}
.evc .cat{position:absolute;top:10px;right:10px;background:var(--grad);color:#0c0a14;padding:4px 11px;border-radius:20px;font-size:11px;font-weight:700}
.evc .b{padding:16px}
.evc h3{font-size:16.5px;font-weight:600}
.evc .loc{color:var(--mut);font-size:13px;margin-top:7px;display:flex;align-items:center;gap:6px}
.evc .loc svg{width:14px;height:14px;color:var(--accent)}
.evc .foot{display:flex;justify-content:space-between;align-items:center;margin-top:14px}
.evc .price{font-family:'Sora';font-weight:700;font-size:17px}
.evc .price.free{color:var(--accent2)}
.evc .foot .go{color:var(--mut);font-size:12.5px}
/* detail */
.detail-img{height:200px;border-radius:18px;overflow:hidden;margin-bottom:18px;position:relative}
.detail-img img{width:100%;height:100%;object-fit:cover}
.detail h2{font-size:24px;font-weight:700;letter-spacing:-.5px}
.dinfo{display:flex;gap:12px;align-items:center;padding:14px 0;border-bottom:1px solid var(--line)}
.dinfo .ic{width:40px;height:40px;border-radius:11px;background:var(--card);display:grid;place-items:center;color:var(--accent);flex:none}
.dinfo .ic svg{width:18px;height:18px}
.dinfo b{font-size:14px}.dinfo span{display:block;color:var(--mut);font-size:12.5px;margin-top:2px}
.qty{display:flex;align-items:center;justify-content:space-between;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:18px 0}
.qty .c{display:flex;align-items:center;gap:16px}
.qty button{width:32px;height:32px;border-radius:9px;border:1px solid var(--line);background:var(--card2);color:var(--txt);font-size:17px;cursor:pointer}
.qty .n{font-family:'Sora';font-weight:700;font-size:17px;min-width:20px;text-align:center}
/* ticket */
.ticket{background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-bottom:14px}
.ticket .top{background:var(--grad);color:#0c0a14;padding:16px 18px}
.ticket .top b{font-family:'Sora';font-size:17px;font-weight:700}
.ticket .top span{font-size:12.5px;font-weight:600;opacity:.8}
.ticket .body{padding:16px 18px;display:flex;gap:16px;align-items:center}
.ticket .qr{width:70px;height:70px;border-radius:10px;background:#fff;flex:none;display:grid;place-items:center}
.ticket .qr svg{width:56px;height:56px}
.ticket .body .info b{font-size:13px;display:block}
.ticket .body .info span{color:var(--mut);font-size:12px}
.ticket .body .info .row{margin-bottom:6px}
/* profile */
.pcard{text-align:center;padding:20px 0}
.pcard .av{width:78px;height:78px;border-radius:50%;background:var(--grad);display:grid;place-items:center;color:#0c0a14;font-family:'Sora';font-weight:700;font-size:30px;margin:0 auto 14px}
.pcard h2{font-size:21px;font-weight:700}
.pcard .em{color:var(--mut);font-size:13.5px;margin-top:4px}
.plist{margin-top:10px}
.pl{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line);font-size:14px}
.pl span{color:var(--mut)}.pl b{font-weight:600}
.sec-t{font-family:'Sora';font-weight:700;font-size:16px;margin:10px 0 12px}
.tabbar{position:absolute;bottom:0;left:0;right:0;height:74px;background:rgba(26,20,40,.9);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:flex;padding:0 10px}
.tabbar button{flex:1;background:none;border:none;color:var(--mut);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10.5px;font-family:'Sora';font-weight:600;padding-top:12px;transition:.2s}
.tabbar button svg{width:22px;height:22px}
.tabbar button.on{color:var(--accent)}
.hidden{display:none!important}
.toast{position:absolute;bottom:88px;left:22px;right:22px;background:var(--ok);color:#0c0a14;padding:13px;border-radius:13px;font-family:'Sora';font-weight:700;font-size:13.5px;text-align:center;transform:translateY(140px);transition:.4s cubic-bezier(.5,0,.2,1);z-index:20}
.toast.show{transform:translateY(0)}
.fade{animation:fade .4s ease}
@keyframes fade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
