:root{
    --tp-bg:#F6F7FB;
    --tp-surface:#FFFFFF;
    --tp-surface-2:#F2F4FA;
    --tp-border:rgba(15,23,42,.10);
    --tp-text:#0F172A;
    --tp-muted:#667085;
    --tp-accent:#2563EB;
    --tp-accent-2:#22C55E;
    --tp-shadow: 0 12px 30px rgba(15,23,42,.08);
}

html, body{
    height:100%;
}

body{
    background:
        radial-gradient(1100px 700px at 10% 0%, rgba(37,99,235,.10), transparent 55%),
        radial-gradient(900px 600px at 90% 10%, rgba(34,197,94,.10), transparent 55%),
        var(--tp-bg);
    color:var(--tp-text);
}

.tp-app{
    min-height:100vh;
    display:flex;
    flex-direction:column;
}

.tp-main{
    flex:1 1 auto;
}

.tp-footer{
    border-top:1px solid var(--tp-border);
    background: rgba(255,255,255,.72);
}

.tp-container{
    padding-top: 12px;
    padding-bottom: 12px;
    max-width: 860px;
}
@media (min-width: 768px){
    .tp-container{
        padding-top: 18px;
        padding-bottom: 18px;
        max-width: 860px;
    }
}

.tp-link{
    color: rgba(37,99,235,.95);
    text-decoration:none;
}
.tp-link:hover{
    color: rgba(37,99,235,1);
    text-decoration:underline;
}

.tp-card{
    background: var(--tp-surface);
    border:1px solid var(--tp-border);
    box-shadow: var(--tp-shadow);
    border-radius: 16px;
}

.tp-kv{
    border:1px solid var(--tp-border);
    background: var(--tp-surface-2);
    border-radius: 12px;
}

.tp-label{
    font-size: .75rem;
    color: var(--tp-muted);
    line-height: 1.2;
}

.tp-value{
    line-height: 1.2;
}

.tp-hint{
    font-size: .8125rem;
    color: var(--tp-muted);
    font-weight: 400;
}

.tp-mono{
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

.tp-address{
    word-break: break-all;
}

.tp-qr-img{
    width:100%;
    height:auto;
    max-width: 210px;
    border-radius: 14px;
    border:1px solid var(--tp-border);
    background: #fff;
}
@media (min-width: 768px){
    .tp-qr-img{
        max-width: 230px;
    }
}

/* Bootstrap color harmony on dark background */
.text-muted{
    color: var(--tp-muted) !important;
}

.form-control, .form-select{
    background-color: #fff;
    border-color: rgba(15,23,42,.14);
    color: var(--tp-text);
}

.form-control::placeholder{
    color: rgba(102,112,133,.85);
}

.form-control:disabled, .form-select:disabled{
    background-color: rgba(15,23,42,.04);
    color: rgba(15,23,42,.55);
}

.form-control:focus, .form-select:focus{
    background-color: #fff;
    border-color: rgba(37,99,235,.60);
    box-shadow: 0 0 0 .25rem rgba(37,99,235,.14);
    color: var(--tp-text);
}

.btn-primary{
    background: linear-gradient(135deg, rgba(37,99,235,1), rgba(34,197,94,1));
    border: 0;
}
.btn-primary:hover{
    filter: brightness(1.05);
}
.btn-outline-light{
    color: rgba(15,23,42,.85);
    border-color: rgba(15,23,42,.18);
    background: rgba(255,255,255,.72);
}
.btn-outline-light:hover{
    color: rgba(15,23,42,1);
    border-color: rgba(15,23,42,.28);
    background: rgba(255,255,255,1);
}

.alert{
    border-color: rgba(148,163,184,.18);
    background: rgba(255,255,255,.85);
    color: var(--tp-text);
}

.badge{
    border: 1px solid rgba(148,163,184,.22);
}

/* Toast: force opaque background (some themes or GPU blending can make it look transparent) */
.toast{
    opacity: 1 !important;
    backdrop-filter: none !important;
}
.toast.showing,
.toast.show{
    opacity: 1 !important;
}
.toast.text-bg-success{ background-color:#fff !important; }
.toast.text-bg-danger{ background-color:#DC2626 !important; }
.toast.text-bg-dark{ background-color:#111827 !important; }