/* vendor-lite.css — self-contained Bootstrap 5 subset used by FormatterHub.
   No CDN, no download step. Covers grid, utilities, and the components this
   app actually uses (navbar, dropdown, buttons, forms, alerts, accordion,
   badges, breadcrumb, nav-pills, tables, toasts). Branded look lives in
   style.css; this file provides the structural Bootstrap behaviour. */
*,*::before,*::after{box-sizing:border-box}
:root{--bs-primary:#0D6EFD;}
body{margin:0}
img,svg{vertical-align:middle}
a{color:#0d6efd;text-decoration:underline}
ul{margin:0}

/* ---- container ---- */
.container,.container-fluid{width:100%;margin-inline:auto;padding-inline:.75rem}
@media(min-width:576px){.container{max-width:540px}}
@media(min-width:768px){.container{max-width:720px}}
@media(min-width:992px){.container{max-width:960px}}
@media(min-width:1200px){.container{max-width:1140px}}
@media(min-width:1400px){.container{max-width:1320px}}

/* ---- grid ---- */
.row{--g:1.5rem;display:flex;flex-wrap:wrap;margin-left:calc(-.5*var(--g));margin-right:calc(-.5*var(--g))}
.row>*{padding-left:calc(.5*var(--g));padding-right:calc(.5*var(--g))}
.g-0{--g:0}.g-1{--g:.25rem}.g-2{--g:.5rem}.g-3{--g:1rem}.g-4{--g:1.5rem}.g-5{--g:3rem}
.gy-4{row-gap:1.5rem}.gy-3{row-gap:1rem}
.col{flex:1 0 0%}
.col-auto{flex:0 0 auto;width:auto}

.col-1{flex:0 0 auto;width:8.333333%}
.col-2{flex:0 0 auto;width:16.666667%}
.col-3{flex:0 0 auto;width:25.0%}
.col-4{flex:0 0 auto;width:33.333333%}
.col-5{flex:0 0 auto;width:41.666667%}
.col-6{flex:0 0 auto;width:50.0%}
.col-7{flex:0 0 auto;width:58.333333%}
.col-8{flex:0 0 auto;width:66.666667%}
.col-9{flex:0 0 auto;width:75.0%}
.col-10{flex:0 0 auto;width:83.333333%}
.col-11{flex:0 0 auto;width:91.666667%}
.col-12{flex:0 0 auto;width:100.0%}

@media(min-width:576px){.col-sm-1{flex:0 0 auto;width:8.333333%}
.col-sm-2{flex:0 0 auto;width:16.666667%}
.col-sm-3{flex:0 0 auto;width:25.0%}
.col-sm-4{flex:0 0 auto;width:33.333333%}
.col-sm-5{flex:0 0 auto;width:41.666667%}
.col-sm-6{flex:0 0 auto;width:50.0%}
.col-sm-7{flex:0 0 auto;width:58.333333%}
.col-sm-8{flex:0 0 auto;width:66.666667%}
.col-sm-9{flex:0 0 auto;width:75.0%}
.col-sm-10{flex:0 0 auto;width:83.333333%}
.col-sm-11{flex:0 0 auto;width:91.666667%}
.col-sm-12{flex:0 0 auto;width:100.0%}
.col-sm-auto{flex:0 0 auto;width:auto}}

@media(min-width:768px){.col-md-1{flex:0 0 auto;width:8.333333%}
.col-md-2{flex:0 0 auto;width:16.666667%}
.col-md-3{flex:0 0 auto;width:25.0%}
.col-md-4{flex:0 0 auto;width:33.333333%}
.col-md-5{flex:0 0 auto;width:41.666667%}
.col-md-6{flex:0 0 auto;width:50.0%}
.col-md-7{flex:0 0 auto;width:58.333333%}
.col-md-8{flex:0 0 auto;width:66.666667%}
.col-md-9{flex:0 0 auto;width:75.0%}
.col-md-10{flex:0 0 auto;width:83.333333%}
.col-md-11{flex:0 0 auto;width:91.666667%}
.col-md-12{flex:0 0 auto;width:100.0%}
.col-md-auto{flex:0 0 auto;width:auto}}

@media(min-width:992px){.col-lg-1{flex:0 0 auto;width:8.333333%}
.col-lg-2{flex:0 0 auto;width:16.666667%}
.col-lg-3{flex:0 0 auto;width:25.0%}
.col-lg-4{flex:0 0 auto;width:33.333333%}
.col-lg-5{flex:0 0 auto;width:41.666667%}
.col-lg-6{flex:0 0 auto;width:50.0%}
.col-lg-7{flex:0 0 auto;width:58.333333%}
.col-lg-8{flex:0 0 auto;width:66.666667%}
.col-lg-9{flex:0 0 auto;width:75.0%}
.col-lg-10{flex:0 0 auto;width:83.333333%}
.col-lg-11{flex:0 0 auto;width:91.666667%}
.col-lg-12{flex:0 0 auto;width:100.0%}
.col-lg-auto{flex:0 0 auto;width:auto}}

.m-0{margin:0}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.ms-0{margin-left:0}.me-0{margin-right:0}
.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}
.p-0{padding:0}.pt-0{padding-top:0}.pb-0{padding-bottom:0}.ps-0{padding-left:0}.pe-0{padding-right:0}
.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}
.m-1{margin:.25rem}.mt-1{margin-top:.25rem}.mb-1{margin-bottom:.25rem}.ms-1{margin-left:.25rem}.me-1{margin-right:.25rem}
.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}
.p-1{padding:.25rem}.pt-1{padding-top:.25rem}.pb-1{padding-bottom:.25rem}.ps-1{padding-left:.25rem}.pe-1{padding-right:.25rem}
.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}
.m-2{margin:.5rem}.mt-2{margin-top:.5rem}.mb-2{margin-bottom:.5rem}.ms-2{margin-left:.5rem}.me-2{margin-right:.5rem}
.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}
.p-2{padding:.5rem}.pt-2{padding-top:.5rem}.pb-2{padding-bottom:.5rem}.ps-2{padding-left:.5rem}.pe-2{padding-right:.5rem}
.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}
.m-3{margin:1rem}.mt-3{margin-top:1rem}.mb-3{margin-bottom:1rem}.ms-3{margin-left:1rem}.me-3{margin-right:1rem}
.my-3{margin-top:1rem;margin-bottom:1rem}.mx-3{margin-left:1rem;margin-right:1rem}
.p-3{padding:1rem}.pt-3{padding-top:1rem}.pb-3{padding-bottom:1rem}.ps-3{padding-left:1rem}.pe-3{padding-right:1rem}
.py-3{padding-top:1rem;padding-bottom:1rem}.px-3{padding-left:1rem;padding-right:1rem}
.m-4{margin:1.5rem}.mt-4{margin-top:1.5rem}.mb-4{margin-bottom:1.5rem}.ms-4{margin-left:1.5rem}.me-4{margin-right:1.5rem}
.my-4{margin-top:1.5rem;margin-bottom:1.5rem}.mx-4{margin-left:1.5rem;margin-right:1.5rem}
.p-4{padding:1.5rem}.pt-4{padding-top:1.5rem}.pb-4{padding-bottom:1.5rem}.ps-4{padding-left:1.5rem}.pe-4{padding-right:1.5rem}
.py-4{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1.5rem;padding-right:1.5rem}
.m-5{margin:3rem}.mt-5{margin-top:3rem}.mb-5{margin-bottom:3rem}.ms-5{margin-left:3rem}.me-5{margin-right:3rem}
.my-5{margin-top:3rem;margin-bottom:3rem}.mx-5{margin-left:3rem;margin-right:3rem}
.p-5{padding:3rem}.pt-5{padding-top:3rem}.pb-5{padding-bottom:3rem}.ps-5{padding-left:3rem}.pe-5{padding-right:3rem}
.py-5{padding-top:3rem;padding-bottom:3rem}.px-5{padding-left:3rem;padding-right:3rem}
.mb-0{margin-bottom:0}.mt-0{margin-top:0}.mx-auto{margin-left:auto;margin-right:auto}.ms-auto{margin-left:auto}.me-auto{margin-right:auto}

