/*
 * passport-ocr — page styles (was inline <style> in passport-ocr.blade.php).
 * Loaded only by that view, right after new-theme/style.css, so rules here
 * affect this tool only.
 */
/* ===================== 1. Passport + ID Card ===================== */
.idco-sections>div {
    padding-top: 70px !important;
    padding-bottom: 70px !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

.idco-sections>.container_fluid {
    padding-left: calc(var(--bs-gutter-x, 1.5rem) * .5);
    padding-right: calc(var(--bs-gutter-x, 1.5rem) * .5);
}

.idco-sections>div:has(.why_our_section_main) {
    background-color: #fafafa;
}

@media screen and (max-width: 767px) {
    .idco-sections>div {
        padding-top: 40px !important;
        padding-bottom: 40px !important;
    }

    .mg-sm-bottom-20 {
        margin-bottom: 20px !important;
    }

}

.px-xxl-4_5 {
    padding: 40px;
}

.output_file_parent {
    display: flex;
    justify-content: center;
}

.idco-extract-fields-list {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 12px 28px;
}

.idco-extract-field-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 16px;
    font-weight: 500;
}

/* Chips flow as inline text with balanced line wrapping, so the last row
is never a lone orphan (flex-wrap left "Signature" alone on row 2).
The mobile/tablet media query below still switches to a 2-col grid. */

.idco-extract-field-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0 14px;
    font-size: 16px;
    font-weight: 500;
    line-height: 1.5;
    white-space: nowrap;
}

.idco-how-it-works-row {
    margin-top: 24px;
}

.idco-how-it-works-col {
    padding: 20px 18px;
    position: relative;
}

.idco-how-it-works-col+.idco-how-it-works-col::before {
    content: '';
    position: absolute;
    top: 20px;
    bottom: 20px;
    left: 0;
    width: 1px;
    background: #C9C9C9;
}

.idco-how-it-works-col img {
    width: 100%;
    max-width: 70px;
    height: 100%;
    max-height: 70px;
    margin-bottom: 10px !important;
}

.idco-how-it-works-col h3 {
    font-size: 20px;
    font-weight: 600;
    margin-bottom: 14px;
}

.idco-how-it-works-col p {
    font-size: 18px;
    font-weight: 400;
    color: #000000;
    margin-bottom: 0;
}

/* Mobile + tablet: fields become a left-aligned 2-column grid, and the
how-it-works steps stack in one column with horizontal dividers. */
@media screen and (max-width: 991px) {
    .idco-extract-fields-list {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 14px 24px;
        max-width: 420px;
        margin: 0 auto;
        text-align: left;
    }

    .idco-extract-field-chip {
        align-items: flex-start;
        margin: 0;
        line-height: 1.3;
        white-space: normal;
    }

    .idco-extract-field-chip svg {
        flex-shrink: 0;
        margin-top: 2px;
    }

    .idco-how-it-works-row>.idco-how-it-works-col {
        flex: 0 0 100%;
        max-width: 480px;
        width: 100%;
        margin: 0 auto;
        padding: 24px 10px;
    }

    .idco-how-it-works-col+.idco-how-it-works-col::before {
        top: 0;
        bottom: auto;
        left: 0;
        right: 0;
        width: auto;
        height: 1px;
        background: #E4E4E4;
    }

    .idco-how-it-works-col h3 {
        font-size: 18px;
        margin-bottom: 10px;
    }

    .idco-how-it-works-col p {
        font-size: 15px;
    }

}

.process_step_v2_group {
    position: relative;
    max-width: 808px;
    margin: 24px auto 0;
}

.process_step_v2_group::before {
    content: '';
    position: absolute;
    top: 35px;
    bottom: 35px;
    left: 30px;
    width: 0;
    border-left: 1.5px dashed var(--action_color);
}

.process_step_v2_card {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 15px;
    background: #fff;
    border-radius: 10px;
    padding: 20px 15px;
    box-shadow: 0px 0px 4px 0px #00000026;
}

.process_step_v2_card+.process_step_v2_card {
    margin-top: 30px;
}

.process_step_v2_number {
    width: 30px;
    height: 30px;
    border: 0.3px solid var(--action_color);
    border-radius: 4.66px;
    background: #F3EFFF;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 14px;
    color: var(--action_color);
    flex-shrink: 0;
}

.process_step_v2_content {
    display: flex;
    flex-direction: column;
    gap: 7px;
    text-align: left;
}

.process_step_v2_content p {
    display: block;
    margin: 0;
    font-size: 18px;
    font-weight: 400;
    line-height: 25px;
}

.process_step_v2_title {
    display: block;
    font-size: 20px;
    font-weight: 600;
    line-height: 100%;
}

.formats_table_v2 {
    border-collapse: separate;
    border-spacing: 0;
    width: 100%;
    margin-bottom: 20px;
}

.formats_table_v2 th,
.formats_table_v2 td {
    border-bottom: 1px solid #cecece;
    border-right: 1px solid #cecece;
    padding: 10px 30px;
    height: 67px;
    text-align: center;
    vertical-align: middle;
}

