/* Instalom — global stylesheet (base resets + dark theme, merged into one file) */

:root {
    --brand-purple: #7347bb;
    --brand-pink: #df467f;
    --brand-orange: #f27538;
    --brand-gradient: linear-gradient(135deg, var(--brand-purple), var(--brand-pink) 60%, var(--brand-orange));
    --brand-gradient-tight: linear-gradient(135deg, var(--brand-purple), var(--brand-pink) 55%, var(--brand-orange));
    --brand-gradient-horizontal: linear-gradient(90deg, var(--brand-purple), var(--brand-pink), var(--brand-orange));

    --color-bg: #0b0d17;
    --color-text: #e7e8ee;
    --color-text-muted: #a7a9c0;
    --color-text-soft: #cfd1e0;
    --color-text-dim: #8b8ea8;
    --color-text-faint: #7d7f97;
    --color-accent: #cfa6ff;
    --color-accent-hover: #f2864a;
    --color-danger: #ff8fae;
    --color-success: #7ed99b;
}

* {
    font-family: 'Ubuntu', sans-serif;
    transition: display .3s ease-in;
}

html {
    background: var(--color-bg);
}

a {
    transition: all .3s ease-in;
}

a:hover, a:active {
    text-decoration: none;
}

.navbar-light .navbar-nav .nav-link {
    font-weight: bold;
}

.btn.focus, .btn:focus {
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
}

.form-group {
    text-align: center;
}

/* Profile result card (index + stories pages share the same avatar-ring/
   user/handle/stats-row markup) — hidden until JS populates and reveals it;
   remaining visual styling lives further down with the rest of the card. */
.profile {
    display: none;
    text-align: center;
}

/* Fake "processing" terminal overlay (index page) — display toggle only;
   visual .terminal-* styling lives further down. */
#terminal {
    display: none;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    position: fixed;
}

.pays {
    display: none;
    text-align: center
}

.pays img {
    width: 80px;
    height: 80px;
}

.pays .alert a {
    color: white !important;
}

.help-block {
    color: red;
    font-size: 80%;
}

.add {
    font-size: 18px;
    text-align: center;
    cursor: pointer;
}

.add-link {
    color: #5181b8;
}

.add-link:hover {
    color: #2787f5;
}

/* Spinner */
#spinner {
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    position: fixed;
    text-align: center;
    display: none;
}

.spinner-back {
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    position: fixed;
    background-color: #05060b;
    z-index: 99;
}

.spinner-content {
    margin: auto;
    position: fixed;
    top: 45%;
    left: 0;
    right: 0;
    text-align: center;
    z-index: 100;
}

.spinner-ring {
    width: 64px;
    height: 64px;
    margin: 0 auto;
    border-radius: 50%;
    border: 4px solid rgba(255, 255, 255, 0.15);
    border-top-color: var(--brand-pink);
    border-right-color: var(--brand-purple);
    -webkit-animation: spinner-rotate 0.9s linear infinite;
    animation: spinner-rotate 0.9s linear infinite;
}

.spinner-label {
    margin-top: 16px;
    color: #fff;
    font-size: 14px;
    font-weight: 500;
    letter-spacing: .5px;
}

@-webkit-keyframes spinner-rotate { 100% { -webkit-transform: rotate(360deg) }}
@keyframes spinner-rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}

@media (max-width: 380px) {
    .logo {
        width: 50px;
    }
}

@media (max-width: 360px) {
    .logo {
        width: 40px;
    }
}

@media (max-width: 340px) {
    .logo {
        width: 30px;
    }
}

/* Stories page — dark, modern theme. Scoped under body so it never leaks to other pages. */

body {
    background: var(--color-bg);
    background-image:
        radial-gradient(circle at 15% 0%, rgba(115, 71, 187, 0.35), transparent 45%),
        radial-gradient(circle at 85% 20%, rgba(223, 70, 127, 0.28), transparent 45%),
        radial-gradient(circle at 50% 100%, rgba(103, 99, 222, 0.25), transparent 55%);
    background-attachment: fixed;
    color: var(--color-text);
}

body header {
    background-color: rgba(17, 19, 33, 0.75);
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    backdrop-filter: blur(16px);
}

body header nav.navbar {
    background-color: transparent !important;
    border: none;
}