@media(min-width:992px){.ms-lg-2{margin-left:.5rem}.ms-lg-3{margin-left:1rem}}

/* ---- display & flex ---- */
.d-none{display:none!important}.d-block{display:block}.d-inline{display:inline}
.d-inline-block{display:inline-block}.d-flex{display:flex}.d-inline-flex{display:inline-flex}
.flex-column{flex-direction:column}.flex-wrap{flex-wrap:wrap}
.justify-content-between{justify-content:space-between}.justify-content-center{justify-content:center}
.justify-content-end{justify-content:flex-end}.justify-content-start{justify-content:flex-start}
.align-items-center{align-items:center}.align-items-end{align-items:flex-end}.align-items-start{align-items:flex-start}
.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:1rem}.text-nowrap{white-space:nowrap}
@media(min-width:768px){.flex-md-row{flex-direction:row}}
@media(min-width:992px){.d-lg-flex{display:flex}.d-lg-none{display:none}.align-items-lg-center{align-items:center}.gap-lg-1{gap:.25rem}.gap-lg-2{gap:.5rem}}

/* ---- text/util ---- */
.text-center{text-align:center}.text-end{text-align:right}.text-start{text-align:left}
.small{font-size:.85em}.fw-500{font-weight:500}.fw-600{font-weight:600}.fw-bold{font-weight:700}
.fs-4{font-size:1.5rem}.fs-5{font-size:1.25rem}.fs-6{font-size:1rem}
.text-uppercase{text-transform:uppercase}
.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.text-body-secondary{color:#6c757d}.text-warning{color:#997404}.text-primary{color:#0d6efd}
.list-unstyled{padding-left:0;list-style:none}.w-100{width:100%}.h-100{height:100%}
.rounded{border-radius:.375rem}.border-0{border:0}.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
hr{border:0;border-top:1px solid #dee2e6;opacity:.9;margin:1rem 0}

/* ---- buttons ---- */
.btn{display:inline-flex;align-items:center;gap:.4rem;justify-content:center;font-weight:500;line-height:1.5;
  padding:.45rem .9rem;font-size:.95rem;border-radius:.4rem;border:1px solid transparent;cursor:pointer;
  background:transparent;color:inherit;text-decoration:none;transition:.12s ease}
.btn-sm{padding:.28rem .6rem;font-size:.82rem}
.btn-lg{padding:.6rem 1.2rem;font-size:1.05rem}
.btn-primary{background:#0d6efd;border-color:#0d6efd;color:#fff}
.btn-primary:hover{background:#0b5ed7;border-color:#0a58ca;color:#fff}
.btn-secondary{background:#6c757d;border-color:#6c757d;color:#fff}
.btn-danger{background:#dc3545;border-color:#dc3545;color:#fff}
.btn-danger:hover{background:#bb2d3b;color:#fff}
.btn-outline-primary{border-color:#0d6efd;color:#0d6efd}
.btn-outline-primary:hover{background:#0d6efd;color:#fff}
.btn-outline-secondary{border-color:#ced4da;color:#495057}
.btn-outline-secondary:hover{background:#f1f3f5;color:#212529}
.btn-link{border:0;color:#0d6efd;background:none;text-decoration:none;padding:.28rem .5rem}
.btn-link:hover{text-decoration:underline}
.btn-group{display:inline-flex}
.btn-group>.btn{border-radius:0}
.btn-group>.btn:first-child{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}
.btn-group>.btn:last-child{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}
.btn-group>.btn+.btn{margin-left:-1px}
.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}
.btn-check:checked+.btn-outline-primary{background:#0d6efd;color:#fff}
.btn-check:checked+.btn-outline-secondary{background:#0d6efd;border-color:#0d6efd;color:#fff}
.btn-close{width:1em;height:1em;padding:.25em;border:0;background:transparent;cursor:pointer;opacity:.6;
  font-size:1.1rem;line-height:1;color:inherit}
.btn-close::before{content:"\00d7"}
.btn-close:hover{opacity:1}
.btn-close-white{color:#fff}

/* ---- forms ---- */
.form-control,.form-select{display:block;width:100%;padding:.45rem .75rem;font-size:.95rem;line-height:1.5;
  color:#212529;background:#fff;border:1px solid #ced4da;border-radius:.4rem}
.form-select{appearance:auto}
.form-control:focus,.form-select:focus{outline:0;border-color:#86b7fe;box-shadow:0 0 0 .2rem rgba(13,110,253,.2)}
.form-label{margin-bottom:.3rem;font-weight:500;font-size:.9rem;display:inline-block}
.form-text{font-size:.82rem;color:#6c757d;margin-top:.25rem}
.form-check{display:flex;align-items:center;gap:.4rem}
.form-check-input{width:1rem;height:1rem;margin:0}
.input-group{display:flex;width:100%}
.input-group-sm .form-control,.input-group-sm .form-select,.input-group-sm .input-group-text{font-size:.82rem;padding:.28rem .55rem}
.input-group>*{border-radius:0}
.input-group>:first-child{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}
.input-group>:last-child{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}
.input-group .form-control,.input-group .form-select{flex:1 1 auto;width:1%}
.input-group-text{display:flex;align-items:center;padding:.45rem .75rem;background:#f1f3f5;border:1px solid #ced4da;white-space:nowrap;font-size:.9rem}
.input-group>.form-control+*,.input-group>.input-group-text+*{margin-left:-1px}

/* ---- navbar ---- */
.navbar{display:flex;align-items:center;padding:.5rem 0}
.sticky-top{position:sticky;top:0;z-index:1020}
.navbar-brand{text-decoration:none;font-weight:700;color:inherit}
.navbar-nav{display:flex;flex-direction:row;align-items:center;list-style:none;padding-left:0;margin:0;gap:.25rem}
.navbar-nav .nav-link{display:inline-flex;align-items:center;gap:.3rem;padding:.5rem .75rem;color:#333;text-decoration:none;border-radius:.4rem}
.navbar-nav .nav-link:hover{background:rgba(0,0,0,.05)}
.navbar-toggler{display:none;background:none;border:1px solid rgba(0,0,0,.15);border-radius:.35rem;padding:.35rem .6rem;cursor:pointer}
.navbar-toggler-icon{display:block;width:1.3em;height:1.3em;background:
  linear-gradient(#333,#333) center/100% 2px no-repeat,
  linear-gradient(#333,#333) center 4px/100% 2px no-repeat,
  linear-gradient(#333,#333) center 8px/100% 2px no-repeat}
.navbar-collapse{display:flex;flex-basis:100%;flex-grow:1;align-items:center}
@media(max-width:991.98px){
  .navbar-expand-lg .navbar-toggler{display:block}
  .navbar-expand-lg .navbar-collapse{display:none;flex-basis:100%}
  .navbar-expand-lg .navbar-collapse.show{display:block}
  .navbar-expand-lg .navbar-nav{flex-direction:column;align-items:stretch;width:100%}
}

/* ---- dropdown ---- */
.dropdown{position:relative}
.dropdown-toggle::after{content:"";display:inline-block;margin-left:.35em;vertical-align:.15em;
  border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}
.dropdown-menu{display:none;position:absolute;top:100%;left:0;z-index:1000;min-width:11rem;padding:.4rem;margin-top:.25rem;
  background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;box-shadow:0 8px 24px rgba(0,0,0,.12);list-style:none}
.dropdown-menu.show{display:block}
.dropdown-menu-end{left:auto;right:0}
.dropdown-item{display:block;width:100%;padding:.35rem .6rem;color:#333;text-decoration:none;border-radius:.35rem;white-space:nowrap}
.dropdown-item:hover{background:#f1f3f5}
.dropdown-header{padding:.3rem .6rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:#888}

/* ---- alerts ---- */
.alert{position:relative;padding:.75rem 1rem;border:1px solid transparent;border-radius:.5rem;margin-bottom:1rem}
.alert-dismissible{padding-right:2.5rem}
.alert-dismissible .btn-close{position:absolute;top:.5rem;right:.6rem}
.alert-success{background:#d1e7dd;border-color:#badbcc;color:#0f5132}
.alert-danger{background:#f8d7da;border-color:#f5c2c7;color:#842029}
.alert-info{background:#cff4fc;border-color:#b6effb;color:#055160}
.alert-warning{background:#fff3cd;border-color:#ffecb5;color:#664d03}
.fade{transition:opacity .15s}.fade:not(.show){opacity:0}

/* ---- badges ---- */
.badge{display:inline-block;padding:.3em .5em;font-size:.72em;font-weight:600;border-radius:.35rem;line-height:1;color:#fff}
.text-bg-success{background:#198754;color:#fff}.text-bg-danger{background:#dc3545;color:#fff}
.text-bg-warning{background:#ffc107;color:#000}.text-bg-primary{background:#0d6efd;color:#fff}
.text-bg-secondary{background:#6c757d;color:#fff}.text-bg-light{background:#e9ecef;color:#000}

/* ---- breadcrumb ---- */
.breadcrumb{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0;font-size:.85rem}
.breadcrumb-item+.breadcrumb-item::before{content:"/";padding:0 .5rem;color:#adb5bd}
.breadcrumb-item.active{color:#6c757d}
.breadcrumb-item a{text-decoration:none}

/* ---- nav pills ---- */
.nav{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0;gap:.25rem}
.nav-pills .nav-link{display:inline-flex;align-items:center;gap:.35rem;border:0;background:none;cursor:pointer;
  padding:.4rem .8rem;border-radius:.5rem;color:#0d6efd}
.nav-pills .nav-link.active{background:#0d6efd;color:#fff}

/* ---- tables ---- */
.table-responsive{overflow-x:auto}
.table{width:100%;border-collapse:collapse;margin-bottom:1rem}
.table th,.table td{padding:.6rem .75rem;border-bottom:1px solid #dee2e6;text-align:left}
.table thead th{border-bottom:2px solid #dee2e6;font-weight:600}
.align-middle td,.align-middle th{vertical-align:middle}

/* ---- list group ---- */
.list-group{display:flex;flex-direction:column;padding-left:0;list-style:none;border-radius:.5rem}
.list-group-item{padding:.6rem .9rem;border:1px solid #dee2e6;margin-top:-1px;background:#fff}
.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}
.list-group-item:last-child{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}

/* ---- accordion ---- */
.accordion{border:1px solid #dee2e6;border-radius:.5rem;overflow:hidden}
.accordion-item{border-bottom:1px solid #dee2e6}
.accordion-item:last-child{border-bottom:0}
.accordion-header{margin:0}
.accordion-button{display:flex;align-items:center;width:100%;padding:.9rem 1rem;border:0;background:#fff;
  cursor:pointer;text-align:left;font-size:.95rem;gap:.5rem}
.accordion-button:not(.collapsed){background:#e7f1ff;color:#0c63e4}
.accordion-button::after{content:"";margin-left:auto;width:.9rem;height:.9rem;
  background:linear-gradient(#555,#555) center/100% 2px no-repeat,linear-gradient(#555,#555) center/2px 100% no-repeat;transition:transform .2s}
.accordion-button:not(.collapsed)::after{transform:rotate(45deg)}
.accordion-collapse{display:none}
.accordion-collapse.show{display:block}
.accordion-body{padding:1rem}

/* ---- toasts ---- */
.fh-toast-host,#toastHost{position:fixed;bottom:1rem;right:1rem;z-index:1090;display:flex;flex-direction:column;gap:.5rem}
.toast{min-width:240px;max-width:360px;border-radius:.5rem;box-shadow:0 8px 24px rgba(0,0,0,.18);overflow:hidden;opacity:0;transition:opacity .2s}
.toast.show{opacity:1}
.toast .toast-body{padding:.6rem .9rem;font-size:.9rem}
.text-bg-success.toast,.toast.text-bg-success{background:#198754;color:#fff}
.toast.text-bg-danger{background:#dc3545;color:#fff}
.toast.text-bg-warning{background:#ffc107;color:#000}
.toast.text-bg-primary{background:#0d6efd;color:#fff}
.toast.text-bg-info{background:#0dcaf0;color:#000}

/* ---- icon fallback (emoji, no icon font needed) ---- */
.bi{font-style:normal;font-weight:400;display:inline-block;line-height:1}
.bi-arrow-clockwise::before{content:"↻"}
.bi-arrow-counterclockwise::before{content:"↺"}
.bi-arrow-down-up::before{content:"⇅"}
.bi-arrow-left::before{content:"←"}
.bi-arrow-left-circle::before{content:"◀"}
.bi-arrow-left-right::before{content:"⇄"}
.bi-arrow-repeat::before{content:"⟳"}
.bi-arrow-right::before{content:"→"}
.bi-arrow-right-circle::before{content:"▶"}
.bi-arrows-collapse::before{content:"⤒"}
.bi-arrows-expand::before{content:"⤢"}
.bi-box-arrow-in-right::before{content:"⇥"}
.bi-box-arrow-right::before{content:"🚪"}
.bi-braces-asterisk::before{content:"✳"}
.bi-chat-dots::before{content:"💬"}
.bi-check-circle-fill::before{content:"✅"}
.bi-check2-circle::before{content:"✔"}
.bi-chevron-down::before{content:"▾"}
.bi-chevron-up::before{content:"▴"}
.bi-clipboard::before{content:"📋"}
.bi-clock-history::before{content:"🕒"}
.bi-cloud-arrow-down::before{content:"⬇"}
.bi-code-square::before{content:"❮❯"}
.bi-crosshair::before{content:"✛"}
.bi-cursor-text::before{content:"⌶"}
.bi-diagram-2::before{content:"🌳"}
.bi-diagram-3::before{content:"🗃"}
.bi-download::before{content:"⬇"}
.bi-envelope::before{content:"✉"}
.bi-exclamation-triangle::before{content:"⚠"}
.bi-eye::before{content:"👁"}
.bi-file-earmark::before{content:"📄"}
.bi-file-earmark-code::before{content:"📑"}
.bi-file-earmark-zip::before{content:"🗜"}
.bi-files::before{content:"🗂"}
.bi-filetype-json::before{content:"🧾"}
.bi-fingerprint::before{content:"🆔"}
.bi-graph-down-arrow::before{content:"📉"}
.bi-house::before{content:"🏠"}
.bi-key::before{content:"🔑"}
.bi-lightbulb::before{content:"💡"}
.bi-lightning-charge::before{content:"⚡"}
.bi-magic::before{content:"✨"}
.bi-mark::before{content:"🖍"}
.bi-moon-stars::before{content:"🌙"}
.bi-pencil::before{content:"✏"}
.bi-pencil-square::before{content:"📝"}
.bi-person-badge::before{content:"👤"}
.bi-reply::before{content:"↩"}
.bi-robot::before{content:"🤖"}
.bi-save::before{content:"💾"}
.bi-search::before{content:"🔍"}
.bi-send::before{content:"➤"}
.bi-shield-lock::before{content:"🔒"}
.bi-shuffle::before{content:"🔀"}
.bi-speedometer2::before{content:"📊"}
.bi-sun::before{content:"☀"}
.bi-text-indent-left::before{content:"⇥"}
.bi-tools::before{content:"🛠"}
.bi-trash::before{content:"🗑"}
.bi-upload::before{content:"⬆"}
.bi-wrench-adjustable-circle::before{content:"🔧"}
.bi-x-circle-fill::before{content:"❌"}
.bi-x-lg::before{content:"✕"}
.bi-file-binary::before{content:"🔢"}
.bi-link-45deg::before{content:"🔗"}
.bi-asterisk::before{content:"✳"}
.bi-filetype-js::before{content:"🟨"}
.bi-code-slash::before{content:"❮❯"}
.bi-braces::before{content:"{ }"}
.bi-regex::before{content:"⚙"}

/* ---------- Additional social icon fallbacks (footer) ---------- */
.bi-github::before{content:"\1F419"}
.bi-twitter-x::before{content:"\2715"}
.bi-linkedin::before{content:"in";font-weight:700}
.bi-reddit::before{content:"\1F47D"}
.bi-facebook::before{content:"f";font-weight:700}
.bi-instagram::before{content:"\1F4F7"}
.bi-youtube::before{content:"\25B6"}