.formats_table_v2 th {
    border-top: 1px solid #cecece;
    font-weight: 700;
    font-size: 18px;
}

.formats_table_v2 td {
    font-weight: 400;
    font-size: 16px;
}

.formats_table_v2 th:first-child,
.formats_table_v2 td:first-child {
    border-left: 1px solid #cecece;
}

.formats_table_v2_mobile {
    display: none;
}

@media screen and (max-width: 575px) {
    .formats_table_v2_desktop {
        display: none;
    }

    .formats_table_v2_mobile {
        display: block;
    }

    .formats_table_v2 {
        table-layout: fixed;
    }

    .formats_table_v2 th,
    .formats_table_v2 td {
        padding: 12px 15px;
        height: auto;
    }

    .formats_table_v2 th {
        height: 52px;
    }

    .formats_table_v2 td {
        font-size: 15px;
    }

    .idco-how-it-works-row>.idco-how-it-works-col {
        padding: 24px;
    }

}

.input_vs_output_v2_card {
    position: relative;
    margin: 0 20px;
}

.input_vs_output_v2_card .card-body {
    padding: 30px 20px;
}

/* Passport-only: the shared fixed `left: 32%` line cut through the wide
(landscape) passport "Before" image, so the divider is the Before
column's own right border instead — it always sits after its content. */
@media screen and (min-width: 768px) {

    /* Vertical padding moves from card-body to the columns so the
    border runs the card's full height, like the Figma divider. */
    .input_vs_output_v2_card .card-body {
        padding-top: 0;
        padding-bottom: 0;
    }

    .input_vs_output_v2_card .card-body>div {
        padding-top: 30px;
        padding-bottom: 30px;
    }

    .input_vs_output_v2_card .card-body>div:first-child {
        flex: 0 0 auto;
        max-width: 45%;
        padding-right: 3rem;
        border-right: 1px solid #c3bebe;
    }

    .input_vs_output_v2_card .card-body>div:first-child img {
        width: 100%;
        height: auto;
    }

}

@media screen and (max-width: 800px) {
    .input_vs_output_v2_card img {
        width: 100%;
    }

    .input_vs_output_v2_card::after {
        display: none;
    }

}

@media screen and (max-width: 500px) {
    .input_vs_output_v2_card {
        background-color: transparent !important;
        border: none !important;
    }

    .input_vs_output_v2_card::after {
        content: none;
    }

}

/* ============================================================
Results field list (Figma "ID Card OCR Done development" →
results frame, node 1984078543): a plain label/value field
list, not invoice-ocr's spreadsheet grid — see generateTable()
override + idCardOcrJsonToDataArray() comments in this page's
script block. kv_label mirrors .preview_table th's bold/muted
look; kv_value is the editable field.
============================================================ */
/* ============================================================
Results field list (same as id-card-ocr's results frame): a plain label/value field
list, not invoice-ocr's spreadsheet grid — see generateTable()
override + passportOcrJsonToDataArray() comments in this page's
script block. kv_label mirrors .preview_table th's bold/muted
look; kv_value is the editable field.
============================================================ */
.kv_table {
    margin-bottom: 0;
}

/* Grow with the field list instead of the shared fixed-height,
scrolling .preview-body box. */
.idco-result-card {
    height: auto !important;
}

.kv_table .kv_label {
    width: 45%;
    color: #1A1A1A;
    font-weight: 500 !important;
}

.kv_table .kv_label,
.kv_table .kv_value {
    padding: 18px 16px 18px 0 !important;
    font-size: 16px;
    border: none;
}

.kv_table .kv_value {
    color: #555;
    word-break: break-word;
}

/* One continuous underline per label+value pair: it sits on the
<tr>, not the cells, so it never breaks between the two. */
.kv_table tr {
    border-bottom: 1px solid #E9E9E9;
}

.kv_table tr:last-child,
.kv_table .kv_spacer,
.kv_table tr:has(.kv_card_heading) {
    border-bottom: none;
}