body .navbar-light .navbar-nav .nav-link {
    color: var(--color-text-soft) !important;
}

body .navbar-light .navbar-nav .nav-link:hover,
body .navbar-light .navbar-nav .active > .nav-link {
    color: var(--color-accent-hover) !important;
}

body .navbar-brand {
    color: var(--color-accent) !important;
}

/* Bootstrap's navbar-light toggler draws dark strokes (rgba(0,0,0,.5)), meant
   for a light navbar background — invisible against this dark theme. */
body .navbar-toggler {
    border-color: rgba(255, 255, 255, 0.15);
}

body .navbar-light .navbar-toggler-icon {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

body footer {
    background-color: #0c0e18;
    color: #9a9db3;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    opacity: 1;
    padding: 48px 0 24px;
}

.footer-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 32px;
}

.footer-col h6 {
    color: var(--color-accent);
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 700;
    margin-bottom: 16px;
}

.footer-brand .footer-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
}

.footer-brand .footer-logo img {
    border-radius: 8px;
}

.footer-brand .footer-logo span {
    color: #fff;
    font-size: 18px;
    font-weight: 700;
}

.footer-brand p {
    font-size: 14px;
    line-height: 1.6;
    margin: 0;
    max-width: 320px;
}

.footer-link-list {
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.footer-link-list a {
    color: var(--color-text-soft);
    font-size: 14px;
}

.footer-link-list a:hover {
    color: var(--color-accent-hover);
}

.footer-contact-line {
    font-size: 14px;
    margin: 0 0 10px;
    color: var(--color-text-soft);
}

.footer-contact-line i {
    color: var(--color-accent);
    width: 16px;
}

.footer-contact-line a {
    color: var(--color-text-soft);
}

.footer-contact-line a:hover {
    color: var(--color-accent-hover);
}

.footer-payment img {
    height: 26px;
    filter: grayscale(1) brightness(2);
    opacity: .85;
}

.footer-bottom {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    margin-top: 36px;
    padding-top: 20px;
}

.footer-bottom .disclaimer-row {
    display: flex;
    align-items: center;
    gap: 10px;
    color: var(--color-danger);
    font-size: 13px;
    font-style: italic;
    margin: 0;
}

.footer-copy {
    color: var(--color-text-faint);
    font-size: 13px;
    margin: 0;
}

/* Reusable glass panel — .block is the legacy card class used on every other
   page; themed identically to .glass-card so those pages pick up the new
   look without needing their markup rewritten. */
.glass-card,
.block {
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02));
    border: 1px solid rgba(255, 255, 255, 0.09);
    border-radius: 20px;
    padding: 32px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.35);
    backdrop-filter: blur(18px);
}

/* Site-wide typography defaults on the dark background */
h1, h2, h3, h4, h5, h6 {
    color: #fff;
}

p {
    color: var(--color-text-muted);
}

a {
    color: var(--color-accent);
}

a:hover {
    color: var(--color-accent-hover);
}

.form-group label {
    color: var(--color-accent) !important;
}

/* Bootstrap form controls used outside the stories search box (index,
   reviews) — same dark treatment as .search-input-group's own input. */
.form-control,
.custom-file-label {
    background-color: rgba(0, 0, 0, 0.25) !important;
    border: 1px solid rgba(255, 255, 255, 0.12) !important;
    color: #fff !important;
    /* Bootstrap doesn't clip this label, so a long filename/placeholder wraps out of
       the fixed-height box and under the "Обзор" button on narrow screens. Keep it on
       one line, ellipsize overflow, and reserve room for the button. */
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    padding-right: 5rem;
}

.form-control::placeholder {
    color: #6d7089;
}

.form-control:focus {
    background-color: rgba(0, 0, 0, 0.25) !important;
    border-color: rgba(207, 166, 255, 0.6) !important;
    box-shadow: 0 0 0 3px rgba(115, 71, 187, 0.25) !important;
    color: #fff !important;
}

.input-group-text {
    background-color: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.12);
    color: var(--color-text-soft);
}

/* Buttons — reskin Bootstrap's semantic colors to the brand gradient so
   existing .btn-success/.btn-primary markup doesn't need to change. */
.btn-success,
.btn-primary {
    background: var(--brand-gradient);
    border: none;
    font-weight: 600;
    transition: transform .15s ease, box-shadow .15s ease;
}

