/* Стили карточек */
.spread-cards {
    display: grid;
    /* min(100%, 300px) вместо 300px: на экране уже 300px колонка иначе шире
       страницы и карточки уезжают под край. Число колонок считает сама сетка,
       отдельного правила «одна колонка на телефоне» не нужно. */
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
    gap: clamp(0.75rem, 1.5vw, 1.5rem);
}

.spread-card {
    background: white;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
    transition: box-shadow 0.3s ease, transform 0.3s ease;
    display: flex;
    flex-direction: column;
    min-height: 320px;
    contain: layout;
}

.spread-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
}

.card-favourite {
    position: absolute;
    bottom: 20px;
    left: 25px;
    opacity: 0.3;
}
.card-favourite:hover {
    cursor: pointer;
    opacity: 0.6;
}

.card-header {
    padding: 1.25rem;
    border-bottom: 1px solid #f1f5f9;
}

.coin-info {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

.coin-info h3 {
    margin: 0;
    font-size: 1.1rem;
    color: #2c3e50;
    /* Длинное имя монеты переносится внутри карточки, а не растягивает её. */
    overflow-wrap: anywhere;
}

.coin-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.5rem;
    margin-top: 0.25rem;
}

.coin-meta .symbol {
    font-size: 0.85rem;
    color: #7f8c8d;
}

.coin-meta .chain {
    font-size: 0.8rem;
    background-color: #e0f2fe;
    color: #0369a1;
    padding: 0.15rem 0.5rem;
    border-radius: 50px;
}

.card-body {
    padding: 1.25rem;
    flex-grow: 1;
}

.spread-value, .spread-percentage {
    margin-bottom: 1rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.spread-value .label, .spread-percentage .label {
    font-size: 0.9rem;
    color: #64748b;
}

.spread-value .value, .spread-percentage .value {
    font-size: 1rem;
    font-weight: 600;
}

.exchanges {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin-top: 1.5rem;
}

.exchange {
    display: flex;
    justify-content: space-between;
    align-items: center;
    /* Цены переезжают под название биржи, когда в строку они не помещаются:
       в карточке шириной 300px пара «0.00000812 - 0.00000811» рядом с
       «Binance FUTURES» не умещается. */
    flex-wrap: wrap;
    gap: 0.15rem 0.75rem;
    padding: 0.75rem;
    border-radius: 8px;
    font-size: 0.9rem;
}

.exchange .buy {
    color: green;
}

.exchange .sell {
    color: red;
}

.first-exchange {
    background-color: #e0f2fe;
    color: #0369a1;
}

.second-exchange {
    background-color: #fef3c7;
    color: #92400e;
}

.exchange-name {
    font-weight: 500;
}

.exchange-price {
    font-family: 'Roboto Mono', monospace;
    white-space: nowrap;
}

/* Ввод / вывод — сводная строка под макс. позицией: по паре значков-стрелок
   на биржу (⬇ ввод, ⬆ вывод), состояние цветом, текст в title. В строку биржи
   значки не ставим: при ширине карточки в 300–330px там нет места и строка
   переносилась бы. */
.wallet-info {
    /* Подпись и биржи — в разных колонках: когда обе биржи в остаток строки не
       помещаются, вторая уходит под первую, а не под подпись слева. */
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: baseline;
    gap: 0.25rem 0.9rem;
    margin-top: 0.4rem;
    font-size: 0.9rem;
    color: #6c757d;
}

.wallet-items {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.25rem 0.9rem;
}

.wallet-item {
    white-space: nowrap;
}

.wallet-item .exchange-name {
    font-weight: 500;
}

.wallet-flag {
    cursor: help;
    font-size: 0.9rem;
    vertical-align: -0.05em;
}

.wallet-flag + .wallet-flag {
    margin-left: 0.3rem;
}

.wallet-flag-ok {
    color: #16a34a;
    opacity: 0.8;
}

.wallet-flag-off {
    color: #dc2626;
}

.wallet-flag-unknown {
    color: #9ca3af;
    opacity: 0.7;
}

.card-footer {
    padding: 1rem 1.25rem;
    background-color: #f8fafc;
    border-top: 1px solid #f1f5f9;
    text-align: right;
}

.card-footer .time {
    font-size: 0.8rem;
    color: #64748b;
}

/* Спред не пересчитывался дольше порога: одна из сторон замолчала, и числа
   выше — уже не про рынок. Молча показывать их как свежие нельзя. */
.card-footer .time.is-stale {
    color: #b45309;
    font-weight: 600;
}

.card-footer .time.is-stale::before {
    content: "\26A0";
    margin-right: 0.3rem;
}

.empty-state {
    grid-column: 1 / -1;
    text-align: center;
    padding: 3rem;
    color: #94a3b8;
}

.empty-state i {
    font-size: 2rem;
    margin-bottom: 1rem;
}

.empty-state p {
    margin: 0;
    font-size: 1rem;
}