.kv_table .kv_card_heading {
    color: var(--action_color, #623CEA);
}

.kv_table .kv_spacer td {
    padding: 0 !important;
    height: 8px;
    border: none !important;
}

/* Desktop pairs two fields per row (Name | Date Of Birth, ...) with a
vertical rule between the columns. generateTable() still emits one
<tr> per field so copy/export keep reading "one <tr> = one field";
the tbody becomes a 2-column grid of <tr>s instead. Card headings
and spacers span both columns so each card starts on a fresh row. */
@media screen and (min-width: 992px) {
    .kv_table tbody {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        column-gap: 70px;
    }

    .kv_table tr {
        display: flex;
        align-items: center;
        position: relative;
    }

    /* Last pair of the list has no underline either. */
    .kv_table tr.kv_left:nth-last-child(2) {
        border-bottom: none;
    }

    .kv_table tr.kv_right::before {
        content: '';
        position: absolute;
        top: 0;
        bottom: 0;
        left: -35px;
        width: 1px;
        background: #E9E9E9;
    }

    .kv_table .kv_label {
        width: auto;
        flex: 0 0 55%;
    }

    .kv_table .kv_value {
        flex: 1 1 auto;
    }

}

@media screen and (min-width: 992px) and (max-width: 1500px) {
    .kv_table tbody {
        column-gap: 48px;
    }

    .kv_table tr.kv_right::before {
        left: -24px;
    }

    .kv_table .kv_label {
        flex-basis: 50%;
    }

    .kv_table .kv_label,
    .kv_table .kv_value {
        font-size: 15px;
    }

    .idco-result-card {
        padding: 14px 24px !important;
    }

}

@media screen and (min-width: 992px) {

    .kv_table tr.kv_spacer,
    .kv_table tr:has(.kv_card_heading) {
        grid-column: 1 / -1;
        display: block;
    }

    .kv_table .kv_card_heading,
    .kv_table .kv_spacer td {
        display: block;
    }

}

@media screen and (max-width: 991px) {

    .kv_table .kv_label,
    .kv_table .kv_value {
        padding: 14px 12px 14px 0 !important;
        font-size: 14px;
    }

    .kv_table .kv_value {
        color: #333;
    }

}

/* ============================================================
Results header (Figma results frame): Start Over / QR / Copy /
single "Download" dropdown, instead of the shared "Export As"
+ "Download All" pair. Scoped to .idco-output-stage so
invoice-ocr/passport-ocr/bank-statement-converter, which reuse
the same .output_stage/.export_all/.download_all classes from
the shared new-theme stylesheet, keep their own layout —
desktop only (>=992px), matching the Figma frame supplied.
============================================================ */
/* One height/font for every results action button (header and files
panel), so they always line up. The shared stylesheet forces some
of them (.startover/.export_all/.download_all) to 42px/16px with
!important at <=1500px but not the others — hence !important below. */
.conversion_container {
    --idco-btn-h: 50px;
    --idco-btn-fs: 18px;
}

@media screen and (max-width: 1500px) {
    .conversion_container {
        --idco-btn-h: 44px;
        --idco-btn-fs: 16px;
    }

}

@media screen and (min-width: 992px) {
    .idco-output-stage {
        display: flex;
        align-items: center;
        gap: 14px;
        height: auto;
        padding-bottom: 30px;
        margin-bottom: 20px;
        border-bottom: 1px solid #E9E9E9;
    }

    .idco-output-stage .startover,
    .idco-output-stage .idco-header-icon-btn,
    .idco-output-stage .idco-header-copy-btn,
    .idco-output-stage .idco-download-btn {
        height: var(--idco-btn-h) !important;
        border-radius: 8px;
        font-size: var(--idco-btn-fs) !important;
        font-weight: 500;
    }

    .idco-output-stage .startover {
        min-width: 150px !important;
        padding: 0 22px;
        gap: 10px;
        background: #fff;
        border: 1px solid #CFCFCF;
    }

    .idco-output-stage .startover img {
        height: 16px;
        width: 16px;
    }

    /* new-qr.png is itself the bordered 50x50 button face. */
    .idco-output-stage .idco-header-icon-btn {
        width: var(--idco-btn-h);
        align-items: center;
        justify-content: center;
        background: transparent;
        border: none;
        padding: 0;
    }

    .idco-output-stage .idco-header-qr-btn {
        margin-left: auto;
    }

    .idco-header-qr-btn img,
    .idco-files-qr-btn img {
        width: var(--idco-btn-h);
        height: var(--idco-btn-h);
    }

    .idco-output-stage .idco-header-copy-btn {
        align-items: center;
        gap: 10px;
        padding: 0 22px;
        background: #fff;
        color: #000;
        border: 1px solid #E4E4E4;
    }

    .idco-output-stage .idco-download-btn {
        min-width: 160px !important;
        gap: 10px;
        background: var(--action_color, #623CEA) !important;
        color: #fff !important;
        border: none;
        padding: 0 22px;
    }

    /* .export_all::after draws its caret via `content: url(...)` sized
    off Bootstrap's border-triangle box model; a real <img> in the
    markup (idco-download-arrow) is simpler to size and colour. */
    .idco-output-stage .idco-download-btn.disabled {
        opacity: .5;
    }

    .idco-output-stage .idco-download-btn::after,
    .idco-output-stage .idco-download-btn.show::after {
        content: none !important;
    }

    .idco-output-stage .idco-download-arrow {
        width: 12px;
        height: 12px;
    }

    /* The header's own bottom border is the divider here. */
    .idco-output-stage~#previewmain {
        border-top: none;
        padding-top: 0;
    }

    .idco-result-card {
        border: 1px solid #EEEEEE;
        border-radius: 12px;
        padding: 22px 40px;
        background: #fff;
    }

}

/* ============================================================
Action tooltips (data-idco-tip="..."): CSS-only, so they also
cover buttons created later in JS. Shown on hover/keyboard focus
on pointer devices only — a tap on touch screens would leave a
hover tooltip stuck — plus whenever JS adds .idco-tip-show (Copy's
"Copied!" feedback, which is how touch users see it).
data-idco-tip-align="start|end" pins the bubble to that edge of
the button so it can't run off-screen at either side.
============================================================ */
[data-idco-tip] {
    position: relative;
}

[data-idco-tip]::before,
[data-idco-tip]::after {
    position: absolute;
    left: 50%;
    z-index: 1060;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity .15s ease, transform .15s ease, visibility .15s;
}

[data-idco-tip]::after {
    --idco-tip-x: -50%;
    content: attr(data-idco-tip);
    bottom: calc(100% + 10px);
    transform: translate(var(--idco-tip-x), 4px);
    width: max-content;
    max-width: 260px;
    padding: 6px 10px;
    border-radius: 6px;
    background: #1A1A1A;
    color: #fff;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.35;
    text-align: center;
    white-space: normal;
    box-shadow: 0 4px 12px rgba(0, 0, 0, .15);
}

[data-idco-tip]::before {
    content: '';
    bottom: calc(100% + 4px);
    transform: translate(-50%, 4px);
    border-style: solid;
    border-width: 6px 6px 0;
    border-color: #1A1A1A transparent transparent;
}

[data-idco-tip-align="start"]::after {
    --idco-tip-x: 0;
    left: 0;
}

[data-idco-tip-align="end"]::after {
    --idco-tip-x: 0;
    left: auto;
    right: 0;
}

@media (hover: hover) {

    [data-idco-tip]:hover::before,
    [data-idco-tip]:hover::after {
        opacity: 1;
        visibility: visible;
        transition-delay: .25s;
    }

}

[data-idco-tip]:focus-visible::before,
[data-idco-tip]:focus-visible::after,
[data-idco-tip]:has(> :focus-visible)::before,
[data-idco-tip]:has(> :focus-visible)::after,
.idco-tip-show[data-idco-tip]::before,
.idco-tip-show[data-idco-tip]::after {
    opacity: 1;
    visibility: visible;
}

@media (hover: hover) {
    [data-idco-tip]:hover::before {
        transform: translate(-50%, 0);
    }

    [data-idco-tip]:hover::after {
        transform: translate(var(--idco-tip-x), 0);
    }

}

[data-idco-tip]:focus-visible::before,
[data-idco-tip]:has(> :focus-visible)::before,
.idco-tip-show[data-idco-tip]::before {
    transform: translate(-50%, 0);
}

[data-idco-tip]:focus-visible::after,
[data-idco-tip]:has(> :focus-visible)::after,
.idco-tip-show[data-idco-tip]::after {
    transform: translate(var(--idco-tip-x), 0);
}

/* Not while its dropdown is open, or before the action is ready. */
[data-idco-tip]:has(> .show)::before,
[data-idco-tip]:has(> .show)::after,
[data-idco-tip]:has(> .disabled)::before,
[data-idco-tip]:has(> .disabled)::after,
[data-idco-tip].disabled::before,
[data-idco-tip].disabled::after {
    display: none;
}

@media screen and (max-width: 575px) {
    [data-idco-tip]::after {
        max-width: 160px;
        padding: 5px 8px;
        font-size: 11px;
    }

}

/* ============================================================
Download dropdown (header + mobile file cards): a floating white
card with roomy rows, instead of the shared .export_menu's fixed
107px purple-bordered box with an <hr> between items.
============================================================ */
.idco-dl-menu,
#all_export_dropdown.idco-dl-menu {
    height: auto !important;
    min-width: 210px;
    margin-top: 8px !important;
    padding: 6px;
    border: 1px solid #ECEAF5;
    border-radius: 12px;
    background: #fff;
    box-shadow: 0 12px 32px rgba(26, 18, 64, .14);
}