.btn-success:hover,
.btn-primary:hover,
.btn-success:focus,
.btn-primary:focus,
.btn-success:active,
.btn-primary:active {
    background: var(--brand-gradient);
    color: #fff;
    transform: translateY(-1px);
    box-shadow: 0 10px 25px rgba(223, 70, 127, 0.4);
}

/* Alerts */
.alert {
    background-color: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.1);
    color: var(--color-text);
}

.alert-success {
    border-color: rgba(126, 217, 155, 0.35);
    color: var(--color-success);
}

.alert-danger {
    border-color: rgba(223, 70, 127, 0.4);
    color: var(--color-danger);
}

.alert-light {
    background-color: rgba(255, 255, 255, 0.06);
    color: var(--color-text-soft);
}

.alert .close {
    color: inherit;
    text-shadow: none;
    opacity: .6;
}

.alert .close:hover {
    opacity: 1;
    color: inherit;
}

.notification-link {
    color: var(--color-accent-hover);
}

.tip-banner {
    display: flex;
    align-items: center;
    gap: 14px;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02));
    border: 1px solid rgba(255, 255, 255, 0.09);
    border-left: 3px solid var(--color-accent);
    border-radius: 14px;
    padding: 16px 44px 16px 18px;
    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.25);
}

.tip-banner-icon {
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    background: rgba(207, 166, 255, 0.12);
    color: var(--color-accent);
    font-size: 16px;
}

/* Hero / search */
.stories-hero {
    padding-top: 20px;
}

.hero-icon {
    width: 56px;
    height: 56px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto 18px;
    border-radius: 16px;
    font-size: 22px;
    color: #fff;
    background: var(--brand-gradient);
    box-shadow: 0 10px 25px rgba(223, 70, 127, 0.35);
}

.hero-title {
    text-align: center;
    font-size: 30px;
    font-weight: 700;
    color: #fff;
    margin-bottom: 8px;
}

.hero-subtitle {
    text-align: center;
    color: var(--color-text-muted);
    font-size: 15px;
    margin-bottom: 28px;
}

.hero-footnote {
    text-align: center;
    color: var(--color-text-faint);
    font-size: 13px;
    margin: 22px 0 0;
}

.search-form {
    max-width: 520px;
    margin: 0 auto;
}

.search-input-group {
    display: flex;
    align-items: center;
    gap: 10px;
    background: rgba(0, 0, 0, 0.25);
    border: 1px solid rgba(255, 255, 255, 0.12);
    border-radius: 14px;
    padding: 8px 8px 8px 18px;
    transition: border-color .15s ease, box-shadow .15s ease;
}

.search-input-group:focus-within {
    border-color: rgba(207, 166, 255, 0.6);
    box-shadow: 0 0 0 3px rgba(115, 71, 187, 0.25);
}

.search-input-group.is-invalid {
    border-color: var(--brand-pink);
}

.search-input-icon {
    color: var(--color-text-dim);
}

.search-input-group .form-control {
    background: transparent !important;
    border: none;
    color: #fff !important;
    box-shadow: none;
    padding-left: 4px;
    /* Fill the space beside the @ icon rather than Bootstrap's width:100%, which
       on mobile (flex-wrap) would push the icon onto its own line above the input. */
    flex: 1 1 0;
    width: auto;
    min-width: 0;
}

.search-input-group .form-control::placeholder {
    color: #6d7089;
}

.search-input-group .form-control:focus {
    background: transparent !important;
    box-shadow: none !important;
    outline: none !important;
}

/* Neutralize Chrome's yellow/blue autofill background + native focus ring
   site-wide (any .form-control, not just the stories search box). */
.form-control:-webkit-autofill,
.form-control:-webkit-autofill:hover,
.form-control:-webkit-autofill:focus {
    -webkit-text-fill-color: #fff;
    -webkit-box-shadow: 0 0 0 1000px transparent inset;
    transition: background-color 9999s ease-in-out 0s;
}

small#help {
    display: none;
    text-align: center;
    color: var(--color-danger) !important;
    font-size: 13px;
    margin-top: 10px;
}

.btn-gradient {
    background: var(--brand-gradient);
    border: none;
    color: #fff;
    font-weight: 600;
    border-radius: 10px;
    padding: 10px 22px;
    white-space: nowrap;
    transition: transform .15s ease, box-shadow .15s ease;
}