.idco-dl-menu li+li {
    margin-top: 2px;
}

.idco-dl-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border-radius: 8px;
    font-size: 15px;
    color: #1A1A1A;
    transition: background-color .15s ease;
}

.idco-dl-item:hover,
.idco-dl-item:focus-visible {
    background: #F4F1FF;
    color: #1A1A1A;
}

.idco-dl-item:active {
    background: #EAE4FF;
    color: #1A1A1A;
}

.idco-dl-item img {
    flex-shrink: 0;
    width: 18px;
    height: 22px;
    object-fit: contain;
}

.idco-dl-ext {
    font-weight: 700;
}

.idco-dl-desc {
    margin-left: auto;
    padding-left: 16px;
    font-size: 13px;
    color: #8A8799;
}

@media screen and (max-width: 991px) {
    .idco-dl-menu {
        min-width: 180px;
    }

    .idco-dl-item {
        padding: 10px;
        font-size: 14px;
    }

}

/* ============================================================
Download QR popup: title, caption, QR in a soft-bordered box,
then a full-width .xlsx / .csv segmented toggle.
============================================================ */
.idco-qr-dialog {
    max-width: 400px;
    padding: 0 16px;
    margin-left: auto;
    margin-right: auto;
}

.idco-qr-modal-content {
    position: relative;
    align-items: center;
    padding: 32px 28px 28px;
    border: none;
    border-radius: 20px;
    text-align: center;
    box-shadow: 0 20px 60px rgba(26, 18, 64, .25);
}

.idco-qr-modal-close {
    position: absolute;
    top: 16px;
    right: 16px;
    z-index: 1;
}