.btn-gradient:hover {
    color: #fff;
    transform: translateY(-1px);
    box-shadow: 0 10px 25px rgba(223, 70, 127, 0.4);
}

.btn-gradient:focus {
    color: #fff;
}

/* Profile result card */
.avatar-ring {
    width: 132px;
    height: 132px;
    margin: 0 auto;
    border-radius: 50%;
    padding: 4px;
    background: var(--brand-gradient-tight);
    display: flex;
    align-items: center;
    justify-content: center;
}

.avatar-ring .profile-image {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    border: 3px solid var(--color-bg);
    object-fit: cover;
    background: #14172a;
}

.profile .user {
    color: #fff;
    font-size: 19px;
    font-weight: 700;
    font-style: normal;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
}

.profile .verified-badge {
    color: #6dc4ff;
    font-size: 15px;
}

.profile .handle {
    color: var(--color-text-dim);
    font-size: 14px;
    margin: 2px 0 0;
}

.profile .profile-data {
    color: var(--color-text-muted);
    font-size: 14px;
    display: block;
    text-align: center;
}

.profile .profile-data .desc {
    display: block;
    margin-bottom: 14px;
    color: var(--color-text-muted);
}

.stats-row {
    display: inline-flex;
    align-items: stretch;
    gap: 18px;
}

.stat {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    padding: 0 12px;
    border-left: 1px solid rgba(255, 255, 255, 0.1);
}

.stat:first-child {
    border-left: none;
    padding-left: 0;
}

.stat strong {
    color: #fff;
    font-size: 16px;
    font-weight: 700;
}

.stat small {
    color: var(--color-text-dim);
    font-size: 12px;
}

/* Stories tray + panel */
.stories-panel {
    text-align: center;
}

.stories-count {
    color: var(--color-text-muted);
    font-size: 14px;
    margin-bottom: 18px;
}

.empty-story {
    color: var(--color-text-dim);
    font-size: 17px;
}

.story-tray {
    display: flex;
    gap: 18px;
    overflow-x: auto;
    padding: 6px 4px 16px;
    justify-content: flex-start;
    scrollbar-width: thin;
}

.story-tray::-webkit-scrollbar {
    height: 6px;
}

.story-tray::-webkit-scrollbar-thumb {
    background: rgba(255, 255, 255, 0.15);
    border-radius: 6px;
}

.story-bubble {
    flex: 0 0 auto;
    background: none;
    border: none;
    outline: none;
    padding: 0;
    cursor: pointer;
}

.story-bubble:focus {
    outline: none;
}

.story-bubble:focus-visible .story-bubble-ring {
    box-shadow: 0 0 0 3px rgba(207, 166, 255, 0.6);
}

.story-bubble-ring {
    display: block;
    width: 96px;
    height: 96px;
    border-radius: 50%;
    padding: 3px;
    background: var(--brand-gradient-tight);
    position: relative;
}

.story-bubble-ring img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
    border: 3px solid var(--color-bg);
    background: #14172a;
}

.story-bubble-play {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 18px;
    text-shadow: 0 2px 6px rgba(0, 0, 0, 0.6);
    pointer-events: none;
}

.story-bubble:hover .story-bubble-ring {
    filter: brightness(1.15);
}

/* Features */
.features-row {
    margin-top: 40px;
    margin-bottom: 40px;
}

.feature {
    text-align: center;
    padding: 20px 10px;
}

/* Only the 4-card 2x2 grids (index/stories features-row) need extra top
   margin on the wrapped second row — scoped so it doesn't also match the
   3rd item of unrelated 3-column rows (e.g. instruction page steps). */
@media (min-width: 768px) {
    .features-row .feature:nth-child(n+3) {
        margin-top: 16px;
    }
}

.feature-icon {
    width: 60px;
    height: 60px;
    margin: 0 auto 16px;
    border-radius: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.1);
    color: var(--color-accent);
    font-size: 22px;
}

.feature h3 {
    color: #fff;
    font-size: 17px;
    font-weight: 700;
    letter-spacing: .5px;
    margin-bottom: 10px;
}

.feature p {
    color: #9a9db3;
    font-size: 14px;
    line-height: 1.6;
}

/* Story viewer modal */
.story-viewer {
    position: fixed;
    inset: 0;
    z-index: 1050;
    display: none;
    align-items: center;
    justify-content: center;
}

.story-viewer.is-open {
    display: flex;
}

.story-viewer-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.88);
}

.story-viewer-dialog {
    position: relative;
    width: min(420px, 92vw);
    height: min(760px, 88vh);
    border-radius: 16px;
    overflow: hidden;
    background: #000;
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.6);
}

.story-viewer-progress {
    position: absolute;
    top: 10px;
    left: 10px;
    right: 10px;
    display: flex;
    gap: 4px;
    z-index: 3;
}

.story-viewer-progress-item {
    flex: 1;
    height: 3px;
    border-radius: 3px;
    background: rgba(255, 255, 255, 0.3);
    overflow: hidden;
}

.story-viewer-progress-item i {
    display: block;
    height: 100%;
    width: 0;
    background: #fff;
    font-style: normal;
}

.story-viewer-media {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #000;
}

.story-viewer-media img,
.story-viewer-media video {
    max-width: 100%;
    max-height: 100%;
}

.story-viewer-close {
    position: absolute;
    top: 20px;
    right: 14px;
    z-index: 5;
    background: rgba(0, 0, 0, 0.4);
    border: none;
    outline: none;
    color: #fff;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    font-size: 16px;
}

.story-viewer-sound {
    position: absolute;
    top: 20px;
    left: 14px;
    z-index: 5;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.4);
    border: none;
    outline: none;
    color: #fff;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    font-size: 15px;
    cursor: pointer;
}

.story-viewer-sound.is-on {
    background: var(--brand-gradient);
}

.story-viewer-sound:focus-visible {
    box-shadow: inset 0 0 0 2px rgba(207, 166, 255, 0.6);
}

.story-viewer-nav {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 56px;
    border: none;
    outline: none;
    background: transparent;
    color: rgba(255, 255, 255, 0.75);
    font-size: 20px;
    z-index: 4;
}

.story-viewer-close:focus,
.story-viewer-close:focus-visible,
.story-viewer-nav:focus,
.story-viewer-nav:focus-visible {
    outline: none;
    box-shadow: none;
}

.story-viewer-close:focus-visible,
.story-viewer-nav:focus-visible {
    box-shadow: inset 0 0 0 2px rgba(207, 166, 255, 0.6);
}

.story-viewer-nav:hover {
    color: #fff;
}

.story-viewer-prev {
    left: 0;
}

.story-viewer-next {
    right: 0;
}

/* Status modal (payment / review success & failure) */
.status-modal {
    position: fixed;
    inset: 0;
    z-index: 1060;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 20px;
}

.status-modal.is-open {
    display: flex;
}

.status-modal-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.75);
}

.status-modal-dialog {
    position: relative;
    width: min(380px, 100%);
}

.status-modal-close {
    position: absolute;
    top: 14px;
    right: 14px;
    background: transparent;
    border: none;
    outline: none;
    color: var(--color-text-dim);
    font-size: 22px;
    line-height: 1;
}

.status-modal-close:hover {
    color: var(--color-text);
}

.status-modal-icon {
    width: 56px;
    height: 56px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto 18px;
    border-radius: 16px;
    font-size: 22px;
    color: #fff;
    background: var(--brand-gradient);
    box-shadow: 0 10px 25px rgba(223, 70, 127, 0.35);
}

.status-modal--error .status-modal-icon {
    background: linear-gradient(135deg, var(--brand-pink), var(--color-danger));
    box-shadow: 0 10px 25px rgba(255, 143, 174, 0.35);
}

.status-modal-title {
    margin-top: 4px;
}

.status-modal-text {
    color: var(--color-text-muted);
}

.status-modal-ok {
    margin-top: 8px;
}

@media (max-width: 991px) {
    .result {
        margin-top: 40px;
    }
}

@media (max-width: 575px) {
    .glass-card {
        padding: 22px 18px;
    }

    .search-input-group {
        flex-wrap: wrap;
    }

    .search-input-group .btn-gradient {
        width: 100%;
        margin-top: 8px;
    }
}

/* Chartist chart (index page) — default label/grid colors are near-black,
   invisible on the dark background; brighten for legibility. The line/point/
   area gradients reference <linearGradient> defs injected on the chart's
   'created' event in script.js — plain CSS can't gradient an SVG stroke/fill. */