.idco-qr-title {
    margin: 0 0 8px;
    font-size: 28px;
    font-weight: 700;
    color: #1A1A2E;
}

.idco-qr-caption {
    max-width: 300px;
    margin: 0 auto 20px;
    font-size: 16px;
    line-height: 1.5;
    color: #7A7A8C;
}

.idco-qr-box {
    width: 100%;
    max-width: 300px;
    padding: 22px;
    border: 1px solid #E6E0FF;
    border-radius: 20px;
    background: #fff;
}

.idco-qr-box .idco-qr-modal-body {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 1;
}

.idco-qr-box .idco-qr-modal-body svg {
    display: block;
    width: 100%;
    height: auto;
}

.idco-qr-format {
    display: flex;
    width: 100%;
    max-width: 300px;
    margin-top: 20px;
    padding: 4px;
    gap: 4px;
    border-radius: 10px;
    background: #F4F4F6;
}

.idco-qr-format-btn {
    flex: 1;
    height: 38px;
    border: none;
    border-radius: 8px;
    background: transparent;
    font-size: 15px;
    font-weight: 600;
    color: #555;
    transition: background-color .15s ease, color .15s ease;
}

.idco-qr-format-btn:hover {
    color: #1A1A1A;
}

.idco-qr-format-btn.active {
    background: var(--action_color, #623CEA);
    color: #fff;
    box-shadow: 0 2px 6px rgba(98, 60, 234, .3);
}

@media screen and (max-width: 575px) {
    .idco-qr-modal-content {
        padding: 28px 20px 20px;
    }

    .idco-qr-title {
        font-size: 22px;
    }

    .idco-qr-caption {
        font-size: 14px;
    }

}

/* ============================================================
Files panel (Figma results frame): a stack of plain image
thumbnails (no filename/size text once a file has moved into
the results list) with a "Download All" button pinned under
them. Scoped to .idco-files-list/.files_list .output_file so
the pre-convert staging grid (#uploaded_row, which still wants
filename/size/status text) and every other tool sharing
.files_list/.output_file are unaffected.
============================================================ */
@media screen and (min-width: 992px) {
    .idco-files-list {
        display: flex;
        flex-direction: column;
    }

    .idco-single .idco-files-list {
        display: none !important;
    }

    .idco-files-list .files_list_row {
        flex: 1;
        overflow-y: auto;
    }

    .idco-files-list .output_file {
        position: relative;
        display: block;
        width: 245px;
        height: auto;
        max-width: 100%;
        object-fit: fill;
        min-width: 0;
        padding: 9px !important;
        border: 1px solid #fff !important;
        border-radius: 9px;
        overflow: hidden;
        background: #fff;
        box-shadow: 0px 0px 1.81px 0px #00000033;
    }

    .idco-files-list .output_file.active {
        /* !important needed to win over the base rule's
        border: 1px solid #fff !important above — without it,
        clicking a thumbnail added the .active class correctly
        but the border stayed white. */
        border-color: #623CEA !important;
    }

    .idco-files-list .output_file .image_icon {
        width: 100%;
        height: 100%;
        object-fit: contain;
        border-radius: 8px;
    }

    .idco-files-list .output_file .file_name,
    .idco-files-list .output_file .file_size,
    .idco-files-list .output_file .success {
        display: none !important;
    }

    /* Error state: dimmed/blurred thumbnail + warning icon overlay,
    instead of the plain "Error" text this span shows elsewhere.
    Base stays hidden (matches the shared .d-none default); JS
    already does single_item.querySelector('.error')
    .classList.remove('d-none') on failure — this just restyles
    what appears once that happens. */
    .idco-files-list .output_file .error {
        display: none;
        position: absolute;
        inset: 0;
        z-index: 2;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 6px;
        text-align: center;
        padding: 10px;
        background: rgba(255, 255, 255, .6);
        backdrop-filter: blur(2px);
    }

    .idco-files-list .output_file .error:not(.d-none) {
        display: flex;
    }

    .idco-files-list .output_file .error .idco-error-text {
        font-size: 12px;
        font-weight: 600;
        color: #D92D20;
    }

    /* Per-file conversion progress as a dark overlay on the thumbnail
    itself, instead of the progress bar/% rendering as its own row
    below the (now full-width) image — the .jpgtoexceluploadloader
    element is already toggled d-none on/off by the existing
    convertBtn handler (JS untouched), this just repositions and
    restyles it in this panel; every other tool sharing that class
    keeps its inline bar-next-to-filename layout. */
    .idco-files-list .output_file .jpgtoexceluploadloader {
        position: absolute;
        inset: 0;
        z-index: 2;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 8px;
        background: rgba(0, 0, 0, .45);
        border-radius: 8px;
    }

    .idco-files-list .output_file .jpgtoexceluploadloader::before {
        content: '';
        width: 28px;
        height: 28px;
        border: 3px solid #fff;
        border-bottom-color: transparent;
        border-radius: 50%;
        animation: rotation 1s linear infinite;
    }

    .idco-files-list .output_file .jpgtoexceluploadloader .track {
        display: none;
    }

    .idco-files-list .output_file .jpgtoexceluploadloader .pct {
        display: none;
    }

    .idco-files-list .output_file .jpgtoexceluploadloader .converting_text {
        color: #fff;
        font-size: 13px;
        font-weight: 600;
    }

    /* No per-file edit/copy/export hover icons on the thumbnails —
    those actions live in the results header (Copy/Download) for
    the currently active file, or in the QR modal's This File
    format toggle; a hover-icon row on every thumbnail duplicated
    that and wasn't wanted here. */
    .idco-files-list .output_stage_btns {
        display: none !important;
    }

    /* Visible divider between the files panel and the results
    panel (Figma results frame shows a clear vertical line
    between the two, not just whitespace). */
    .idco-files-list {
        border-right: 1px solid #E9E9E9;
        padding-right: 16px;
    }

    .idco-mobile-status-bar {
        margin-top: 12px;
        display: flex;
        align-items: stretch;
        gap: 8px;
    }

    .idco-mobile-status-bar .idco-mobile-reset,
    .idco-mobile-status-bar .idco-status-text {
        display: none;
    }

    .idco-mobile-status-bar .download_all {
        display: flex;
        flex: 1;
        min-width: 0 !important;
        height: var(--idco-btn-h) !important;
        border: none;
        border-radius: 8px;
        justify-content: center;
        align-items: center;
        font-size: var(--idco-btn-fs) !important;
    }

    /* new-qr.png is itself the bordered 50x50 button face. */
    .idco-files-qr-btn {
        flex-shrink: 0;
        width: var(--idco-btn-h);
        height: var(--idco-btn-h);
        padding: 0;
        border: none;
        background: transparent;
        align-items: center;
        justify-content: center;
    }

}

/* Mobile/tablet (Figma mobile results frame): every file is a card —
thumbnail, name/size/status and Copy + Download on top, its field
list underneath once expanded — and the files-panel footer becomes
a sticky bottom bar ("✓ Your File is Converted" / Download All (N) /
start over). The desktop results header isn't used here, except as
the way out when every file failed (.idco-failed). */
@media screen and (max-width: 991px) {
    .idco-output-stage:not(.idco-failed) {
        display: none !important;
    }

    .conversion_container {
        height: auto !important;
        min-height: 0 !important;
    }

    /* Keep the page end reachable above the fixed bottom bar. */
    body:has(.idco-mobile-status-bar.idco-visible) {
        padding-bottom: 130px;
    }

    .idco-files-list {
        width: 100% !important;
    }

    .idco-files-list .files_list_row {
        max-height: none !important;
        overflow: visible !important;
    }

    .idco-files-list .output_file_parent,
    .idco-files-list .output_file_parent.active {
        display: block;
        background: #fff;
        border: 1px solid #EEEEEE !important;
        border-radius: 10px;
        box-shadow: none;
        padding: 12px !important;
        margin-bottom: 4px;
    }

    .idco-files-list .output_file,
    .idco-files-list .output_file_parent.active .uploaded_item {
        height: auto !important;
        min-height: 0;
        padding: 0 !important;
        border: none !important;
        box-shadow: none !important;
        background: transparent;
        align-items: center;
        gap: 12px;
        /* Shared rule makes this inline-flex, which sizes to its
        content and pushed the buttons past the card edge. */
        display: flex !important;
        width: 100%;
    }

    .idco-files-list .output_file .image_icon {
        display: block !important;
        width: 62px;
        height: 62px;
        flex-shrink: 0;
        object-fit: cover;
        padding: 3px;
        border: 1px solid #D9D0FF;
        border-radius: 6px;
    }

    .idco-files-list .output_file>.text-start {
        flex: 1 1 auto;
        min-width: 0;
    }

    .idco-files-list .output_file .file_name {
        font-size: 15px !important;
        color: #333;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .idco-files-list .output_file .file_size {
        font-size: 13px;
        color: #A9A9A9;
        line-height: 18px;
    }

    .idco-files-list .output_file .success {
        font-size: 13px;
        white-space: nowrap;
        color: var(--action_color, #623CEA);
    }

    .idco-card-actions {
        display: flex;
        align-items: center;
        gap: 6px;
        margin-left: auto;
        flex-shrink: 0;
    }

    .idco-card-icon-btn,
    .idco-card-download-btn {
        height: 32px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        background: #fff !important;
        border: 1px solid #E4E4E4 !important;
        border-radius: 6px !important;
        color: #1A1A1A;
    }

    .idco-card-icon-btn {
        width: 32px;
        padding: 0;
    }

    .idco-card-download-btn {
        gap: 6px;
        padding: 0 10px;
        font-size: 14px;
    }

    .idco-files-list .output_file_parent.active .table_previews {
        border-top: none;
        padding-top: 12px;
    }

    .idco-result-card {
        border: 1px solid #EEEEEE;
        border-radius: 8px;
        padding: 2px 12px;
        background: #fff;
    }

    .idco-mobile-status-bar {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 1030;
        display: none;
        flex-wrap: wrap;
        align-items: center;
        gap: 10px 12px;
        padding: 12px 16px 16px;
        background: #fff;
        box-shadow: 0 -2px 10px rgba(0, 0, 0, .08);
    }

    .idco-mobile-status-bar.idco-visible {
        display: flex;
    }

    .idco-mobile-status-bar .idco-status-text {
        flex: 0 0 100%;
        display: flex;
        align-items: center;
        gap: 6px;
        font-size: 17px;
        font-weight: 700;
        color: #1A1A1A;
    }

    .idco-mobile-status-bar .download_all {
        flex: 1;
        min-width: 0 !important;
        height: 50px !important;
        display: flex;
        justify-content: center;
        align-items: center;
        gap: 10px;
        border: none;
        border-radius: 8px !important;
        font-size: 18px !important;
    }

    .idco-mobile-status-bar .idco-mobile-reset {
        flex-shrink: 0;
        width: 50px;
        height: 50px;
        display: flex;
        align-items: center;
        justify-content: center;
        border: 1px solid #CFCFCF;
        border-radius: 8px;
        background: #fff;
    }

    .idco-mobile-status-bar .idco-mobile-reset img {
        width: 18px;
        height: 18px;
        filter: none;
    }

}

/* ===================== 2. Invoice ===================== */
/* ============================================================
Vertical rhythm (Figma: every static content section's Layout
panel shows 70px top/bottom padding). The shared includes use
Bootstrap's my-5 (48px margin) instead, and how_to/faq wrap in
".container_fluid" (underscore, not a real Bootstrap class, no
side padding) while the rest use ".container-fluid"/".container"
(hyphen, ~12px side padding) — misaligning their headings.
Scoped under .ioc-sections and kept inline on this page only, so
the shared includes and every other tool keep their own design.
Same fix pattern as vcf-to-excel/pdf-to-excel earlier this session.
============================================================ */
/* key_features renders transparent (shows the page's white
background) by default; Figma specifies #FAFAFA for this
section on this page. */
/* ============================================================
Process Steps v2 — invoice-ocr's own variant of the shared
process_steps component (new-theme.includes.process_steps_v2),
matched exactly against the Figma "How Does This Invoice
Scanner Work?" frame: dashed connector line, light-purple
(#F3EFFF) badge fill, stacked title/body (not inline). Kept
on this page only, under its own process_step_v2_* classes,
so the shared process_steps component (and any other tool
that adopts it later) keeps its own plain default styling —
same convention as vcf-to-excel's who_can_use_v2.
============================================================ */
/* ===================== 3. CS-7868 design-QA fixes ===================== */
/* ---------- Hero feature chips ---------- */
.feature_box_row .feature_box img[src*="batch_processing"] {
    width: 20px;
    height: 20px;
}

/* ---------- How to use ---------- */
/* Subtitle → illustration gap is 40px in Figma (an override elsewhere
dropped the mg-lg-bottom-40 utility to 16px). */
.text-center>p:has(+ .col-lg-7 .how_to_steps_main) {
    margin-bottom: 40px !important;
}

/* Editor leftovers (a lone <br> line / empty <p>) made one step taller than
the others, so the step gaps looked unequal. */
.how_to_steps .step_content div:has(> br:only-child),
.how_to_steps .step_content p:empty {
    display: none;
}

.how_to_steps .step_content p {
    margin-bottom: 0;
}

/* Illustration sits closer to the steps, like the Figma frame. */
@media (min-width: 768px) {
    .row:has(> .how_to_steps_main)>.col-md-6:first-child {
        padding-right: 8px;
    }

    .row:has(> .how_to_steps_main)>.how_to_steps_main {
        padding-left: 8px;
    }

}

/* ---------- Key features cards ---------- */
.why_our_section_main .card h3 {
    font-weight: 600;
}

/* ---------- Extracted fields chips ---------- */
.idco-extract-field-chip {
    display: flex;
    align-items: center;
    font-size: 18px;
    font-weight: 600;
}

/* ---------- Checklist with image ---------- */
.checklist_image_items li {
    font-size: 18px;
    font-weight: 600;
}

/* ---------- Who can use cards ---------- */
.who-can-use-container .card h3 {
    font-weight: 600;
    line-height: 25px;
}

/* ---------- Input / output format tables ---------- */
.formats_table_v2 th,
.formats_table th {
    font-size: 20px;
    font-weight: 600;
}

/* ---------- Your image vs output ---------- */
.container-fluid:has(> .col-xl-8 .input_vs_output_v2_card)>.text-center>p {
    font-size: 16px;
    font-weight: 400;
}

.input_vs_output_v2_card h3 {
    font-size: 18px;
    font-weight: 700;
}

/* ---------- Results header ---------- */
.output_stage .startover,
.idco-output-stage .startover {
    border-radius: 10px !important;
}

/* ================= Mobile (Figma 360 frame) ================= */
@media (max-width: 767.98px) {

    /* How to use: 20px above and below the illustration, 14px steps. */
    .row:has(> .how_to_steps_main)>.col-md-6:first-child {
        margin-top: 20px;
        margin-bottom: 20px !important;
    }

    .how_to_steps_main {
        margin-top: 0 !important;
    }

    .how_to_steps .step_content {
        max-width: 100%;
        font-size: 14px !important;
        font-weight: 400;
    }

    .how_to_steps .how_to_step_heading {
        font-size: 14px !important;
        font-weight: 600;
    }

    .text-center>p:has(+ .col-lg-7 .how_to_steps_main) {
        margin-bottom: 0 !important;
    }

    /* 30px number circles for the 14px steps (same as png-to-word), with
    the connector line re-anchored to them. */
    .how_to_steps .step_number {
        flex-shrink: 0;
        width: 30px;
        height: 30px;
        font-size: 16px;
    }

    .how_to_steps:has(+ .how_to_steps)::after {
        top: 30px;
        left: 15px;
    }

    /* Key features: cards use the full width, icon closer to title,
    14px description. */
    .why_our_section_main {
        --bs-gutter-x: 0;
    }

    .why_our_section_main .card-body>.d-flex {
        gap: 10px !important;
    }

    .why_our_section_main .card-body {
        font-size: 14px;
    }

    .why_our_section_main .card-body p {
        font-size: 14px;
    }

    /* Extracted fields: less side padding so the heading fits in 2 lines. */
    .idco-extract-fields>.col-lg-9 {
        margin-left: 16px !important;
        margin-right: 16px !important;
    }

    /* Checklist with image: 23px side padding. */
    .checklist_image_section>.col-xl-8 {
        margin-left: 0 !important;
        margin-right: 0 !important;
        padding-left: 23px;
        padding-right: 23px;
    }

    /* Who can use: tighter title line height. */
    .who-can-use-container .card h3 {
        line-height: 25px;
    }

    .checklist_image_items li {
        font-size: 16px;
        font-weight: 400;
    }

    /* Format tables: 400/16px cells, less space around "Output Formats". */
    .formats_table_v2 td,
    .formats_table td {
        font-size: 14px !important;
        font-weight: 400;
    }

    .formats_table_v2_mobile~h2,
    .container:has(.formats_table_v2) h2 {
        margin-top: 20px !important;
        margin-bottom: 16px !important;
    }

    /* Your image vs output: no gap under the subtitle, image edge-to-edge. */
    .container-fluid:has(> .col-xl-8 .input_vs_output_v2_card)>.text-center>p {
        margin-bottom: 0 !important;
    }

    .input_vs_output_v2_card {
        margin: 0 !important;
    }

    /* Was 20px card margin + 20px body padding per side; Figma keeps 16px. */
    .input_vs_output_v2_card .card-body {
        padding-left: 16px !important;
        padding-right: 16px !important;
    }

    /* People also ask: less side padding, 600 questions. */
    .faq-column {
        padding-left: 0;
        padding-right: 0;
    }

    .faq_header .accordion-button {
        font-weight: 600 !important;
        padding-left: 0;
        padding-right: 0;
    }

    .faq-column .accordion-body {
        padding-left: 0;
        padding-right: 0;
    }

}

/* ===================== 4. Pro banner / sidebar ===================== */
.pro-bg {
    background-image: url("../minified/bg-black.png");
    background-size: cover;
    background-position: top;
    background-repeat: no-repeat;
}

.upgrade_banner {
    background-image: url("../imgs/upgrade-banner.png");
    background-size: cover;
    padding: 24px 34px;
    line-height: 30px;
}

.item .data_img {
    padding: 0;
}

.bg_crop {
    background: #5994D9CC;
}

.crop_btn {
    position: absolute;
    display: flex;
    background: #5994D9CC;
    border-radius: 50px;
    cursor: pointer;
    padding: 5px;
    top: 5px;
    left: 5px;
    z-index: 1;
}

.cancelBtn {
    display: flex;
    background: #fff;
    border-radius: 50px;
    cursor: pointer;
    padding: 6px;
    top: 7px;
}

.crossBtn {
    display: flex;
    background: #fff;
    border-radius: 50px;
    cursor: pointer;
    padding: 6px;
    position: absolute;
    top: 15px;
    right: 15px
}

.preview_table_btn {
    background: #fff !important;
    display: flex;
    align-items: center;
    width: 36px;
    height: 26px;
    padding: 0 !important;
    justify-content: center;
    border-radius: 6px;
}

.resultBar.active {
    background: #30619A1A !important;
    border: 1px solid #30619A;
}

.download_btn {
    width: 36px;
    height: 26px;
    padding: 0 !important;
    justify-content: center;
    border-radius: 6px;
}

.download_more {
    padding: 5px 8px !important;
    border-radius: 0 6px 6px 0;
    box-shadow: none;
}

.form-switch .form-check-input {
    width: 2.2em;
    height: 20px;
}

.height_500 {
    height: 500px !important;
}

@media (max-width: 991px) {
    .crop_btn {
        background: #00000066;
        align-items: center;
        justify-content: center;
        width: 100%;
        height: 18px;
        color: #fff;
        border-radius: 0 0 8px 8px;
        padding: 4px 0px;
        top: auto;
        bottom: 0;
        left: 0;
    }

}

@media (max-width: 430px) {
    .download_more+.choose_dropdown {
        width: 335% !important;
        right: 0;
    }

    .convert_files {
        min-width: 120px;
        text-align: center;
        padding: 0;
    }

}