.chart-headline {
    color: var(--brand-pink);
    font-weight: 700;
}

.ct-label {
    fill: var(--color-text-dim);
    color: var(--color-text-dim);
}

.ct-grid {
    stroke: rgba(255, 255, 255, 0.08);
    stroke-dasharray: 2px 6px;
}

.ct-series-a .ct-line {
    stroke: url(#chart-line-gradient);
    stroke-width: 3px;
    filter: drop-shadow(0 0 6px rgba(223, 70, 127, 0.35));
}

.ct-series-a .ct-point {
    stroke: url(#chart-line-gradient);
    stroke-width: 9px;
    filter: drop-shadow(0 0 4px rgba(223, 70, 127, 0.55));
}

.ct-series-a .ct-area {
    fill: url(#chart-area-gradient);
    fill-opacity: 1;
}

/* Bootstrap custom file input "Browse" button (reviews page avatar upload) */
.custom-file-label::after {
    background-color: rgba(255, 255, 255, 0.08);
    color: var(--color-text-soft);
    border-left: 1px solid rgba(255, 255, 255, 0.12) !important;
}

/* Reviews page — testimonial cards */
.review-card {
    background: rgba(255, 255, 255, 0.03);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 16px;
    padding: 28px 24px 22px;
    height: 100%;
    text-align: center;
    transition: transform .15s ease, border-color .15s ease;
}

.review-card:hover {
    transform: translateY(-2px);
    border-color: rgba(207, 166, 255, 0.3);
}

.review-quote-icon {
    display: block;
    color: rgba(207, 166, 255, 0.35);
    font-size: 20px;
    margin-bottom: 10px;
}

.review-avatar {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    border: 3px solid rgba(255, 255, 255, 0.1);
    margin-bottom: 14px;
}

.review-name {
    display: block;
    color: #fff;
    font-size: 15px;
    margin-bottom: 8px;
}

.review-message {
    color: var(--color-text-muted);
    font-size: 14px;
    line-height: 1.6;
    margin: 0;
}

/* Terminal / processing overlay (index page "get access" progress animation) */
.terminal-back {
    position: fixed;
    inset: 0;
    background: rgba(5, 6, 11, 0.92);
    backdrop-filter: blur(6px);
    z-index: 199;
}

.terminal-window {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(640px, 92vw);
    border-radius: 16px;
    overflow: hidden;
    background: var(--color-bg);
    border: 1px solid rgba(255, 255, 255, 0.1);
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.6);
    z-index: 200;
}

.terminal-window .fakeMenu {
    display: flex;
    align-items: center;
    gap: 8px;
    width: auto;
    height: 38px;
    padding: 0 14px;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02));
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 0;
}

.terminal-window .fakeButtons {
    position: static;
    width: 11px;
    height: 11px;
    border: none;
    margin: 0;
    top: auto;
    left: auto;
}

.terminal-window .fakeClose { background-color: #ff5f57; }
.terminal-window .fakeMinimize { background-color: #febc2e; }
.terminal-window .fakeZoom { background-color: #28c840; }

.terminal-title {
    margin-left: 8px;
    color: var(--color-text-dim);
    font-size: 12px;
    font-family: Menlo, Consolas, 'Liberation Mono', monospace;
}

.terminal-window .fakeScreen {
    background: #05060b;
    width: 100%;
    height: 340px;
    box-sizing: border-box;
    overflow: auto;
    padding: 18px;
    border-radius: 0;
    font-family: Menlo, Consolas, 'Liberation Mono', monospace;
    font-size: 13px;
    line-height: 1.7;
}

.terminal-window .fakeScreen span {
    position: static;
    text-align: left;
    font-size: 13px;
    font-family: inherit;
    white-space: pre-wrap;
    overflow: visible;
    color: var(--color-text-soft);
}

.terminal-window .username {
    color: var(--color-success);
    font-weight: 700;
}

.terminal-progress {
    height: 3px;
    background: rgba(255, 255, 255, 0.06);
}

.terminal-progress-bar {
    height: 100%;
    width: 0;
    background: var(--brand-gradient-horizontal);
}

.terminal-window.is-running .terminal-progress-bar {
    animation: terminal-progress-fill 4.6s ease-in-out forwards;
}

@keyframes terminal-progress-fill {
    from { width: 0; }
    to { width: 100%; }
}
