/* Generováno: php scripts/build-css.php (plán 82). Needitovat, zdroje jsou v assets/css/vb/ a assets/css/. */
@layer vb.legacy, vb.base, vb.layout, vb.components, vb.variants, vb.utilities;
@layer vb.legacy{
/* assets/css/vb/legacy/bootstrap-subset.css */
/*!
 * Bootstrap v4.6.2 (https://getbootstrap.com/)
 * Copyright 2011-2022 The Bootstrap Authors
 * Copyright 2011-2022 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:.875em;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.blockquote{margin-bottom:1rem;font-size:1.25rem}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.container,.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@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}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-12,.col-3,.col-6,.col-lg-4,.col-lg-6,.col-lg-auto,.col-md-12,.col-md-3,.col-md-4,.col-md-6,.col-md-8,.col-md-9,.col-sm-12,.col-sm-6,.col-xl-3,.col-xl-4,.col-xl-6{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (min-width:576px){.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media (min-width:768px){.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media (min-width:992px){.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}@media (min-width:1200px){.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.dropdown{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav .dropdown-menu{position:static;float:none}@media (min-width:576px){.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}}@media (min-width:768px){.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}}@media (min-width:992px){.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}}@media (min-width:1200px){.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-link{font-weight:700}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentcolor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@media (prefers-reduced-motion:reduce){.spinner-border{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.bg-light{background-color:var(--vb-surface-light,#f8f9fa)!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:var(--vb-surface-white,#fff)!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-light{border-color:#f8f9fa!important}.rounded{border-radius:.25rem!important}.d-none{display:none!important}.d-inline{display:inline!important}.d-block{display:block!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-block{display:block!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9::before{padding-top:56.25%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}@media (min-width:576px){.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}}@media (min-width:1200px){.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}}.overflow-hidden{overflow:hidden!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.w-100{width:100%!important}.h-100{height:100%!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mb-0{margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mt-3{margin-top:1rem!important}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.mb-4{margin-bottom:1.5rem!important}.mt-5{margin-top:3rem!important}.mb-5{margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.pt-5{padding-top:3rem!important}.pb-5{padding-bottom:3rem!important}@media (min-width:576px){.mb-sm-0{margin-bottom:0!important}}@media (min-width:768px){.mb-md-3{margin-bottom:1rem!important}}@media (min-width:992px){.pr-lg-3{padding-right:1rem!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-uppercase{text-transform:uppercase!important}.font-weight-bold{font-weight:700!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-muted{color:#6c757d!important}.text-decoration-none{text-decoration:none!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}
/* assets/css/styles.css */
/* ==========================================================================
   TABLE OF CONTENTS
   ==========================================================================
   1. CSS Variables (:root)
   2. Base / Reset
   3. Typography (h1-h6, .text-*, font classes)
   4. Layout (.container, grid utilities)
   5. Components - Buttons
   6. Components - Cards
   7. Components - Tables
   8. Components - Forms
   9. Components - Navigation
   10. Modules (scrollbar)
   11. Utilities (visibility, spacing, colors)
   12. Responsive / Media Queries (component-specific queries inline)
   13. Animations (@keyframes)
   ========================================================================== */

/* ==========================================================================
   1. CSS VARIABLES
   ========================================================================== */

/*
 * CSS Custom Properties Overview
 * ==============================
 *
 * Variables defined here in :root are static defaults.
 * Most variables are set dynamically from Kirby Panel via inline styles
 * in head.php (injected into <body> tag).
 *
 * CATEGORIES OF DYNAMIC VARIABLES (set in head.php):
 *
 * Typography:
 *   --font-family-headings    Heading font (from design page)
 *   --font-family-body        Body text font
 *   --font-family-body-bold   Bold variant of body font
 *   --font-family-main-typeface  Main brand typeface for showcases
 *   --heading-scale           Scale factor for heading sizes (0.8-1.2)
 *   --heading-kerning         Letter-spacing for headings (em)
 *   --body-line-height        Line height for body text
 *   --base-font-size          Base font size in px
 *
 * Colors - Brand:
 *   --header-color            Header background color
 *   --title-color             Main title color
 *   --headings-color          H1-H6 text color
 *   --text-color              Body text color
 *   --link-color              Anchor link color
 *   --button-primary-color    Primary button bg/border
 *   --button-multibrand-color       Multibrand button color
 *   --button-multibrand-color-hover Multibrand button hover
 *
 * Colors - Gray Scale (--gray-00 to --gray-100):
 *   Computed from base gray, used for subtle UI elements
 *
 * Colors - Status:
 *   --success-color           Success/allowed states (green)
 *   --danger-color            Error/forbidden states (red)
 *
 * Cards:
 *   --card-logo-bg            Logo card background
 *   --card-color-bg           Color palette card background
 *   --card-typography-bg      Typography card background
 *   --card-bottom-bg-color    Card footer background
 *   --card-bottom-hover-color Card footer hover state
 *   --card-bottom-heading-color  Card footer heading color
 *   --card-bottom-text-color  Card footer text color
 *   --dynamic-web-bg-color    Page background color
 *   --dynamic-blocks-bg-color Module blocks background
 *
 * Tables:
 *   --table-color-bg          Table background
 *   --table-hover-bg          Table row hover background
 *   --table-font-size         Table cell font size
 *   --table-line-color        Table border color
 *
 * UI Components:
 *   --scrollbar-color         Custom scrollbar track color
 *   --tooltip-text-color      Tooltip text
 *   --tooltip-bg-color        Tooltip background
 *   --info-box-text-color     Alert box text
 *   --info-box-bg-color       Alert box background
 *   --info-badge-text-color   Badge text
 *   --info-badge-bg-color     Badge background
 *   --visualbook-description-color  Description block text
 *
 * Border Radius:
 *   --border-radius-card      Cards, tables, modules
 *   --border-radius-button    Buttons
 *   --border-radius-header-button  Header/nav buttons
 *   --border-radius-badge     Badges
 *   --border-radius-tooltip   Tooltips
 *
 * Logo Backgrounds:
 *   --logo-dark-bg            Dark background for light logos
 *   --logo-light-bg           Light background for dark logos
 */

:root {
  /* ==========================================================================
     STATIC CSS VARIABLES (not set dynamically)
     ========================================================================== */

  /* Logo sizing - default dimensions for logo containers
     Used with .logo-size class on body, affects elements in cards and headers */
  --logo-header-size: 150px;       /* Header logo max-width */
  --logo-main-card-size: 50%;      /* Main logo card width (primary logo) */
  --logo-horizontal-size: 60%;     /* Horizontal logo variant width */
  --logo-vertical-size: 40%;       /* Vertical logo variant width */
  --logo-symbol-size: 25%;         /* Symbol/icon logo width */

  /* --body-kerning is set in dynamic-css/design.css from design.yml (bodyKerning) */

  /* ==========================================================================
     BORDERS & LINES
     ========================================================================== */
  --border-color: #e2e2e2;         /* Primary border color */
  --border-color-light: #ededed;   /* Lighter border variant */
  --line-color: #ebebeb;           /* Decorative lines (cards, dividers) */
  --table-line-color: #e2e2e2;     /* Table row/column borders */

  /* ==========================================================================
     BACKGROUNDS (static defaults)
     ========================================================================== */
  --bg-subtle: #fbfbfb;            /* Subtle background (bg-light) */
  --bg-indicator: #fafafa;         /* Indicator icons background */
  --bg-input: #f3f3f6;             /* Form input backgrounds */
  --bg-meter: #f7f7f7;             /* Meter/progress bar background */

  /* ==========================================================================
     TEXT COLORS (static defaults)
     ========================================================================== */
  --color-white: #ffffff;          /* White color for badges, buttons etc. */
  --text-muted: #6f6f6f;           /* Muted text (table headers, etc.) */
  --text-dark: #525252;            /* Dark text for alerts, UI elements */
  --indicator-color: #8d8d8d;      /* Indicator icon color */

  /* ==========================================================================
     SPACING
     ========================================================================== */
  --spacing-card-mobile: 1.4rem;   /* Card/table padding on mobile */
  --spacing-card-desktop: 1.9rem;  /* Card/table padding on desktop */

  /* ==========================================================================
     TRANSITIONS
     ========================================================================== */
  --transition-fast: 0.15s ease-in-out;
  --transition-normal: 0.2s ease;
  --transition-slow: 0.3s ease;

  /* ==========================================================================
     SHADOWS
     ========================================================================== */
  --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.05), 0 1px 2px 0 rgba(0, 0, 0, 0.02);
  --shadow-hover: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);

  /* ==========================================================================
     BUTTON COLORS (secondary/dark variants - primary set dynamically in head.php)
     ========================================================================== */
  --button-secondary-color: #898e9e;
  --button-secondary-hover: #7b8192;
  --button-secondary-focus: #73798c;
  --button-secondary-active: #6e7486;
  --button-dark-border: #4f525f;
  --button-dark-hover: #0150e3;
  --button-dark-focus: #3c3f49;
  --button-dark-active: #383a43;
  --button-dark-active-focus: #434651;
  --button-language-color: #a4a8b8;
}

/* ==========================================================================
   BREAKPOINT REFERENCE
   ==========================================================================
 *
 * This project follows Bootstrap 5 breakpoint system.
 * CSS custom properties cannot be used in media queries, so breakpoints
 * are documented here as a reference.
 *
 * BOOTSTRAP 5 STANDARD BREAKPOINTS:
 * +-----------+------------+------------------+--------------------+
 * | Name      | min-width  | max-width        | Description        |
 * +-----------+------------+------------------+--------------------+
 * | xs        | 0          | 575.98px         | Extra small phones |
 * | sm        | 576px      | 767.98px         | Small phones       |
 * | md        | 768px      | 991.98px         | Tablets            |
 * | lg        | 992px      | 1199.98px        | Desktops           |
 * | xl        | 1200px     | 1399.98px        | Large desktops     |
 * | xxl       | 1400px     | -                | Extra large        |
 * +-----------+------------+------------------+--------------------+
 *
 * USAGE CONVENTIONS:
 * - Mobile-first: Use min-width for progressive enhancement
 *   @media (min-width: 768px) { ... }
 *
 * - Desktop-first: Use max-width with .98px to avoid overlap
 *   @media (max-width: 767.98px) { ... }
 *
 * BREAKPOINTS USED IN THIS PROJECT:
 * - 576px  (sm)  - Small devices, landscape phones
 * - 768px  (md)  - Tablets, primary breakpoint (23× used)
 * - 992px  (lg)  - Desktops
 * - 1200px (xl)  - Large desktops
 *
 * CUSTOM BREAKPOINTS (non-Bootstrap):
 * - 400px  - Extra small mobile (edge case)
 * - 480px  - Small mobile landscape
 * - 700px  - Custom tablet (legacy, consider migrating to 768px)
 *
 * NOTE: When using max-width, always use .98px suffix to prevent
 * overlap with min-width queries at the same breakpoint.
 * Example: max-width: 767.98px (not 768px or 767px)
 *
 * ========================================================================== */

/* White background mode - used for static export and print */
body.white-bg-mode {
  background-color: var(--color-white);
  --dynamic-blocks-bg-color: var(--bg-subtle);
}

/* ==========================================================================
   2. BASE / RESET
   ========================================================================== */

html {
  position: relative;
  min-height: 100%;
}

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: geometricPrecision;
  overflow: auto;
  /* !important: Bootstrap body uses system-ui stack and loads before this file */
  font-family: var(--font-family-body) !important;
  letter-spacing: var(--body-kerning, 0);
  background-color: var(--dynamic-web-bg-color);
  margin: 0;
  padding-bottom: 200px; /* Footer height */
}

body p {
  color: var(--text-color);
  font-size: calc(var(--base-font-size) * 0.9375);
  letter-spacing: var(--body-kerning, 0) !important;
}

body .table, body .alert, body .breadcrumb {
  font-family: var(--font-family-body);
  font-size: calc(var(--base-font-size) * 0.9375);
  letter-spacing: var(--body-kerning, 0) !important;
}

a {
  color: var(--link-color) !important;
}
a:hover {
  color: var(--link-color);
}

li {
  color: var(--text-color);
}

section {
  position: relative;
}

header {
  position: relative;
  z-index: 2;
}

.footer {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
}

/* Header and background colors */
.header-bg-color {
  background-color: var(--header-color);
}

.header-content-bg-color {
  background-color: var(--header-color);
}

.header-text-color {
  color: var(--title-color) !important;
}

.breadcrumb-bg-color {
  background-color: var(--dynamic-web-bg-color);
}

.breadcrumb-scroll-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  max-width: 100%;
}

nav[aria-label="breadcrumb"] .breadcrumb.flex-nowrap {
  flex-wrap: nowrap;
  white-space: nowrap;
}

/* Předci drží šířku: plovoucí "/" se do smrštěné šířky nepočítá, takže text
   přetékal přes další oddělovač. Ustupuje jen aktuální stránka (je to H1 nad
   drobečky), a to výpustkou. */
nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item {
  flex-shrink: 0;
}

nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item.active {
  flex-shrink: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Mobil: tolik úrovní, kolik se jich vejde celých (vybírá assets/js/breadcrumb-fit.js).
   Než skript změří – a bez JS – jen odkaz zpět na nejbližšího předka ("‹ Rodič"). */
@media (max-width: 767.98px) {
  nav[aria-label="breadcrumb"] .breadcrumb {
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
  }

  /* Ve flexu se float ignoruje, takže "/" sedí na středu vysokého odkazu */
  nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item {
    display: flex;
    align-items: center;
  }

  /* Celý řádek je dotyková plocha (min. 44 px). Výška je ve všech stavech stejná,
     takže volba skriptu nehýbe obsahem pod drobečky. */
  nav[aria-label="breadcrumb"] .breadcrumb-item > a,
  nav[aria-label="breadcrumb"] .breadcrumb-item > span {
    display: block;
    min-height: 2.75rem;
    padding: 0.625rem 0;
  }

  /* Skript ukazuje jen celé názvy – místo zkracování ubírá celé úrovně */
  nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item.active {
    flex-shrink: 0;
  }

  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb > .breadcrumb-item:not(.breadcrumb-item--parent),
  nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item--cut {
    display: none;
  }

  /* První zobrazená úroveň je bez oddělovače před sebou */
  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb > .breadcrumb-item--parent,
  nav[aria-label="breadcrumb"][data-crumbs] .breadcrumb > .breadcrumb-item--lead {
    padding-left: 0;
  }

  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb > .breadcrumb-item--parent::before,
  nav[aria-label="breadcrumb"][data-crumbs] .breadcrumb > .breadcrumb-item--lead::before {
    content: none;
  }

  /* "‹ Rodič" je poslední možnost – jen tady se název smí zkrátit výpustkou */
  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb > .breadcrumb-item--parent,
  nav[aria-label="breadcrumb"][data-crumbs="back"] .breadcrumb > .breadcrumb-item--parent {
    flex-shrink: 1;
    min-width: 0;
  }

  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb-item--parent > a,
  nav[aria-label="breadcrumb"][data-crumbs="back"] .breadcrumb-item--parent > a {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  nav[aria-label="breadcrumb"]:not([data-crumbs]) .breadcrumb-item--parent > a::before,
  nav[aria-label="breadcrumb"][data-crumbs="back"] .breadcrumb-item--parent > a::before {
    content: "";
    display: inline-block;
    width: 0.5em;
    height: 0.5em;
    margin: 0 0.5em 0.125em 0.2em;
    border-bottom: 2px solid currentColor;
    border-left: 2px solid currentColor;
    transform: rotate(45deg);
    vertical-align: middle;
  }
}

.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 10000;
  padding: 0.65rem 1rem;
  background: var(--title-color, #212529);
  color: #fff !important;
  text-decoration: none;
  font-size: 0.9rem;
  border-radius: 0 0 4px 0;
}

.skip-link:focus {
  left: 0;
  outline: 2px solid var(--button-primary-color, #fe1a3f);
  outline-offset: 2px;
}

/* Globální .alert má padding-bottom: 0 — pro empty state obnovit svislou symetrii */
.vb-empty-state.alert {
  padding-bottom: 0.75rem;
}

.vb-empty-state .vb-empty-state__icon {
  font-size: 1.35rem;
  line-height: 1.2;
  margin-right: 0.65rem;
  margin-top: 0.1rem;
  opacity: 0.75;
}

/* Decorative lines */
.color-swatch-card-line {
  position: absolute;
  width: 100%;
  bottom: 0;
  left: 0;
  height: 1px;
  background-color: var(--line-color);
  mix-blend-mode: multiply;
}

.color-card-line {
  position: absolute;
  width: 100% !important;
  bottom: 100%;
  left: 0;
  right: 0;
  z-index: 1;
  background-color: var(--line-color);
  height: 1px;
  mix-blend-mode: multiply;
}

.header-card-line {
  z-index: 1;
  background-color: var(--line-color);
  mix-blend-mode: multiply;
}

.main-card-line {
  z-index: 70;
  margin-top: -1px;
  background-color: var(--gray-15);
  mix-blend-mode: multiply;
}

/* Glyphs */
.glyphs {
  font-weight: 700;
  display: flex;
  flex-wrap: wrap;
}
.glyphs div {
  width: 60px;
  height: 60px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--gray-30);
  margin-left: -1px;
  margin-top: -1px;
  color: var(--gray-10);
}
.glyphs div:hover {
  background-color: var(--gray-10);
}
.glyphs div p {
  color: var(--text-color);
  margin-bottom: 0;
}

/* Ratio containers */
.ratio-main-card {
  position: relative;
}
.ratio-main-card:before {
  display: block;
  content: " ";
  width: 100%;
  padding-top: 68%;
}
.ratio-main-card > .logo-image,
.ratio-main-card > img {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ratio-16-9 {
  position: relative;
  overflow: hidden;
}
.ratio-16-9:before {
  display: block;
  content: " ";
  width: 100%;
  padding-top: 56.25%;
}
.ratio-16-9 > .logo-image {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.ratio-4-3 {
  position: relative;
  width: 100%;
  overflow: hidden;
}
.ratio-4-3:before {
  display: block;
  content: " ";
  width: 100%;
  padding-top: 75%;
}
.ratio-4-3 > .logo-image {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

/* Logo transformations (not allowed examples) */
.not-allowed-logo-shadow {
  filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.4));
}

.not-allowed-logo-transform {
  transform: rotate(10deg);
}

.not-allowed-logo-recolor {
  filter: invert(80%);
}

.not-allowed-logo-deformation {
  transform: scale(1, 0.8);
}

/* ---------------------------------------------------------------------------
   Base/Reset - Responsive (md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 768px) {
  body p { font-size: calc(var(--base-font-size) * 1); }
  body .table, body .alert, body .breadcrumb { font-size: calc(var(--base-font-size) * 1); }
}

/* ==========================================================================
   3. TYPOGRAPHY
   ========================================================================== */

/* ---------------------------------------------------------------------------
   3.1 Headings (h1-h6) - Base styles (mobile-first)
   --------------------------------------------------------------------------- */

/* Shared heading properties (font-family, letter-spacing from --heading-kerning) */
body h1, body h2, body h3, body h4, body h5, body h6 {
  font-family: var(--font-family-headings);
  letter-spacing: var(--heading-kerning, 0) !important;
}
.font-name-display {
  font-family: var(--font-family-headings);
  letter-spacing: 0 !important;
}

/* Shared heading color (h2-h6 use --headings-color, h1 uses --title-color) */
body h2, body h3, body h4, body h5, body h6, .font-name-display {
  color: var(--headings-color) !important;
}

/* Náhled písma: tmavý režim přebarví přes --vb-font-preview-color (dark.css) */
.font-name-display {
  color: var(--vb-font-preview-color, var(--headings-color)) !important;
}

body h1 {
  color: var(--title-color) !important;
  font-size: calc(1.9rem * var(--heading-scale));
}

body h2 { font-size: calc(1.8rem * var(--heading-scale)); }
body h3 { font-size: calc(1.45rem * var(--heading-scale)); }
body h4 { font-size: calc(1.35rem * var(--heading-scale)); }
body h5 { font-size: calc(1.1rem * var(--heading-scale)); }
body h6 { font-size: calc(0.9375rem * var(--heading-scale)); }

/* ---------------------------------------------------------------------------
   3.2 Font Display Classes - Base styles (mobile-first)
   --------------------------------------------------------------------------- */

.font-name-display { font-size: 1.8rem; line-height: 1.3; }

/* Typography card font display */
body .card-typography .card-typography-font {
  font-size: 6.5rem;
  color: var(--card-typography-text-color) !important;
  line-height: 1.1;
}

.text-small {
  font-size: 0.875rem !important;
}

/* Display text styles */
body .text-display-additional {
  font-size: 9rem;
  color: var(--headings-color) !important;
  margin-bottom: -1rem;
  margin-top: -1rem;
  line-height: 1.1;
}

body .text-display-main {
  font-size: 9rem;
  color: var(--vb-font-preview-color, var(--headings-color)) !important;
  margin-bottom: -1rem;
  margin-top: -1rem;
  line-height: 1.1;
}

/* UI labels beside logo previews — vestavěná Mona Sans + ss05 (synchronizovat s visualbook_builtin_mona_builtin_feature_settings) */
.use-monasans-ui {
  font-family: 'Mona Sans', 'Mona Sans Fallback', var(--font-family-body, system-ui, sans-serif), sans-serif !important;
  font-weight: 500;
  font-feature-settings: "ss05" 0, "calt" 0, "rvrn" 0;
}

/* ---------------------------------------------------------------------------
   3.3 Heading hierarchy – visual size preservation classes
   --------------------------------------------------------------------------- */

/*
 * When fixing the heading hierarchy (h3→h2, h5→h3, h6→h4),
 * these classes lock the visual font-size to the OLD heading level
 * so the rendered appearance stays identical.
 */
body .vb-h3 { font-size: calc(1.45rem * var(--heading-scale)); }
body .vb-h5 { font-size: calc(1.1rem * var(--heading-scale)); }
body .vb-h6 { font-size: calc(0.9375rem * var(--heading-scale)); }

/*
 * Accordion (rozbalovací obsah) body text uses the same full TipTap toolbar as
 * the main text field, whose H3 (Nadpis) / H4 (Podnadpis) are too large inside a
 * collapsed panel. Render them one step down — H3 at H5 size, H4 at H6 size —
 * for every accordion item's content (acordeonTextarea everywhere; the font
 * module's accordion uses imageTextarea inside a .vb-accordion__body). Sizes mirror the
 * h5/h6 scale, including the 768px / 992px breakpoints below.
 */
[data-field-name="acordeonTextarea"] h3,
.vb-accordion__body[data-field-name="imageTextarea"] h3 { font-size: calc(1.1rem * var(--heading-scale)); }
[data-field-name="acordeonTextarea"] h4,
.vb-accordion__body[data-field-name="imageTextarea"] h4 { font-size: calc(0.9375rem * var(--heading-scale)); }
@media (min-width: 768px) {
  [data-field-name="acordeonTextarea"] h3,
  .vb-accordion__body[data-field-name="imageTextarea"] h3 { font-size: calc(1.15rem * var(--heading-scale)); }
  [data-field-name="acordeonTextarea"] h4,
  .vb-accordion__body[data-field-name="imageTextarea"] h4 { font-size: calc(0.95rem * var(--heading-scale)); }
}
@media (min-width: 992px) {
  [data-field-name="acordeonTextarea"] h3,
  .vb-accordion__body[data-field-name="imageTextarea"] h3 { font-size: calc(1.2rem * var(--heading-scale)); }
  [data-field-name="acordeonTextarea"] h4,
  .vb-accordion__body[data-field-name="imageTextarea"] h4 { font-size: calc(1rem * var(--heading-scale)); }
}

/* Multi-line truncation: max 2 lines with ellipsis */
.vb-line-clamp-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
}

/*
 * Line-clamp card footers: flex + vertical center.
 * Bootstrap .align-items-stretch uses !important — we must match it when the strip is display:flex.
 * Logos row (no .card-bottom-area): height ~ 1 text line (vb-h5 slot).
 * Homepage .card-bottom-area: lh 1.2, svislé mezery mezi plným paddingem .card-main a velmi úzkým pásem.
 */
.card-main:not(.card-bottom-area):has(.vb-line-clamp-2) {
  box-sizing: border-box;
  height: calc(2 * var(--spacing-card-mobile) + 1.1rem * var(--heading-scale, 1) * 1.4) !important;
  min-height: 0;
  flex-shrink: 0;
  display: flex;
  align-items: center !important;
}

.card-main.card-bottom-area:has(.vb-line-clamp-2) {
  box-sizing: border-box;
  /* svislý padding „napůl“ mezi plnou .card-main a příliš štíhlou variantou; height = horní+dolní + 2 řádky lh 1.2 */
  padding: 1rem var(--spacing-card-mobile) !important;
  height: calc(2rem + 2 * 1.1rem * var(--heading-scale, 1) * 1.2) !important;
  min-height: 0;
  flex-shrink: 0;
  display: flex !important;
  align-items: center !important;
}

/* Flex item = nadpis, line-clamp jen uvnitř <span> (ne kombinovat flex s -webkit-box na jednom prvku) */
.card-main.card-bottom-area:has(.vb-line-clamp-2) > h2 {
  flex: 1 1 auto;
  min-width: 0;
  margin-bottom: 0;
}

/* Dědit typografii z h2.vb-h3 (span má display:-webkit-box) */
.card-main.card-bottom-area h2.vb-h3 > .vb-line-clamp-2 {
  width: 100%;
  font: inherit;
  line-height: 1.2;
}

@media (min-width: 768px) {
  .card-main:not(.card-bottom-area):has(.vb-line-clamp-2) {
    height: calc(2 * var(--spacing-card-desktop) + 1.15rem * var(--heading-scale, 1) * 1.4) !important;
  }
  .card-main.card-bottom-area:has(.vb-line-clamp-2) {
    padding: 1.3rem var(--spacing-card-desktop) !important;
    height: calc(2.6rem + 2 * 1.15rem * var(--heading-scale, 1) * 1.2) !important;
  }
}
@media (min-width: 992px) {
  .card-main:not(.card-bottom-area):has(.vb-line-clamp-2) {
    height: calc(2 * var(--spacing-card-desktop) + 1.2rem * var(--heading-scale, 1) * 1.4) !important;
  }
  .card-main.card-bottom-area:has(.vb-line-clamp-2) {
    padding: 1.35rem var(--spacing-card-desktop) !important;
    height: calc(2.7rem + 2 * 1.2rem * var(--heading-scale, 1) * 1.2) !important;
  }
}

/* ---------------------------------------------------------------------------
   3.4 Anchor Points for H2 Section Headings
   --------------------------------------------------------------------------- */

section h2 {
  position: relative;
  cursor: pointer;
}

section h2.no-anchor {
  cursor: auto;
}

section h2:not(.homepage):not(.no-anchor)::before {
  content: '';
  display: inline-block;
  position: absolute;
  left: -30px;
  top: 5px;
  width: 1.4rem;
  height: 1.4rem;
  opacity: 0;
  transition: opacity 0s;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23999999'%3E%3Cpath d='M18.3643 15.5353L16.95 14.1211L18.3643 12.7069C20.3169 10.7543 20.3169 7.58847 18.3643 5.63585C16.4116 3.68323 13.2458 3.68323 11.2932 5.63585L9.87898 7.05007L8.46477 5.63585L9.87898 4.22164C12.6127 1.48797 17.0448 1.48797 19.7785 4.22164C22.5121 6.95531 22.5121 11.3875 19.7785 14.1211L18.3643 15.5353ZM15.5358 18.3638L14.1216 19.778C11.388 22.5117 6.9558 22.5117 4.22213 19.778C1.48846 17.0443 1.48846 12.6122 4.22213 9.87849L5.63634 8.46428L7.05055 9.87849L5.63634 11.2927C3.68372 13.2453 3.68372 16.4112 5.63634 18.3638C7.58896 20.3164 10.7548 20.3164 12.7074 18.3638L14.1216 16.9496L15.5358 18.3638ZM14.8287 7.75717L16.2429 9.17139L9.17187 16.2425L7.75765 14.8282L14.8287 7.75717Z'/%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
}

section h2:not(.homepage):not(.no-anchor).hover::before {
  opacity: 1;
}

body[data-frontend-editor-active="true"] section h2:not(.homepage):not(.no-anchor).hover::before,
body[data-frontend-editor-active="true"] section h2:not(.homepage):not(.no-anchor).clicked::before {
  opacity: 0 !important;
}

section h2:not(.homepage):not(.no-anchor).clicked::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2328a745'%3E%3Cpath d='M4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM17.4571 9.45711L16.0429 8.04289L11 13.0858L8.20711 10.2929L6.79289 11.7071L11 15.9142L17.4571 9.45711Z'/%3E%3C/svg%3E");
  opacity: 1;
}

/* ---------------------------------------------------------------------------
   3.5 Typography - Responsive (sm: 576px)
   --------------------------------------------------------------------------- */

@media (min-width: 576px) {
  body .card-typography .card-typography-font {
    font-size: 5rem;
  }
  body .text-display-additional,
  body .text-display-main {
    font-size: 9rem;
  }
}

/* ---------------------------------------------------------------------------
   3.6 Typography - Responsive (md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 768px) {
  /* Headings */
  body h1 { font-size: calc(2.15rem * var(--heading-scale)); }
  body h2 { font-size: calc(1.9rem * var(--heading-scale)); }
  body h3 { font-size: calc(1.5375rem * var(--heading-scale)); }
  body h4 { font-size: calc(1.425rem * var(--heading-scale)); }
  body h5 { font-size: calc(1.15rem * var(--heading-scale)); }
  body h6 { font-size: calc(0.95rem * var(--heading-scale)); }

  /* Heading hierarchy – visual size preservation */
  body .vb-h3 { font-size: calc(1.5375rem * var(--heading-scale)); }
  body .vb-h5 { font-size: calc(1.15rem * var(--heading-scale)); }
  body .vb-h6 { font-size: calc(0.95rem * var(--heading-scale)); }

  /* Font displays */
  .font-name-display { font-size: 1.9rem; }
  body .card-typography .card-typography-font { font-size: 7.5rem; }
  body .text-display-additional,
  body .text-display-main { font-size: 9rem; }
}

/* ---------------------------------------------------------------------------
   3.7 Typography - Responsive (lg: 992px)
   --------------------------------------------------------------------------- */

@media (min-width: 992px) {
  /* Headings */
  body h1 { font-size: calc(2.25rem * var(--heading-scale)); }
  body h2 { font-size: calc(2rem * var(--heading-scale)); }
  body h3 { font-size: calc(1.625rem * var(--heading-scale)); }
  body h4 { font-size: calc(1.5rem * var(--heading-scale)); }
  body h5 { font-size: calc(1.2rem * var(--heading-scale)); }
  body h6 { font-size: calc(1rem * var(--heading-scale)); }

  /* Heading hierarchy – visual size preservation */
  body .vb-h3 { font-size: calc(1.625rem * var(--heading-scale)); }
  body .vb-h5 { font-size: calc(1.2rem * var(--heading-scale)); }
  body .vb-h6 { font-size: calc(1rem * var(--heading-scale)); }

  /* Font displays */
  .font-name-display { font-size: 2rem; }
  body .card-typography .card-typography-font { font-size: 6.5rem; }
  body .text-display-additional,
  body .text-display-main { font-size: 10rem; }
}

/* ---------------------------------------------------------------------------
   3.8 Typography - Responsive (xl: 1200px)
   --------------------------------------------------------------------------- */

@media (min-width: 1200px) {
  body .card-typography .card-typography-font { font-size: 7.5rem; }
  body .text-display-additional,
  body .text-display-main { font-size: 12rem; }
}

/* ==========================================================================
   4. LAYOUT
   ========================================================================== */

.container {
  padding-top: 2rem;
  padding-bottom: 1rem;
}

.homepage-padding-top {
  padding-top: 1px;
}

/* Aspect ratio containers */
.aspect-ratio-container {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: var(--border-radius-card) !important;
}

.aspect-ratio-container-module {
  position: relative;
  width: 100%;
  overflow: hidden;
}

.aspect-16-9 .aspect-ratio-container::before,
.aspect-4-3 .aspect-ratio-container::before,
.aspect-1-1 .aspect-ratio-container::before {
  content: '';
  display: block;
  width: 100%;
}

.aspect-16-9 .aspect-ratio-container::before {
  padding-top: 56.25%;
}
.aspect-4-3 .aspect-ratio-container::before {
  padding-top: 75%;
}
.aspect-1-1 .aspect-ratio-container::before {
  padding-top: 100%;
}

.aspect-16-9 img,
.aspect-4-3 img,
.aspect-1-1 img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Video containers (consolidated) */
video,
.kirbytext video {
  width: 100% !important;
  height: auto;
  border-radius: var(--border-radius-card) !important;
}
video {
  max-width: 100%;
}

/* ---------------------------------------------------------------------------
   Layout - Responsive (sm: 576px, md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 576px) {
  .container { padding-top: 2rem; }
}

@media (min-width: 768px) {
  .container { padding-top: 2.5rem; }
}

/* ==========================================================================
   5. COMPONENTS - BUTTONS
   ==========================================================================
   Button architecture:
   - Shared reset: box-shadow: none for all button states
   - Base styles: padding, border-radius, colors
   - State styles: :hover, :focus, :active grouped where identical
   ========================================================================== */

/* ---------------------------------------------------------------------------
   5.1 Shared Button Reset - removes box-shadow from all states
   --------------------------------------------------------------------------- */
.btn-primary,
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary:not(:disabled):not(.disabled):active:focus,
.btn-dark,
.btn-dark:hover,
.btn-dark:focus,
.btn-dark:active,
.btn-dark:not(:disabled):not(.disabled):active:focus,
.btn-outline-primary:hover,
.btn-outline-primary:focus,
.btn-outline-primary:active,
.btn-outline-primary:not(:disabled):not(.disabled):active:focus,
.btn-secondary,
.btn-secondary:hover,
.btn-secondary:focus,
.btn-secondary:active,
.btn-secondary:not(:disabled):not(.disabled):active:focus,
.btn-outline-secondary,
.btn-outline-secondary:hover,
.btn-outline-secondary:focus,
.btn-outline-secondary:active,
.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,
.btn-multibrand:hover,
.btn-multibrand:focus,
.btn-multibrand:active,
.btn-multibrand.active,
.btn-multibrand.active:focus,
#back-button:active,
#back-button:focus {
  box-shadow: none;
}

/* ---------------------------------------------------------------------------
   5.2 Button - Primary
   --------------------------------------------------------------------------- */
.btn-primary {
  color: var(--vb-button-primary-text, white) !important;
  z-index: 3;
  padding: 0.8rem;
  padding-left: 2em !important;
  padding-right: 2em !important;
  background-color: var(--button-primary-color);
  border-color: var(--button-primary-color);
  border-radius: var(--border-radius-button);
}

/* Primary: all states keep same bg/border, only hover adds brightness */
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary:not(:disabled):not(.disabled):active:focus {
  background-color: var(--button-primary-color);
  border-color: var(--button-primary-color);
}

.btn-primary:hover {
  filter: brightness(110%);
  color: var(--vb-button-primary-text, white) !important;
}

/* ---------------------------------------------------------------------------
   5.3 Button - Dark
   --------------------------------------------------------------------------- */
.btn-dark {
  color: white !important;
  z-index: 3;
  padding: 0.8rem;
  background-color: var(--gray-60);
  border-color: var(--button-dark-border);
  border-radius: var(--border-radius-button);
}

.btn-dark:hover {
  background-color: var(--button-dark-hover);
  border-color: var(--button-dark-hover);
}

.btn-dark:focus {
  background-color: var(--button-dark-focus);
  border-color: var(--button-dark-focus);
}

.btn-dark:active {
  background-color: var(--button-dark-active);
  border-color: var(--button-dark-active);
}

.btn-dark:not(:disabled):not(.disabled):active:focus {
  background-color: var(--button-dark-active-focus);
  border-color: var(--button-dark-active-focus);
}

/* ---------------------------------------------------------------------------
   5.4 Button - Outline Primary
   --------------------------------------------------------------------------- */
.btn-outline-primary:not(:disabled):not(.disabled).active,
.btn-outline-primary:not(:disabled):not(.disabled):active,
.show > .btn-outline-primary.dropdown-toggle {
  color: white;
  background-color: var(--button-primary-color);
  border-color: var(--button-primary-color);
}

.btn-outline-primary {
  z-index: 3;
  padding: 0.8rem;
  color: var(--button-primary-color) !important;
  border-color: var(--button-primary-color);
  border-radius: var(--border-radius-button);
}

/* Outline Primary: hover/focus fill with primary color */
.btn-outline-primary:hover,
.btn-outline-primary:focus {
  background-color: var(--button-primary-color);
  border-color: var(--button-primary-color);
  color: var(--vb-button-primary-text, white) !important;
}

.btn-outline-primary:focus {
  filter: brightness(110%);
}

.btn-outline-primary:active {
  background-color: var(--button-primary-color);
  border-color: var(--button-primary-color);
  color: var(--button-primary-color) !important;
}

.btn-outline-primary:not(:disabled):not(.disabled):active:focus {
  background-color: transparent;
  border-color: var(--button-primary-color);
}

/* ---------------------------------------------------------------------------
   5.5 Button - Secondary (solid)
   --------------------------------------------------------------------------- */
.btn-secondary {
  padding: 0.8rem;
  background-color: var(--button-secondary-color);
  border-color: var(--button-secondary-color);
  border-radius: var(--border-radius-button);
}

.btn-secondary:hover,
.btn-secondary:not(:disabled):not(.disabled):active:focus {
  background-color: var(--button-secondary-hover);
  border-color: var(--button-secondary-hover);
}

.btn-secondary:focus {
  background-color: var(--button-secondary-focus);
  border-color: var(--button-secondary-focus);
}

.btn-secondary:active {
  background-color: var(--button-secondary-active);
  border-color: var(--button-secondary-active);
}

/* ---------------------------------------------------------------------------
   5.6 Button - Outline Secondary
   --------------------------------------------------------------------------- */
.btn-outline-secondary {
  padding: 0.8rem;
  color: var(--button-secondary-color) !important;
  border-color: var(--button-secondary-color);
  border-radius: var(--border-radius-button);
}

.btn-outline-secondary:hover,
.btn-outline-secondary:not(:disabled):not(.disabled):active:focus {
  background-color: var(--button-secondary-hover);
  border-color: var(--button-secondary-hover);
  color: white !important;
}

.btn-outline-secondary:focus {
  background-color: var(--button-secondary-focus);
  border-color: var(--button-secondary-focus);
}

.btn-outline-secondary:active {
  background-color: var(--button-secondary-active);
  border-color: var(--button-secondary-active);
}

/* ---------------------------------------------------------------------------
   5.8 Button - Multibrand
   --------------------------------------------------------------------------- */
.btn-multibrand {
  color: var(--button-multibrand-color) !important;
  border-color: var(--button-multibrand-color) !important;
  background-color: transparent;
  height: 42px;
}

.btn-multibrand:hover,
.btn-multibrand:active,
.btn-multibrand.active,
.btn-multibrand.active:focus {
  color: var(--button-multibrand-color-hover) !important;
  background-color: transparent;
  border-color: var(--button-multibrand-color-hover) !important;
}

.btn-multibrand:focus,
#back-button:active,
#back-button:focus {
  color: var(--button-multibrand-color) !important;
  background-color: transparent !important;
  border-color: var(--button-multibrand-color) !important;
}

.btn-multibrand-radius {
  border-radius: var(--border-radius-header-button) !important;
}

/* ==========================================================================
   6. COMPONENTS - CARDS
   ========================================================================== */

.card {
  border-radius: 0;
  margin-bottom: -1px;
  border: 1px solid var(--border-color);
}

.card-body img {
  width: 100%;
  height: auto;
}

.card-bottom-area {
  background-color: var(--card-bottom-bg-color);
}
.card-bottom-area h1, .card-bottom-area h2, .card-bottom-area h3,
.card-bottom-area h4, .card-bottom-area h5, .card-bottom-area h6 {
  color: var(--card-bottom-heading-color) !important;
}
.card-bottom-area p {
  color: var(--card-bottom-text-color);
}
.card-bottom-area li {
  color: var(--card-bottom-text-color);
}
.card-bottom-area:hover {
  background-color: var(--card-bottom-hover-color);
}

.dynamic-block {
  background-color: var(--dynamic-blocks-bg-color);
}

/*
 * Textové karty (module-cards, portal-cards, group-page, default/multibrand secondary):
 * když je v rohu ikona, nadpis nesmí zasahovat pod ni — :has() vybírá jen tyto případy.
 */
article.card-module:has(.lock-indicator, .portal-indicator, .multibrand-indicator, .external-link-indicator, .portal-external-link-indicator) > h3.vb-h5,
article.card-main.dynamic-block:has(.lock-indicator, .portal-indicator, .multibrand-indicator, .external-link-indicator, .portal-external-link-indicator) > h3.vb-h5:first-of-type,
article.card-main.dynamic-block:has(.lock-indicator, .portal-indicator, .multibrand-indicator, .external-link-indicator, .portal-external-link-indicator) > h2.vb-h5:first-of-type {
  padding-right: 2rem;
}

.card-main,
.card-module,
.card-secondary {
  padding: var(--spacing-card-mobile);
}

/* Consolidated card hover text-decoration (was 4 separate rules) */
.card-main:hover,
.card-main a:hover,
.card-module:hover,
.card-module a:hover {
  text-decoration: none !important;
}

/* Consolidated card header styles (was 2 separate rules).
   .card-header web od plánu 82 F2 nepoužívá (akordeony jsou vb-accordion), zůstává jen kvůli
   statickým náhledům modulů v Panelu (assets/module-previews/html/*.html načítají styles.css). */
.card-header,
.button-card-header {
  padding-left: var(--spacing-card-mobile);
  padding-right: var(--spacing-card-mobile);
  margin-bottom: -2px;
  vertical-align: middle;
  background-color: var(--gray-00);
  border-bottom: 1px solid var(--border-color) !important;
}
.card-header:hover {
  background-color: var(--gray-10);
}

.bg-card-logos {
  background-color: var(--card-logo-bg);
}


/* ---------------------------------------------------------------------------
   Cards - Responsive (md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 768px) {
  .card-main,
  .card-module,
  .card-secondary {
    padding: var(--spacing-card-desktop);
  }
  .card-header,
  .button-card-header {
    padding-left: var(--spacing-card-desktop);
    padding-right: var(--spacing-card-desktop);
  }
}

/* ==========================================================================
   7. COMPONENTS - TABLES
   ========================================================================== */

/* Consolidated table styles (was 2 identical rules) */
.table,
.table table {
  color: var(--text-color);
  width: 100%;
  margin-bottom: 0rem;
  background-color: var(--table-color-bg);
  border-radius: var(--border-radius-card) !important;
}

.table tr {
  border-top-left-radius: var(--border-radius-card);
  border-top-right-radius: var(--border-radius-card);
}

thead tr {
  border-top-left-radius: var(--border-radius-card);
  border-top-right-radius: var(--border-radius-card);
  font-size: var(--table-font-size);
}

.table td {
  padding-left: var(--spacing-card-mobile);
  padding-right: var(--spacing-card-mobile);
  height: 4rem;
  vertical-align: middle;
  border-top: 1px solid var(--table-line-color) !important;
}

/* Table without a header: the wrapper's border is the top edge, so the first
   row's line would double it. */
.table > tbody:first-child > tr:first-child > td {
  border-top: none !important;
}

.table th {
  padding-left: var(--spacing-card-mobile);
  padding-right: var(--spacing-card-mobile);
  border-top: none;
  height: 4rem;
  line-height: 1.2;
  vertical-align: middle;
  font-weight: 400;
  font-size: var(--table-font-size);
  background-color: var(--gray-00);
  color: var(--text-muted);
  height: 64px;
}

.table tbody tr {
  font-size: var(--table-font-size);
}

.table tbody {
  border-bottom-left-radius: var(--border-radius-card);
  border-bottom-right-radius: var(--border-radius-card);
}

.table tbody tr:hover {
  background-color: var(--table-hover-bg);
  color: var(--text-color);
}

.table thead th {
  vertical-align: middle;
  border-bottom: none;
  border-top: none;
  font-weight: 400;
  font-size: var(--table-font-size);
  background-color: var(--gray-00);
  height: 64px;
}

.table-condensed {
  background-color: var(--table-color-bg);
}
.table-condensed td {
  height: 20px !important;
  border-top: none !important;
}
.table-condensed th {
  background-color: var(--table-color-bg);
  border-top: none;
  border-bottom: none;
  height: 1.8rem;
  vertical-align: middle;
  font-weight: 400;
  background-color: var(--table-color-bg);
}
.table-condensed tbody tr:hover {
  background-color: var(--table-hover-bg);
}
.table-condensed thead th {
  vertical-align: middle;
  font-weight: 400;
  font-size: 0.875rem;
  background-color: var(--table-color-bg);
  color: var(--gray-60);
  height: 64px;
}

/* Consolidated table header font-size (was 5 separate rules) */
thead.bg-light,
thead.bg-light th,
.table thead.bg-light th,
.table thead.bg-light th h4,
.table thead.bg-light th span.vb-h6,
thead.bg-light th h4,
thead.bg-light th span.vb-h6 {
  font-size: var(--table-font-size) !important;
}

/* Yes/No icons in table cells */
.yes-icon {
  display: none !important;
}

.no-icon {
  display: none !important;
}

.table-cell-settings.add-yes-icon .yes-icon {
  display: inline !important;
}

.table-cell-settings.add-no-icon .no-icon {
  display: inline !important;
}

/* ---------------------------------------------------------------------------
   Tables - Responsive (md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 768px) {
  .table td,
  .table th {
    padding-left: var(--spacing-card-desktop);
    padding-right: var(--spacing-card-desktop);
  }
}

/* ---------------------------------------------------------------------------
   Tables - Style Variants
   Header bottom border (border-bottom-table class) is always preserved.
   --------------------------------------------------------------------------- */

/* Pod nadpisem tabulky bez popisku – stejná výška jako .frontend-editor-editable (20px) + mb-2 */
.vb-table-section-caption-gap {
  min-height: 20px;
}

/* Default style - clean, no cell borders (module-table + hardcoded page tables) */
.table.vb-table-default td {
  border: none !important;
}

/* Horizontal lines - row separators */
.table.vb-table-horizontal td {
  border-top: 1px solid var(--border-color, #e0e0e0) !important;
  border-left: none !important;
  border-right: none !important;
  border-bottom: none !important;
}

/* Vertical lines - column separators (header + body) */
.table.vb-table-vertical td,
.table.vb-table-vertical th {
  border-top: none !important;
  border-bottom: none !important;
  border-right: none !important;
  border-left: 1px solid var(--border-color, #e0e0e0) !important;
}

.table.vb-table-vertical td:first-child,
.table.vb-table-vertical th:first-child {
  border-left: none !important;
}

/* Preserve header bottom border for vertical style */
.table.vb-table-vertical thead th.border-bottom-table {
  border-bottom: 1px solid var(--border-color-light) !important;
}

/* Grid - internal borders only (header + body, outer border from container) */
.table.vb-table-grid td,
.table.vb-table-grid th {
  border-right: 1px solid var(--border-color, #e0e0e0) !important;
  border-bottom: 1px solid var(--border-color, #e0e0e0) !important;
  border-top: none !important;
  border-left: none !important;
}

.table.vb-table-grid td:last-child,
.table.vb-table-grid th:last-child {
  border-right: none !important;
}

.table.vb-table-grid tbody tr:last-child td {
  border-bottom: none !important;
}

/* ==========================================================================
   8. COMPONENTS - FORMS
   ========================================================================== */

input, textarea {
  height: 40px;
}

input[type=range] {
  -webkit-appearance: none;
  appearance: none;
  background-color: var(--border-color);
  height: 6px;
  border-radius: 8px;
  border: solid var(--border-color-light) 1px;
}

input[type=number] {
  -webkit-appearance: none;
  appearance: none;
  background-color: var(--bg-input);
  height: 6px;
  border-radius: 4px;
  border: none;
}

input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  position: relative;
  top: 0px;
  z-index: 1;
  width: 18px;
  height: 18px;
  cursor: pointer;
  border-radius: 40px;
  background-color: var(--button-primary-color);
}

input[type=range]::-moz-range-thumb {
  position: relative;
  top: 0px;
  z-index: 1;
  width: 18px;
  height: 18px;
  cursor: pointer;
  border-color: transparent;
  border-radius: 40px;
  background-color: var(--button-primary-color);
}

.dropdown-menu {
  border-radius: var(--border-radius-card);
}

.dropdown-item {
  color: var(--text-color) !important;
}

.dropdown-item.active, .dropdown-item:active {
  color: var(--color-white) !important;
  background-color: var(--button-primary-color);
}

/* ---------------------------------------------------------------------------
   Forms - Responsive (max-width: 700px - larger slider thumbs on mobile)
   --------------------------------------------------------------------------- */

@media only screen and (max-width: 700px) {
  input[type=range]::-webkit-slider-thumb {
    width: 22px !important;
    height: 22px !important;
  }
  input[type=range]::-moz-range-thumb {
    width: 22px !important;
    height: 22px !important;
  }
}

/* Password fields with show/hide (locked page, link-lock modal, etc.) */
.vb-password-field {
  position: relative;
  display: block;
  width: 100%;
}

.vb-password-field .vb-password-field-input {
  padding-right: 2.75rem;
  width: 100%;
}

.vb-password-toggle {
  position: absolute;
  right: 0.4rem;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  padding: 0;
  margin: 0;
  border: none;
  border-radius: var(--border-radius-button, 6px);
  background: transparent;
  color: inherit;
  cursor: pointer;
  line-height: 0;
}

.vb-password-toggle:focus-visible {
  outline: 2px solid var(--button-primary-color, #005B5B);
  outline-offset: 2px;
}

.vb-password-icon {
  display: block;
  flex-shrink: 0;
}

/* SVG ignores [hidden] inconsistently — toggle icons via wrapper class */
.vb-password-field:not(.vb-password-field--plain) .vb-password-icon--revealed {
  display: none !important;
}

.vb-password-field.vb-password-field--plain .vb-password-icon--masked {
  display: none !important;
}

/* ==========================================================================
   9. COMPONENTS - NAVIGATION
   Záložky jsou od plánu 82 (F2) v assets/css/vb/components/tabs.css.
   ========================================================================== */


#langlinks img {
  height: 18px;
  margin-right: 8px;
}

#langlinks .btn {
  text-transform: uppercase;
}

#language-nav {
  -webkit-appearance: none !important;
  appearance: none !important;
}

/* ==========================================================================
   10. MODULES
   ========================================================================== */

/* PROTECTION ZONE ANIMATION */
.meter {
  height: auto;
  position: relative;
}

.meter > div {
  display: block;
  height: 100%;
  background-color: var(--bg-meter);
  position: relative;
  overflow: hidden;
}

.meter > div:after, .animate > div > div {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  background-image: linear-gradient(-45deg, var(--vb-meter-stripe, white) 25%, transparent 25%, transparent 50%, var(--vb-meter-stripe, white) 50%, var(--vb-meter-stripe, white) 75%, transparent 75%, transparent);
  z-index: 0;
  background-size: 25px 25px;
  animation: move 4s linear infinite;
  overflow: hidden;
}

.animate > div:after {
  display: none;
}

@keyframes move {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: 50px 50px;
  }
}

/* CONTRAST CHECKER MODULE */
.contrast-checker h4 {
  font-size: var(--table-font-size) !important;
}

.contrast-inputs h4 {
  font-size: var(--table-font-size) !important;
}

.contrast-inputs label h4 {
  font-size: var(--table-font-size) !important;
}

/* COLOR CIRCLES (responsive) */
.color-circle {
  width: 65px;
  height: 65px;
  min-width: 65px;
  min-height: 65px;
  flex-shrink: 0;
}

@media (max-width: 991.98px) {
  .color-circle {
    width: 55px;
    height: 55px;
    min-width: 55px;
    min-height: 55px;
  }
}

@media (max-width: 767.98px) {
  .color-circle {
    width: 50px;
    height: 50px;
    min-width: 50px;
    min-height: 50px;
  }
}

@media (max-width: 575.98px) {
  .color-circle {
    width: 45px;
    height: 45px;
    min-width: 45px;
    min-height: 45px;
  }
}

@media (max-width: 400px) {
  .color-circle {
    width: 40px;
    height: 40px;
    min-width: 40px;
    min-height: 40px;
  }
}

/* Colors hub card — circle row spacing (markup: snippets/card-preview-colors-swatches.php) */
.color-circles-container {
  gap: clamp(6px, 1.5vw, 10px);
}

.color-circles-container.color-circles-duo {
  gap: clamp(8px, 2vw, 14px);
}

/* Colors hub card — “Kruhy na vlně” (snippet card-preview-colors + homepage templates) */
@keyframes gentleWave {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(var(--vb-wave-y, -6px));
  }
}

.color-circle-animated-1,
.color-circle-animated-2,
.color-circle-animated-3 {
  animation: gentleWave 2.5s ease-in-out infinite;
  transform: translateY(0);
}

.color-circle-animated-1 {
  animation-delay: 0s;
}

.color-circle-animated-2 {
  animation-delay: 0.25s;
}

.color-circle-animated-3 {
  animation-delay: 0.5s;
}

@media (prefers-reduced-motion: reduce) {
  .color-circle-animated-1,
  .color-circle-animated-2,
  .color-circle-animated-3 {
    animation: none !important;
    transform: none !important;
  }
}

/* Colors hub card — two-colour variant (exactly two of cardColorSwatch1–3 filled).
   Markup: site/snippets/card-preview-colors-swatches.php */
.color-circle--duo {
  --vb-duo-size: 82px;
  --vb-wave-y: -8px;
  width: var(--vb-duo-size);
  height: var(--vb-duo-size);
  min-width: var(--vb-duo-size);
  min-height: var(--vb-duo-size);
}

@media (max-width: 991.98px) {
  .color-circle--duo {
    --vb-duo-size: 70px;
  }
}

@media (max-width: 767.98px) {
  .color-circle--duo {
    --vb-duo-size: 64px;
  }
}

@media (max-width: 575.98px) {
  .color-circle--duo {
    --vb-duo-size: 58px;
  }
}

@media (max-width: 400px) {
  .color-circle--duo {
    --vb-duo-size: 52px;
  }
}

/* Two circles on a wave — wider phase offset so the pair reads as a see-saw */
.color-circles-duo .color-circle-animated-2 {
  animation-delay: 0.45s;
}

/* Two morphing circles — "castling": the pair sits side by side (not touching) and
   swaps places along one line; while crossing, the overlap multiplies (same blend as
   the 3-colour Lottie). `isolation` keeps the multiply dot-on-dot only, so the card
   background is never tinted. */
.color-circles-morph-duo {
  --vb-duo-gap: clamp(10px, 2.4vw, 18px);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--vb-duo-gap);
  isolation: isolate;
}

.color-circles-morph-duo__dot {
  border-radius: 50%;
  mix-blend-mode: multiply;
  animation: vbDuoCastle 5.6s cubic-bezier(0.65, 0, 0.35, 1) infinite;
  will-change: transform;
}

.color-circles-morph-duo__dot + .color-circles-morph-duo__dot {
  --vb-duo-dir: -1;
}

@keyframes vbDuoCastle {
  0%,
  12% {
    transform: translateX(0);
  }
  50%,
  62% {
    transform: translateX(calc((var(--vb-duo-size) + var(--vb-duo-gap)) * var(--vb-duo-dir, 1)));
  }
  100% {
    transform: translateX(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .color-circles-morph-duo__dot {
    animation: none !important;
    transform: none !important;
  }
}

/* INDICATOR ICONS
   Consolidated indicator styles - all indicators share base styles
   Individual icons are targeted via attribute selector [class^="ri-"]
   ========================================================================== */

/* Base indicator container - shared positioning */
.lock-indicator,
.lock-image-indicator,
.portal-indicator,
.multibrand-indicator,
.external-link-indicator,
.portal-external-link-indicator {
  top: 0;
  right: 0;
  color: var(--indicator-color);
  z-index: 10;
}

/* Base indicator icon - shared icon styles */
.lock-indicator [class^="ri-"],
.lock-image-indicator [class^="ri-"],
.portal-indicator [class^="ri-"],
.portal-indicator svg.vb-portal-hub-icon,
.multibrand-indicator [class^="ri-"],
.external-link-indicator [class^="ri-"],
.portal-external-link-indicator [class^="ri-"] {
  font-size: 15px;
  color: inherit;
  position: absolute;
  top: 12px;
  right: 12px;
  background: var(--bg-indicator);
  padding: 0.6em;
  border-radius: 50%;
  border: 1px solid var(--border-color);
  width: 28px;
  height: 28px;
  display: flex;
  justify-content: center;
  align-items: center;
  box-sizing: border-box;
  line-height: 1;
}

/* Ikonka na coveru hlavní karty, na obrázku karty v sekcích Karty
   a Karty s obrázkem a na pozadí karty loga: polarita podle toho, co leží
   pod ikonkou (site/helpers/card-cover-indicator.php). Světlý roh = světlé sklo
   a černá ikona (vb-ind-light), tmavý roh = tmavé sklo a bílá ikona
   (vb-ind-dark). Obě ikony s krytím 70 %. Neznámý cover (Lottie, SVG,
   placeholder) = tmavá varianta.
   Hrana skla: výplň končí 1 px před okrajem, takže v proužku prosvítá
   cover. U tmavého skla s 16% bílým nádechem (hrana je vidět i na černé),
   u světlého ztmavený. Okraj tak má vždy jemně odstín karty pod sebou
   (bílý/černý okraj se s barevnými kartami bil, silná sytost dělala
   z červené růžovou). Tmavé sklo je #2c2c2c, ne černé, aby kolečko
   nezmizelo na tmavém coveru.
   Rešerše: docs/card-indicator-research/ (strategie E). Textové karty
   bez coveru beze změny. */
.is-on-cover [class^="ri-"] {
  color: rgba(255, 255, 255, 0.7);
  border: 0;
  background: radial-gradient(closest-side, rgba(44, 44, 44, 0.52) calc(100% - 1px), rgba(255, 255, 255, 0.16) calc(100% - 0.5px));
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
  backdrop-filter: blur(10px) saturate(1.2);
}
.is-on-cover.vb-ind-light [class^="ri-"] {
  color: rgba(0, 0, 0, 0.7);
  background: radial-gradient(closest-side, rgba(255, 255, 255, 0.6) calc(100% - 1px), transparent calc(100% - 0.5px));
  -webkit-backdrop-filter: blur(10px) saturate(1.6) brightness(0.9);
  backdrop-filter: blur(10px) saturate(1.6) brightness(0.9);
}
/* Glyf zámku má těžiště dole (oblouk nahoře je lehký) — opticky vycentrovat. */
.is-on-cover .ri-lock-line::before {
  display: inline-block;
  transform: translateY(-1px);
}

/* Modifier: portal-external-link has slightly different positioning */
.portal-external-link-indicator [class^="ri-"] {
  top: 13px;
  right: 13px;
}

/* ==========================================================================
   11. UTILITIES
   ========================================================================== */

/* Logo sizing utilities (.logo-size-5 to .logo-size-100) */
.logo-size-100 .logo-size { width: 100%; }
.logo-size-95 .logo-size { width: 95%; }
.logo-size-90 .logo-size { width: 90%; }
.logo-size-85 .logo-size { width: 85%; }
.logo-size-80 .logo-size { width: 80%; }
.logo-size-75 .logo-size { width: 75%; }
.logo-size-70 .logo-size { width: 70%; }
.logo-size-65 .logo-size { width: 65%; }
.logo-size-60 .logo-size { width: 60%; }
.logo-size-55 .logo-size { width: 55%; }
.logo-size-50 .logo-size { width: 50%; }
.logo-size-45 .logo-size { width: 45%; }
.logo-size-40 .logo-size { width: 40%; }
.logo-size-35 .logo-size { width: 35%; }
.logo-size-30 .logo-size { width: 30%; }
.logo-size-25 .logo-size { width: 25%; }
.logo-size-20 .logo-size { width: 20%; }
.logo-size-15 .logo-size { width: 15%; }
.logo-size-10 .logo-size { width: 10%; }
.logo-size-5 .logo-size { width: 5%; }

/* Position utilities */
.position-relative {
  position: relative;
}

.position-absolute {
  position: absolute;
}

/* Background utilities */
.bg-light {
  background-color: var(--bg-subtle) !important;
}

/* Tisk: Bootstrap print `.table td, .table th { background-color: #fff !important }` přebíjel
   .bg-light vyšší specificitou. Print pravidla jsou od plánu 82 ve vrstvě vb.base (vb/base.css)
   bez !important a legacy !important nepřebijí, proto tahle výjimka zůstává u .bg-light. */
@media print {
  .table td.bg-light,
  .table th.bg-light {
    background-color: #fff !important;
  }
}

/* Border utilities (consolidated .border and .border-table) */
.border,
.border-table {
  border: 1px solid var(--border-color) !important;
}

.border-left { border-left: 1px solid var(--border-color) !important; }
.border-right { border-right: 1px solid var(--border-color) !important; }
.border-bottom { border-bottom: 1px solid var(--border-color) !important; }
.border-top { border-top: 1px solid var(--border-color) !important; }

.border-bottom-table { border-bottom: 1px solid var(--border-color-light) !important; }
.border-light { border: 1px solid var(--border-color-light) !important; }

.border-no-top {
  border-left: 1px solid var(--border-color) !important;
  border-right: 1px solid var(--border-color) !important;
  border-bottom: 1px solid var(--border-color) !important;
}

/* Shadow utilities */
.shadow-on-hover:hover {
  box-shadow: var(--shadow-hover) !important;
}

/* Radius utilities */
.radius {
  border-radius: var(--border-radius-card) !important;
}

.radius-button {
  border-radius: var(--border-radius-button) !important;
}

.radius-top-left {
  border-top-left-radius: var(--border-radius-card) !important;
}

.radius-top-right {
  border-top-right-radius: var(--border-radius-card) !important;
}

.radius-top {
  border-top-left-radius: var(--border-radius-card) !important;
  border-top-right-radius: var(--border-radius-card) !important;
}

.radius-right {
  border-top-right-radius: var(--border-radius-card) !important;
  border-bottom-right-radius: var(--border-radius-card) !important;
}

.radius-bottom {
  border-bottom-right-radius: var(--border-radius-card) !important;
  border-bottom-left-radius: var(--border-radius-card) !important;
}

.swatch-group {
  border-radius: var(--border-radius-card);
  overflow: hidden;
}
.swatch-group > div, .swatch-group > div * {
  border-radius: 0 !important;
}

/* Text color utilities */
.text-primary {
  color: var(--link-color) !important;
}

.text-danger-color {
  color: var(--danger-color) !important;
}

.text-danger-color strong {
  color: var(--danger-color) !important;
}

.text-success-color {
  color: var(--success-color) !important;
}

.text-success-color strong {
  color: var(--success-color) !important;
}

/* Transition utility */
.transition-all {
  transition: all var(--transition-fast);
}

.rotate {
  transform: rotate(180deg);
  transition: transform 0.3s ease-in-out;
}

.zoom:hover {
  transform: scale(1.016);
}

/* Blur effect */
.blur {
  background-color: var(--card-bottom-bg-color);
  position: relative;
  overflow: hidden;
}

.blur::before {
  background-color: var(--card-bottom-bg-color);
  position: absolute;
  content: '';
  filter: blur(50px);
  inset: 3%;
  z-index: -1;
}

/* Stretched link */
.stretched-link::after {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  content: "";
  z-index: 1;
}

/* Alerts and badges */
.alert {
  border-radius: var(--border-radius-card);
  font-family: var(--font-family-body) !important;
  /* Dole mezeru dělá margin odstavce (1rem), nahoře stejně (Bootstrap má 0.75rem) */
  padding-top: 1rem;
  padding-bottom: 0rem;
  margin-bottom: var(--spacing-card-mobile);
}

.alert-info {
  color: var(--info-box-text-color) !important;
  background-color: var(--info-box-bg-color) !important;
  border-radius: var(--border-radius-card) !important;
  border-color: var(--info-box-bg-color) !important;
  font-family: var(--font-family-body) !important;
}
/* Consolidated alert-info text color (was 3 separate rules) */
.alert-info a,
.alert-info .alert-link,
.alert-info-link,
.alert-info h1,
.alert-info h2,
.alert-info h3,
.alert-info h4,
.alert-info h5,
.alert-info h6,
.alert-info ul,
.alert-info ol,
.alert-info li {
  color: var(--info-box-text-color) !important;
}
.alert-info a,
.alert-info-link {
  text-decoration: underline;
}

/* Popisek pod nadpisem (Kirby textarea): odkaz bez podtržení, podtržení při hoveru */
.vb-kt-inline--caption a[href] {
  text-decoration: none !important;
}
.vb-kt-inline--caption a[href]:hover {
  text-decoration: underline !important;
}

/* Odkazy v barvách / ratio popiscích – stále podtržené */
[data-editable="mainColorsDescription"] a,
[data-editable="colorRatioDescription"] a {
  text-decoration: underline;
}

/* Consolidated hover underline */
.alert-info a:hover,
.alert-info-link:hover,
[data-editable="mainColorsDescription"] a:hover,
[data-editable="colorRatioDescription"] a:hover,
.recent-updates-card a:hover {
  text-decoration: underline !important;
}

/* Recent updates card links — always underlined (must not override .alert-info a) */
.recent-updates-card a,
.recent-updates-card li a {
  text-decoration: underline;
}

.alert-danger {
  background-color: var(--border-color);
  border: none;
  color: var(--text-dark);
  border-radius: 4px;
  font-size: 14px !important;
  padding-bottom: 10px;
}

.badge {
  border-radius: var(--border-radius-badge);
  font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' !important;
  padding-left: 0.8em;
  padding-right: 0.8em;
  transition: none;
  cursor: help;
}

.badge-info {
  color: var(--info-badge-text-color);
  background-color: var(--info-badge-bg-color);
  margin-right: 0.5rem;
  font-weight: 600;
}

.badge-danger {
  color: var(--color-white);
  background-color: var(--danger-color);
}

.badge-success {
  color: var(--color-white);
  background-color: var(--success-color);
}

.badge-large {
  font-size: 1.2rem;
}

/* Rules styling (allowed/forbidden) */
.allowed-rules {
  padding: var(--spacing-card-mobile);
  border-left: 3px solid var(--success-color);
  border-top: solid 1px var(--border-color);
  border-bottom: solid 1px var(--border-color);
  border-right: solid 1px var(--border-color);
}
.allowed-rules code {
  color: var(--success-color) !important;
}

.forbidden-rules {
  padding: var(--spacing-card-mobile);
  border-left: 3px solid var(--danger-color);
  border-top: solid 1px var(--border-color);
  border-bottom: solid 1px var(--border-color);
  border-right: solid 1px var(--border-color);
}
.forbidden-rules code {
  color: var(--danger-color);
}

#accordion-certificate .allowed-rules {
  background-color: var(--bg-subtle);
}

/* Logo rule icons */
.icon-allowed {
  position: absolute;
  top: 23px;
  left: 25px;
  transform: translate(-50%, -50%);
  font-size: 1.5em;
  color: var(--icon-allowed-color);
  z-index: 20;
}

.icon-yes {
  display: none !important;
}

/* Consolidated logo-rule-settings shared styles (was 11 separate rules with !important) */
.logo-rule-settings[class*="add-icon-yes"] .icon-yes {
  display: block !important;
  position: absolute;
  left: 13px;
  top: 13px;
}

/* Crossed line decorations */
.crossed-line {
  overflow: hidden;
  position: relative;
}
.ratio-4-3 > .crossed-line,
.ratio-1-1 > .crossed-line,
.aspect-ratio-container > .overlay.crossed-line {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
.crossed-line::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 150%;
  height: calc(var(--strikethrough-weight, 1px) * 2);
  background: var(--cross-color);
  transform: translate(-50%, -50%) rotate(var(--cross-angle, -37deg));
  transform-origin: center;
  z-index: 20;
  border-radius: 1px;
}

.crossed-red {
  overflow: hidden;
  position: relative;
}
.crossed-red::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 150%;
  height: calc(var(--strikethrough-weight, 1px) * 2);
  background: rgb(255, 76, 80);
  transform: translate(-50%, -50%) rotate(var(--cross-angle, -37deg));
  transform-origin: center;
  border-radius: 1px;
}

.tba-item {
  overflow: hidden;
  position: relative;
}

/* Contact card email link follows the configured body text size ("Velikost
   textů"). Scoped to the mailto link so the other .tba-item cards are unaffected. */
@media (min-width: 768px) {
  .tba-item a[href^="mailto:"] {
    font-size: calc(var(--base-font-size) * 1);
  }
}

/* Swatch values */
.swatch-value {
  color: var(--gray-80);
  font-weight: 700;
  font-size: 1rem;
  text-transform: uppercase;
}

.hex-value {
  display: inline;
}

.color-value:hover {
  color: var(--gray-100);
}

.color-value {
  font-size: 0.875rem;
}

/* Visualbook description and language switcher */
#visualbook-description {
  color: var(--visualbook-description-color) !important;
  background-color: var(--header-color) !important;
  -webkit-appearance: none !important;
}

/* Keep transparent like other header multibrand controls (never match header bar fill) */
#language-switcher,
#language-switcher:hover,
#language-switcher:focus,
#language-switcher:active,
#language-switcher:not(:disabled):not(.disabled):active:focus,
.show > #language-switcher.dropdown-toggle {
  background-color: transparent !important;
  -webkit-appearance: none !important;
  appearance: none !important;
  padding-top: 11px;
}

/* ---------------------------------------------------------------------------
   Utilities - Responsive (md: 768px)
   --------------------------------------------------------------------------- */

@media (min-width: 768px) {
  .allowed-rules,
  .forbidden-rules {
    padding: var(--spacing-card-desktop);
  }
}

/* ---------------------------------------------------------------------------
   Module: Video – DotLottie (stejné rozvržení jako Panel / visualbook-lottie-file-preview)
   --------------------------------------------------------------------------- */

/* Kontejner pro Lottie (lottie-web může vykreslit SVG nebo canvas) */
.vb-module-video-dotlottie.vb-module-video-lottie-svg {
  position: relative;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: center;
}

.vb-module-video-dotlottie.vb-module-video-lottie-svg > svg {
  width: 100%;
  height: auto;
  max-height: 100%;
  display: block;
}

.vb-module-video-dotlottie.vb-module-video-lottie-svg > canvas {
  width: 100% !important;
  height: 100% !important;
  max-height: 100%;
  display: block;
}

/* ==========================================================================
   13. ANIMATIONS
   ========================================================================== */

/* =====================================================================
   Dynamic CSS - Static blocks (moved from head.php inline styles)
   ===================================================================== */

@media (max-width: 767px) {
    .btn-multibrand span {
        display: none;
    }
}

.dropdown-item.active, .dropdown-item:active {
    color: var(--vb-button-primary-text, #fff) !important;
    background-color: var(--button-primary-color);
}

/* module-text: remove trailing margin from the last block's last element */
.module--module-text .col-md-8 > div > :last-child {
    margin-bottom: 0;
}

/* module-text: heading spacing in tiptap content (match left column title mb-3) */
.module--module-text .col-md-8 :is(h2, h3, h4, h5, h6) {
    margin-bottom: 1rem;
}

/* module-text: headings keep a top gap whenever ANY element precedes them.
   Only the very first item at the module top has no gap (:first-child). */
.module--module-text .col-md-8 > div > :is(h2, h3, h5, h6):not(:first-child) {
    margin-top: 2.5rem;
}

/* module-text: subsequent h4 only (tune margin-top here) */
.module--module-text .col-md-8 > div > h4:not(:first-child) {
    margin-top: 1.5rem;
}

/* module-text: spacing below paragraphs in tiptap content */
.module--module-text .col-md-8 > div p {
    margin-bottom: 1.25rem;
}

/* module-text: while editing, the TipTap editor wraps the content in
   .frontend-editor-tiptap-editor > .ProseMirror. Mirror the direct-child spacing
   rules above onto the editor's children so the layout matches the rendered view. */
.module--module-text .col-md-8 .ProseMirror > :last-child {
    margin-bottom: 0;
}

.module--module-text .col-md-8 .ProseMirror > :is(h2, h3, h5, h6):not(:first-child) {
    margin-top: 2.5rem;
}

.module--module-text .col-md-8 .ProseMirror > h4:not(:first-child) {
    margin-top: 1.5rem;
}

/* Accordion (rozbalovací obsah) content — same heading rhythm as module-text:
   a Podnadpis (H4) gets a top gap when it follows other content, and a
   subsequent Nadpis (H3/H2/H5/H6) a larger one. A heading that is the field's
   FIRST element (:first-child) stays flush — so a Podnadpis-first field keeps
   its current look. Both the rendered view and the live TipTap editor
   (.ProseMirror) are covered so editing matches the result. */
[data-field-name="acordeonTextarea"] > :is(h2, h3, h5, h6):not(:first-child),
[data-field-name="acordeonTextarea"] .ProseMirror > :is(h2, h3, h5, h6):not(:first-child),
.vb-accordion__body[data-field-name="imageTextarea"] > :is(h2, h3, h5, h6):not(:first-child),
.vb-accordion__body[data-field-name="imageTextarea"] .ProseMirror > :is(h2, h3, h5, h6):not(:first-child) {
    margin-top: 2.5rem;
}
[data-field-name="acordeonTextarea"] > h4:not(:first-child),
[data-field-name="acordeonTextarea"] .ProseMirror > h4:not(:first-child),
.vb-accordion__body[data-field-name="imageTextarea"] > h4:not(:first-child),
.vb-accordion__body[data-field-name="imageTextarea"] .ProseMirror > h4:not(:first-child) {
    margin-top: 1.5rem;
}

/* module-text: inline images from tiptap/kirbytext — fit column width */
.module--module-text .col-md-8 figure {
    display: block;
    width: 100%;
    max-width: 100%;
    margin: 2rem 0;
}

.module--module-text .col-md-8 figure img {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    object-fit: contain;
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius-card);
}

.module--module-text .col-md-8 figure figcaption {
    margin-top: 0.35rem;
    text-align: center;
    font-size: 14px;
}

/* module-text: blockquote from tiptap/kirbytext */
.module--module-text .col-md-8 blockquote {
    margin: 2rem 0;
    padding: 20px 20px 20px calc(1rem + 5px);
    border-inline-start: 3px solid var(--button-primary-color);
    background-color: #f2f2f2;
    color: var(--text-color);
    font-style: normal;
}

.module--module-text .col-md-8 blockquote :is(p, li, span, div) {
    font-style: normal;
}

.module--module-text .col-md-8 blockquote > :last-child {
    margin-bottom: 0;
}

/* module-text: code block from tiptap */
.module--module-text .col-md-8 pre {
    background-color: #f2f2f2;
    padding: 20px;
    margin: 2rem 0;
    overflow-x: auto;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    font-size: calc(var(--base-font-size) * 0.9375);
}

/* module-text: inline code from tiptap */
.module--module-text .col-md-8 code {
    color: var(--headings-color);
    background-color: #e1e1e1;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    font-size: calc(var(--base-font-size) * 0.9375);
    padding: 0.25em 0.55em;
    border-radius: 0.25rem;
}

.module--module-text .col-md-8 pre code {
    background-color: transparent;
    padding: 0;
    color: inherit;
    font-size: inherit;
    border-radius: 0;
}

/* module-text: horizontal rule from tiptap */
.module--module-text .col-md-8 hr {
    margin: 2rem 0;
}

/* module-text: bullet/numbered/task list items follow the configured body text
   size ("Velikost textů"), just like paragraphs. In the published view TipTap
   strips the <p> wrapper inside <li>, leaving bare text that would otherwise not
   pick up the `body p` font-size rule and stay at the browser default. */
@media (min-width: 768px) {
    .module--module-text .col-md-8 :is(ul, ol) li {
        font-size: calc(var(--base-font-size) * 1);
    }
}

/* module-text: task list from tiptap JSON */
/*
 * TipTap task lists (checklists) — frontend rendered DOM:
 *   <ul data-type="taskList"><li data-type="taskItem"><input type=checkbox><div>…</div></li>>
 * Applies wherever a full-toolbar tiptap field is rendered (module-text body,
 * accordion content, text under image/table/video…), not just module-text.
 * The Panel / edit-mode editor is styled separately (frontend-editor.css) and its
 * <li> carries no data-type="taskItem", so these read-view rules never touch it.
 */
ul[data-type="taskList"] {
    list-style: none;
    padding-inline-start: 25px;
    margin: 0 0 2rem;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

ul[data-type="taskList"] ul[data-type="taskList"] {
    margin-block-start: 0.35rem;
    margin-bottom: 0;
}

li[data-type="taskItem"] {
    display: flex;
    align-items: baseline;
    gap: calc(0.5rem + 5px);
    list-style: none;
}

li[data-type="taskItem"] > input[type="checkbox"] {
    flex-shrink: 0;
    width: 1rem;
    height: 1rem;
    margin: 0;
    position: relative;
    top: 0.15em;
    accent-color: var(--button-primary-color);
    cursor: pointer;
}

li[data-type="taskItem"] > div {
    flex: 1;
    min-width: 0;
}

li[data-type="taskItem"] > div > p {
    margin: 0;
}

/* ==========================================================================
   MOBILE REFINEMENTS
   Opravy responzivního chování napříč moduly (audit mobilní verze 2026-09).
   ========================================================================== */

/*
 * Řádky s tlačítky pod obrázkem / tabulkou / videem / akordeonem / embedem:
 *   .card-main / .module-card-main (inline height:80px) > .d-inline.text-truncate > h3 + .btn
 * Na úzkém displeji ořezávala jednořádková truncace popisek („Stáhnout druhý moc…“),
 * takže čtenář nevěděl, co tlačítko udělá. Popisek se teď zalomí (max. 3 řádky),
 * řádek naroste a tlačítko drží jeden řádek.
 */
@media (max-width: 767.98px) {
  :is(.card-main, .module-card-main):has(> .d-inline.text-truncate + .btn) {
    height: auto !important;
    min-height: 72px;
    padding-top: 12px !important;
    padding-bottom: 12px !important;
    gap: 12px;
  }

  :is(.card-main, .module-card-main) > .d-inline.text-truncate {
    flex: 1 1 auto;
    min-width: 0;
    margin-right: 0 !important;
    white-space: normal;
    overflow: visible;
  }

  :is(.card-main, .module-card-main) > .d-inline.text-truncate > h3.text-truncate {
    display: -webkit-box !important;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    white-space: normal;
    overflow: hidden;
    line-height: 1.3;
  }

  :is(.card-main, .module-card-main) > .d-inline.text-truncate + .btn {
    flex: 0 0 auto;
    white-space: nowrap;
  }
}

/*
 * Tabulky na mobilu
 * 1) Užší vnitřní padding buněk – tří- a čtyřsloupcové tabulky se vejdou bez posunu
 *    (krajní buňky drží zarovnání s obsahem karet).
 * 2) Když tabulka i tak přeteče, pravý okraj se jemně rozplyne (.vb-scroll-more,
 *    přidává assets/js/table-scroll-hint.js) – jinak nebylo poznat, že jde posunout.
 */
@media (max-width: 575.98px) {
  .table td,
  .table th {
    padding-left: 0.5rem;
    padding-right: 0.5rem;
  }

  .table td:first-child,
  .table th:first-child {
    padding-left: var(--spacing-card-mobile);
  }

  .table td:last-child,
  .table th:last-child {
    padding-right: var(--spacing-card-mobile);
  }
}

.table-responsive,
.table-scroll-container {
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
}

.vb-scroll-more {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 48px), rgba(0, 0, 0, 0.12));
  mask-image: linear-gradient(to right, #000 calc(100% - 48px), rgba(0, 0, 0, 0.12));
}

/*
 * Akordeony: dlouhá otázka se na telefonu lepila přímo na „Zobrazit ↓“
 * („…před tiskem?Zobrazit“). Mezera mezi titulkem a přepínačem + přepínač se nesmršťuje.
 * Web to od plánu 82 F2 řeší vb-accordion__summary (gap), tohle pravidlo zůstává jen pro
 * statické náhledy modulů v Panelu (assets/module-previews/html/*.html).
 */
.card-header.d-inline-flex.justify-content-between {
  gap: 1rem;
}

.card-header.d-inline-flex.justify-content-between > h4 {
  flex-shrink: 0;
}

/*
 * iOS Safari při fokusu přiblíží celou stránku, když má pole písmo < 16 px
 * (šířka loga 15 px, selecty v Ikonách a Papírech 14 px) – po vyplnění zůstane
 * stránka „odzoomovaná“ vedle. Na dotykových zařízeních držíme 16 px.
 */
@media (max-width: 767.98px) and (pointer: coarse) {
  input:is([type="text"], [type="number"], [type="search"], [type="email"], [type="password"], [type="tel"], [type="url"], :not([type])),
  select,
  textarea {
    font-size: 16px !important;
  }
}

/*
 * Hledání: tlačítko „Vyhledat“ s textem sebralo poli třetinu šířky a placeholder
 * („Vyhledávejte v české ver…“) se ořízl. Na telefonu zůstane jen ikona lupy
 * (text dál čte čtečka), pole dostane celou šířku.
 */
.vb-search-form .vb-search-submit-label {
  padding-left: 8px;
}

@media (max-width: 575.98px) {
  .vb-search-form .form-control {
    padding-left: 1rem !important;
    min-width: 0;
  }

  .vb-search-form button[type="submit"] {
    flex: 0 0 48px;
    width: 48px;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  .vb-search-form button[type="submit"] i {
    font-size: 1.15rem;
  }

  .vb-search-form .vb-search-submit-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
}

/* Chráněný odkaz, který teď nejde zašifrovat (plán 77, A5 #22): vypnuté tlačítko bez href */
[data-vb-link-unavailable],
[data-vb-link-unavailable].btn:not(:disabled):not(.disabled) {
  cursor: not-allowed;
  opacity: 0.6;
}

[data-vb-link-unavailable].btn {
  white-space: normal !important;
  text-align: center;
  line-height: 1.25;
}

/* Zdvojený atribut přebije hover pravidla modulů (.download-module-… .btn-outline-primary:hover) */
a[data-vb-link-unavailable][data-vb-link-unavailable].btn:hover,
a[data-vb-link-unavailable][data-vb-link-unavailable].btn:focus,
a[data-vb-link-unavailable][data-vb-link-unavailable].btn:active {
  background-color: transparent !important;
  color: var(--button-primary-color) !important;
  box-shadow: none !important;
  filter: none;
}
/* assets/fonts/remixicon.css */
/*
 * Remix Icon v4.0.0 – Subset (46 icons)
 * https://remixicon.com
 * https://github.com/Remix-Design/RemixIcon — Apache License 2.0
 * Full version backed up as remixicon-full.css.bak
 */
@font-face {
  font-family: "remixicon";
  src: url("../fonts/remixicon.woff2?t=1742563950") format("woff2"),
  url("../fonts/remixicon.woff?t=1742563950") format("woff"),
  url('../fonts/remixicon.ttf?t=1742563950') format('truetype');
  font-display: swap;
}

[class^="ri-"], [class*=" ri-"] {
  font-family: 'remixicon' !important;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.ri-lg { font-size: 1.3333em; line-height: 0.75em; vertical-align: -.0667em; }
.ri-xl { font-size: 1.5em; line-height: 0.6666em; vertical-align: -.075em; }
.ri-xxs { font-size: .5em; }
.ri-xs { font-size: .75em; }
.ri-sm { font-size: .875em }
.ri-1x { font-size: 1em; }
.ri-2x { font-size: 2em; }
.ri-3x { font-size: 3em; }
.ri-4x { font-size: 4em; }
.ri-5x { font-size: 5em; }
.ri-6x { font-size: 6em; }
.ri-7x { font-size: 7em; }
.ri-8x { font-size: 8em; }
.ri-9x { font-size: 9em; }
.ri-10x { font-size: 10em; }
.ri-fw { text-align: center; width: 1.25em; }

.ri-add-line:before { content: "\ea13"; }
.ri-arrow-down-line:before { content: "\ea4c"; }
.ri-arrow-left-line:before { content: "\ea60"; }
.ri-arrow-right-fill:before { content: "\ea6b"; }
.ri-arrow-right-line:before { content: "\ea6c"; }
.ri-arrow-up-line:before { content: "\ea76"; }
.ri-artboard-line:before { content: "\ea7c"; }
.ri-checkbox-circle-fill:before { content: "\eb80"; }
.ri-checkbox-circle-line:before { content: "\eb81"; }
.ri-close-circle-fill:before { content: "\eb96"; }
.ri-close-circle-line:before { content: "\eb97"; }
.ri-computer-fill:before { content: "\ebc9"; }
.ri-computer-line:before { content: "\ebca"; }
.ri-corner-down-right-fill:before { content: "\f308"; }
.ri-download-fill:before { content: "\ec59"; }
.ri-external-link-fill:before { content: "\ecae"; }
.ri-external-link-line:before { content: "\ecaf"; }
.ri-file-copy-line:before { content: "\ecd5"; }
.ri-file-excel-line:before { content: "\ecdf"; }
.ri-file-line:before { content: "\eceb"; }
.ri-file-pdf-line:before { content: "\ecfd"; }
.ri-file-ppt-line:before { content: "\ed01"; }
.ri-file-word-line:before { content: "\ed1d"; }
.ri-file-zip-fill:before { content: "\ed1e"; }
.ri-file-zip-line:before { content: "\ed1f"; }
.ri-font-size:before { content: "\ed8d"; }
.ri-fullscreen-line:before { content: "\ed9c"; }
.ri-function-line:before { content: "\ed9e"; }
.ri-grid-fill:before { content: "\edde"; }
.ri-image-line:before { content: "\ee4b"; }
.ri-information-line:before { content: "\ee59"; }
.ri-link:before { content: "\eeb2"; }
.ri-links-fill:before { content: "\eeb7"; }
.ri-list-unordered:before { content: "\eebe"; }
.ri-loader-4-line:before { content: "\eec6"; }
.ri-lock-line:before { content: "\eece"; }
.ri-lock-unlock-line:before { content: "\eed2"; }
.ri-mail-line:before { content: "\eef6"; }
.ri-moon-fill:before { content: "\ef72"; }
.ri-printer-fill:before { content: "\f028"; }
.ri-printer-line:before { content: "\f029"; }
.ri-search-line:before { content: "\f0d1"; }
.ri-sun-line:before { content: "\f1bf"; }
.ri-table-alt-line:before { content: "\f1dc"; }
.ri-translate:before { content: "\f227"; }
.ri-video-line:before { content: "\f282"; }
}
/* assets/css/vb/tokens.css */
@layer vb.base{
/*
 * Visualbook – systémové tokeny (plán 82, F1)
 *
 * Nové tokeny mají prefix --vb-, výchozí hodnota = dnešní vzhled webu (Bootstrap 4.6.2
 * + assets/css/styles.css). Samy nic nevykreslí: čtou je až komponenty, layout a utility
 * ve vrstvách nad vb.legacy. Tokeny značky (--text-color, --border-radius-card, …) sem
 * nepatří, ty vypisuje visualbook-dynamic-css a jejich názvy se nemění.
 *
 * Před přidáním tokenu zkontroluj registr rezervovaných názvů v assets/css/vb/README.md.
 * Selektor :root, :host – stejné hodnoty dostane i Shadow DOM (náhledy v Panelu).
 * Vrstvu (@layer vb.base) doplní scripts/build-css.php, tady jsou jen holá pravidla.
 */

:root,
:host {
  /* Škála mezer = $spacers Bootstrapu 4 (m-0 … m-5, p-0 … p-5) */
  --vb-space-0: 0;
  --vb-space-1: 0.25rem;
  --vb-space-2: 0.5rem;
  --vb-space-3: 1rem;
  --vb-space-4: 1.5rem;
  --vb-space-5: 3rem;

  /* Kontejner stránky (.container): šířky Bootstrapu 4 při 576/768/992/1200 px okna,
     styles.css je nepřepisuje, mění jen svislé odsazení (ř. 877, 945, 949) */
  --vb-container-max-sm: 540px;
  --vb-container-max-md: 720px;
  --vb-container-max-lg: 960px;
  --vb-container-max-xl: 1140px;
  --vb-container-padding-inline: 15px;
  --vb-container-padding-block-start: 2rem;
  --vb-container-padding-block-start-md: 2.5rem;
  --vb-container-padding-block-end: 1rem;

  /* Mezera mezi sloupci mřížky (.row/.col-*: 2 × 15 px) */
  --vb-grid-gutter: 30px;

  /* Karty: dnešní hlavní karta = .card-main.border.bg-white.radius.shadow-on-hover
     (rámeček styles.css .border, pozadí .bg-white, stín .shadow-on-hover:hover).
     Zaoblení dál z tokenu značky --border-radius-card. Výchozí hodnoty pro témata (F7). */
  --vb-card-border-width: 1px;
  --vb-card-border-style: solid;
  --vb-card-border-color: var(--border-color, #e2e2e2);
  --vb-card-shadow: none;
  --vb-card-shadow-hover: var(--shadow-hover, 0 0.5rem 1rem rgba(0, 0, 0, 0.15));
  --vb-card-surface: #fff;

  /* Bublinová nápověda (components/tooltip.css) = dřívější Bootstrap .tooltip + styles.css.
     Barvy a zaoblení dál z tokenů značky --tooltip-text-color, --tooltip-bg-color,
     --border-radius-tooltip. z-index platí jen bez popover API (jinak horní vrstva),
     nad overlayem modálu ikon (9999). */
  --vb-tooltip-font-size: 12px;
  --vb-tooltip-font-weight: 600;
  --vb-tooltip-line-height: 1.3;
  --vb-tooltip-padding-block: 8px;
  --vb-tooltip-padding-inline: 10px;
  --vb-tooltip-max-width: 200px;
  --vb-tooltip-arrow-width: 0.8rem;
  --vb-tooltip-arrow-height: 0.4rem;
  --vb-tooltip-z: 10000;

  /* Záložky (components/tabs.css): čára pod záložkami karty loga = $nav-tabs-border-color
     Bootstrapu 4, přepínač v modulu poměru barev (dřív module-color-ratio-chart.css).
     --vb-tabs-accent tu záměrně není: výchozí var(--button-primary-color) se musí vyhodnotit
     na prvku, modul poměru barev ho nastavuje na své sekci. */
  --vb-tabs-border-color: #dee2e6;
  --vb-tabs-switch-color: #757575;
  --vb-tabs-switch-border-color: #e0e0e0;

  /* Dialog (components/dialog.css): max. šířka = Bootstrap .modal-dialog, dialog MCP 720px */
  --vb-dialog-max-width: 500px;
}
}
/* assets/css/vb/base.css */
@layer vb.base{
/*
 * Visualbook – základ (vrstva vb.base, plán 82)
 *
 * Reboot Bootstrapu 4 zůstává ve vrstvě vb.legacy (legacy/bootstrap-subset.css) až do F6,
 * kdy ho nahradí vlastní reset se stejným chováním.
 *
 * Vrstvu (@layer vb.base) doplní scripts/build-css.php, tady jen holá pravidla. Bez important deklarací.
 */

/*
 * Tisk (plán 82, F2 bod 5): print pravidla Bootstrapu 4.6.2 v rozsahu, v jakém je měl subset
 * (bez thead), převzatá z legacy/bootstrap-subset.css. Zavřené <details class="vb-accordion">
 * otevře před tiskem assets/js/vb/accordion.js.
 *
 * Výsledek tisku je stejný jako dřív, ale vrstva vb.base se chová jinak než pravidla v legacy:
 * - přebije každé legacy pravidlo bez !important bez ohledu na specificitu. Kde dřív legacy
 *   pravidlo s vyšší specificitou vyhrálo, je tu výjimka (podtržení odkazů níže);
 * - prohraje s každým legacy !important, s atributem style="" a s vyššími vrstvami. Bootstrap
 *   tu měl !important: tabulkové buňky .bg-light proto řeší výjimka ve styles.css a stín
 *   dialogu dialog.css (komponenta se stínem si ho v tisku vypne sama).
 */
@media print {
  *,
  ::after,
  ::before {
    text-shadow: none;
    box-shadow: none;
  }

  /* Bootstrap a:not(.btn). Výjimky = legacy pravidla, která podtržení v tisku přebila vyšší
     specificitou: odkaz bez href a třídy (reboot), aktivní položka nabídky (.dropdown-item.active),
     výsledky hledání (a.d-block jen na stránce hledání, search.php), sourozenci loga (logo.php) a nápověda
     chráněného odkazu (.ll-help, statický export). */
  a:not(.btn, [data-template="search"] .d-block, .dropdown-item.active, .logo-page-sibling-list a, .ll-help a, :not([href]):not([class])) {
    text-decoration: underline;
  }

  abbr[title]::after {
    content: " (" attr(title) ")";
  }

  pre {
    white-space: pre-wrap;
  }

  blockquote,
  pre {
    border: 1px solid #adb5bd;
    break-inside: avoid;
  }

  img,
  tr {
    break-inside: avoid;
  }

  h2,
  h3,
  p {
    orphans: 3;
    widows: 3;
  }

  h2,
  h3 {
    break-after: avoid;
  }

  @page {
    size: a3;
  }

  body {
    min-width: 992px;
  }

  .container {
    min-width: 992px;
  }

  .navbar {
    display: none;
  }

  .badge {
    border: 1px solid #000;
  }

  .table {
    border-collapse: collapse;
  }

  .table td,
  .table th {
    background-color: #fff;
  }

  .table-bordered td,
  .table-bordered th {
    border: 1px solid #dee2e6;
  }

  .table-dark {
    color: inherit;
  }

  .table-dark tbody + tbody,
  .table-dark td,
  .table-dark th,
  .table-dark thead th {
    border-color: #dee2e6;
  }

  .table .thead-dark th {
    color: inherit;
    border-color: #dee2e6;
  }
}
}
/* assets/css/vb/layout.css */
@layer vb.layout{
/*
 * Visualbook – layout (vrstva vb.layout, plán 82)
 *
 * Zatím prázdné. V F3 sem přijdou vb-container (šířky z --vb-container-max-*), vb-grid,
 * vb-stack (svislé mezery) a vb-cluster (řádek, výchozí bez zalomení jako d-flex).
 * Breakpointy podle šířky okna 1:1 s Bootstrapem 4 (576/768/992/1200 px), container
 * queries jen jako vědomá změna (otázka 6 plánu).
 *
 * Vrstvu (@layer vb.layout) doplní scripts/build-css.php, tady jen holá pravidla. Bez important deklarací.
 */
}
/* assets/css/vb/components/accordion.css */
@layer vb.components{
/*
 * Visualbook – akordeon na <details>/<summary> (plán 82, F2, pilot = modul akordeon)
 *
 * Funguje bez JavaScriptu (statický export z disku, vypnutý JS): otevírání, text
 * Zobrazit/Skrýt i šipka jdou čistě přes details[open]. Exkluzivitu („otevřená je
 * nejvýš jedna položka“) dělá atribut name na <details> (Chrome 120, Safari 17.2,
 * Firefox 130; starší prohlížeč nechá otevřít víc položek). JS assets/js/vb/accordion.js
 * jen před tiskem otevře všechny položky a po tisku vrátí stav.
 *
 * Markup (vnější .card s třídou zaoblení zůstává, karty jsou samostatná komponenta):
 *
 *   <div class="card radius-top">
 *     <details class="vb-accordion" name="<skupina>">
 *       <summary class="vb-accordion__summary">
 *         <h3 class="vb-accordion__title vb-h5">Titulek</h3>
 *         <span class="vb-accordion__toggle vb-h6" aria-hidden="true">
 *           <span class="vb-accordion__label">
 *             <span class="vb-accordion__show">Zobrazit</span><span class="vb-accordion__hide">Skrýt</span>
 *           </span>
 *           <i class="vb-accordion__icon ri-arrow-down-line"></i>
 *         </span>
 *       </summary>
 *       <div class="vb-accordion__panel">
 *         <div class="vb-accordion__body">Obsah</div>
 *       </div>
 *     </details>
 *   </div>
 *
 * Zaoblení hlavičky a spodku obsahu se řídí třídou zaoblení karty (radius-top,
 * radius-bottom), píše se jen na .card. Dědit ho nejde: <summary> i obsah jsou
 * ve stínovém stromu <details> vložené do slotů, které border-radius nedědí.
 * Vzhled = dnešní Bootstrap .card-header + py-4 + border-bottom, mezera 1rem mezi
 * titulkem a přepínačem (styles.css „Akordeony“) a .collapse.px-2 > .card-body.mt-3
 * (styles.css .card-header, .card-body img).
 *
 * Vrstvu (@layer vb.components) doplní scripts/build-css.php. Bez important deklarací.
 */

:root,
:host {
  /* Hlavička položky (dnes styles.css .card-header: --gray-00, po najetí --gray-10) */
  --vb-accordion-summary-surface: var(--gray-00, #fbfbfb);
  --vb-accordion-summary-surface-hover: var(--gray-10, #f4f4f4);
  /* Rozbalený obsah (dnes .collapse.px-2 > .card-body.mt-3, průhledné na bílé kartě) */
  --vb-accordion-panel-surface: transparent;
  /* Odsazení obsahu pod hlavičkou: hlavička má margin-bottom -2px, obsah ho vrací */
  --vb-accordion-panel-offset: 0;
  --vb-accordion-duration: 0.35s;
}

/* Samostatný modul akordeon: vlastní odstín hlavičky a bílý obsah odsazený o 2 px
   (dřív inline <style> v modulu a třída .accordion-bg) */
.vb-accordion--standalone {
  --vb-accordion-summary-surface: #fafafa;
  --vb-accordion-summary-surface-hover: #f2f2f2;
  --vb-accordion-panel-surface: var(--vb-card-surface, #fff);
  --vb-accordion-panel-offset: 2px;
}

.vb-accordion__summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--vb-space-3);
  list-style: none;
  cursor: pointer;
  margin-block-end: -2px;
  padding-block: var(--vb-space-4);
  padding-inline: var(--spacing-card-mobile);
  border-block-end: 1px solid var(--border-color);
  /* = Bootstrap .card-header:first-child (karta bez třídy zaoblení) */
  border-start-start-radius: calc(0.25rem - 1px);
  border-start-end-radius: calc(0.25rem - 1px);
  background-color: var(--vb-accordion-summary-surface);
  vertical-align: middle;
}

.radius > .vb-accordion > .vb-accordion__summary,
.radius-top > .vb-accordion > .vb-accordion__summary {
  border-start-start-radius: var(--border-radius-card);
  border-start-end-radius: var(--border-radius-card);
}

.radius > .vb-accordion > .vb-accordion__summary,
.radius > .vb-accordion > .vb-accordion__panel,
.radius-bottom > .vb-accordion > .vb-accordion__summary,
.radius-bottom > .vb-accordion > .vb-accordion__panel {
  border-end-start-radius: var(--border-radius-card);
  border-end-end-radius: var(--border-radius-card);
}

.vb-accordion__summary::-webkit-details-marker {
  display: none;
}

.vb-accordion__summary:hover {
  background-color: var(--vb-accordion-summary-surface-hover);
}

.vb-accordion__summary:focus-visible {
  outline: 2px solid var(--button-primary-color);
  outline-offset: -2px;
}

.vb-accordion__title {
  margin: 0;
}

.vb-accordion__toggle {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  color: var(--button-primary-color);
  line-height: var(--body-line-height, 1.5);
  text-align: right;
}

.vb-accordion__label {
  font-size: 0.875rem;
  line-height: var(--body-line-height, 1.5);
}

.vb-accordion__hide,
.vb-accordion[open] > .vb-accordion__summary .vb-accordion__show {
  display: none;
}

.vb-accordion[open] > .vb-accordion__summary .vb-accordion__hide {
  display: inline;
}

/* Šipka se otáčí (dřív výměna ikony za ri-arrow-up-line) a nesmí poskočit: mezera od
   textu je margin, ne padding, takže box = jen glyf a otáčí se kolem jeho středu.
   Výška řádku zůstává zděděná (body line-height): střed boxu je i tak střed glyfu
   (polovina prokladu nahoře i dole) a box sedí na pixel jako dřív. S line-height: 1
   by se glyf posunul o zlomek pixelu a změnil se antialiasing. */
.vb-accordion__icon {
  display: inline-block;
  margin-inline-start: 5px;
  transform-origin: 50% 50%;
  transition: transform var(--vb-accordion-duration) ease;
}

.vb-accordion[open] > .vb-accordion__summary .vb-accordion__icon {
  transform: rotate(180deg);
}

/* flow-root drží horní okraj obsahu uvnitř: jinak by přetekl mimo animovanou výšku
   ::details-content a na konci zavírání by výška naráz skočila o 16 px. */
.vb-accordion__panel {
  display: flow-root;
  margin-block-start: var(--vb-accordion-panel-offset);
  padding-inline: var(--vb-space-2);
  background-color: var(--vb-accordion-panel-surface);
}

.vb-accordion__body {
  margin-block-start: var(--vb-space-3);
  padding: 1.25rem;
  background-color: var(--vb-accordion-panel-surface);
}

.vb-accordion__body img {
  width: 100%;
  height: auto;
}

/* Obsah přes celou šířku karty (náhled kódu v modulu e-mailový podpis): bez odsazení,
   nahoře oddělovací čára, pozadí z --vb-accordion-panel-surface a zaoblení spodku
   z panelu (= z třídy zaoblení karty). Dřív .collapse > .card-body.border-top.p-0. */
.vb-accordion__panel--flush {
  padding-inline: 0;
}

.vb-accordion__panel--flush > .vb-accordion__body {
  margin-block-start: 0;
  padding: 0;
  border-block-start: 1px solid var(--border-color);
  border-radius: inherit;
}

/* Frontend editor: v režimu úprav se položka nepřepíná (otevřené drží frontend-editor.js) */
.frontend-editor-module.editing .vb-accordion__summary {
  cursor: default;
}

@media (min-width: 768px) {
  .vb-accordion__summary {
    padding-inline: var(--spacing-card-desktop);
  }
}

/* Plynulé otevírání a zavírání (dnes Chrome/Edge; Safari a Firefox otevřou okamžitě) */
@supports (interpolate-size: allow-keywords) {
  .vb-accordion {
    interpolate-size: allow-keywords;
  }

  /* flow-root = vlastní blokový kontext (overflow: clip ho nezakládá): odsazení obsahu
     (margin panelu) zůstane uvnitř animované výšky, jinak by na konci zavírání skočilo o 2 px.
     Ne overflow: hidden (posuvný kontejner, lepkavé lišty editoru by nedržely) ani
     contain: paint (Chromium pak jinak vykreslí řádek textu). */
  .vb-accordion::details-content {
    height: 0;
    overflow: clip;
    display: flow-root;
    transition: height var(--vb-accordion-duration) ease, content-visibility var(--vb-accordion-duration) allow-discrete;
  }

  .vb-accordion[open]::details-content {
    height: auto;
  }
}

/* Bez animace při omezeném pohybu a v tisku. ::details-content zvlášť a jen s @supports:
   prohlížeč, který ten pseudoprvek nezná (Firefox, Safari), by zahodil celé pravidlo
   i se šipkou. */
@media (prefers-reduced-motion: reduce) {
  .vb-accordion__icon {
    transition: none;
  }
}

@media print {
  .vb-accordion__icon {
    transition: none;
  }
}

@supports (interpolate-size: allow-keywords) {
  @media (prefers-reduced-motion: reduce) {
    .vb-accordion::details-content {
      transition: none;
    }
  }

  @media print {
    .vb-accordion::details-content {
      transition: none;
    }
  }
}
}
/* assets/css/vb/components/carousel.css */
@layer vb.components{
/*
 * Karusel (plán 82, F2): náhrada karuselu Bootstrapu 4.6.2, chování v assets/js/vb/carousel.js.
 *
 * Kostra:
 *   <div class="vb-carousel [vb-carousel--fade] [vb-carousel--fill] [vb-carousel--dark-controls]"
 *        data-vb-carousel data-vb-interval="3500" [data-vb-pause="false"] [data-vb-wrap="false"]>
 *     <div class="vb-carousel__indicators">
 *       <button type="button" class="vb-carousel__indicator" data-vb-slide-to="0" aria-current="true" aria-label="…">
 *     </div>
 *     <div class="vb-carousel__inner">
 *       <div class="vb-carousel__item vb-carousel__item--active">…</div>
 *       <div class="vb-carousel__item">…</div>
 *     </div>
 *     <button type="button" class="vb-carousel__control vb-carousel__control--prev" data-vb-slide="prev" aria-label="…">
 *     <button type="button" class="vb-carousel__control vb-carousel__control--next" data-vb-slide="next" aria-label="…">
 *   </div>
 *
 * Stavy snímku nastavuje JS: --active (viditelný), --next/--prev (přijíždějící), --left/--right
 * (směr pohybu během přechodu). Rozměry a časování = Bootstrap 4.6.2, takže vzhled se nemění.
 *
 * Tokeny (výchozí hodnoty tady, modul je přepisuje atributem style na kořeni):
 *   --vb-carousel-duration                 délka přechodu (JS ji čte z vypočteného stylu)
 *   --vb-carousel-control-bg               kolečko šipky (výchozí = barva hlavních tlačítek)
 *   --vb-carousel-indicator-color          proužek indikátoru
 *   --vb-carousel-indicator-opacity        neaktivní indikátor
 *   --vb-carousel-indicator-opacity-active aktivní indikátor
 */

.vb-carousel {
  --vb-carousel-duration: 0.6s;
  --vb-carousel-control-bg: var(--button-primary-color, #fe1a3f);
  --vb-carousel-indicator-color: #fff;
  --vb-carousel-indicator-opacity: 0.5;
  --vb-carousel-indicator-opacity-active: 1;
  position: relative;
  /* Vodorovné tažení prstem obsluhuje JS (swipe), svislé posouvání stránky zůstává prohlížeči. */
  touch-action: pan-y;
}

.vb-carousel__inner {
  position: relative;
  width: 100%;
  overflow: hidden;
}

.vb-carousel__inner::after {
  display: block;
  clear: both;
  content: "";
}

/* Snímky leží vedle sebe přes sebe (float + záporný okraj) a výšku určuje viditelný snímek. */
.vb-carousel__item {
  position: relative;
  display: none;
  float: left;
  width: 100%;
  margin-right: -100%;
  backface-visibility: hidden;
  transition: transform var(--vb-carousel-duration) ease-in-out;
}

.vb-carousel__item--active,
.vb-carousel__item--next,
.vb-carousel__item--prev {
  display: block;
}

.vb-carousel__item--active.vb-carousel__item--right,
.vb-carousel__item--next:not(.vb-carousel__item--left) {
  transform: translateX(100%);
}

.vb-carousel__item--active.vb-carousel__item--left,
.vb-carousel__item--prev:not(.vb-carousel__item--right) {
  transform: translateX(-100%);
}

/* Prolínání: všechny snímky jsou vykreslené (obrázky se načtou dřív, než na ně dojde),
   neaktivní leží průhledné nad sebou, výšku určuje aktivní. */
.vb-carousel--fade .vb-carousel__inner {
  position: relative;
}

.vb-carousel--fade .vb-carousel__item {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  opacity: 0;
  transition-property: opacity;
  transform: none;
}

.vb-carousel--fade .vb-carousel__item--active {
  position: relative;
}

.vb-carousel--fade .vb-carousel__item--active,
.vb-carousel--fade .vb-carousel__item--next.vb-carousel__item--left,
.vb-carousel--fade .vb-carousel__item--prev.vb-carousel__item--right {
  z-index: 1;
  opacity: 1;
}

.vb-carousel--fade .vb-carousel__item--active.vb-carousel__item--left,
.vb-carousel--fade .vb-carousel__item--active.vb-carousel__item--right {
  z-index: 0;
  opacity: 0;
  transition: opacity 0s var(--vb-carousel-duration);
}

/* Karta na úvodní stránce: snímek vyplní výšku karty. */
.vb-carousel--fill .vb-carousel__inner,
.vb-carousel--fill .vb-carousel__item {
  height: 100%;
}

/* Šipky: tlačítko 50 × 50 px, kolečko 32 px v barvě --vb-carousel-control-bg, šipka 22 px. */
.vb-carousel__control {
  position: absolute;
  top: 50%;
  z-index: 10;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 50px;
  height: 50px;
  padding: 0;
  margin: 0;
  color: #fff;
  text-align: center;
  cursor: pointer;
  background: none;
  border: 0;
  border-radius: 0;
  opacity: 1;
  transform: translateY(-50%);
  appearance: none;
}

.vb-carousel__control--prev {
  left: 5px;
}

.vb-carousel__control--next {
  right: 5px;
}

.vb-carousel__control::after {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 32px;
  height: 32px;
  content: "";
  cursor: pointer;
  background-color: var(--vb-carousel-control-bg);
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

.vb-carousel__control::before {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 1;
  width: 22px;
  height: 22px;
  content: "";
  background-repeat: no-repeat;
  background-size: cover;
  transform: translate(-50%, -50%);
}

.vb-carousel__control--prev::before {
  margin-left: -1px;
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22white%22%3E%3Cpath%20d%3D%22M10.8284%2012.0007L15.7782%2016.9504L14.364%2018.3646L8%2012.0007L14.364%205.63672L15.7782%207.05093L10.8284%2012.0007Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
}

.vb-carousel__control--next::before {
  margin-left: 1px;
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22white%22%3E%3Cpath%20d%3D%22M13.1717%2012.0007L8.22192%207.05093L9.63614%205.63672L16.0001%2012.0007L9.63614%2018.3646L8.22192%2016.9504L13.1717%2012.0007Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
}

/* Světlé kolečko (jas barvy nad 0,45): tmavá šipka. */
.vb-carousel--dark-controls .vb-carousel__control--prev::before {
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22black%22%3E%3Cpath%20d%3D%22M10.8284%2012.0007L15.7782%2016.9504L14.364%2018.3646L8%2012.0007L14.364%205.63672L15.7782%207.05093L10.8284%2012.0007Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
}

.vb-carousel--dark-controls .vb-carousel__control--next::before {
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22black%22%3E%3Cpath%20d%3D%22M13.1717%2012.0007L8.22192%207.05093L9.63614%205.63672L16.0001%2012.0007L9.63614%2018.3646L8.22192%2016.9504L13.1717%2012.0007Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");
}

.vb-carousel__control:focus {
  outline: 0;
}

.vb-carousel__control:focus-visible::after {
  outline: 2px solid var(--vb-carousel-control-bg);
  outline-offset: 2px;
}

/* Indikátory: proužek 30 × 3 px, klikací plocha zvětšená průhledným rámečkem 10 px nahoře a dole. */
.vb-carousel__indicators {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 15;
  display: flex;
  justify-content: center;
  padding: 0;
  margin: 0 15% 1rem;
}

.vb-carousel__indicator {
  box-sizing: content-box;
  flex: 0 1 auto;
  width: 30px;
  height: 3px;
  padding: 0;
  margin: 0 3px;
  cursor: pointer;
  background-color: var(--vb-carousel-indicator-color);
  background-clip: padding-box;
  border: 0;
  border-top: 10px solid transparent;
  border-bottom: 10px solid transparent;
  border-radius: 0;
  opacity: var(--vb-carousel-indicator-opacity);
  transition: opacity var(--vb-carousel-duration) ease;
  appearance: none;
}

.vb-carousel__indicator[aria-current="true"] {
  opacity: var(--vb-carousel-indicator-opacity-active);
}

.vb-carousel__indicator:focus {
  outline: 0;
}

.vb-carousel__indicator:focus-visible {
  outline: 2px solid var(--vb-carousel-indicator-color);
  outline-offset: -8px;
  opacity: var(--vb-carousel-indicator-opacity-active);
}

/* Omezený pohyb: snímky se přepínají bez animace (automatický posun vypíná JS). */
@media (prefers-reduced-motion: reduce) {
  .vb-carousel__item,
  .vb-carousel--fade .vb-carousel__item--active.vb-carousel__item--left,
  .vb-carousel--fade .vb-carousel__item--active.vb-carousel__item--right,
  .vb-carousel__indicator {
    transition: none;
  }
}
}
/* assets/css/vb/components/dialog.css */
@layer vb.components{
/*
 * Modální dialog (plán 82, F2) – chování v assets/js/vb/dialog.js (window.vbDialog,
 * události vb:dialog-shown / vb:dialog-hidden). Nahrazuje Bootstrap .modal; vzhled převzatý
 * z dialogu MCP (dřív .modal-dialog-centered.modal-dialog-scrollable + mcp-modal.css).
 *
 * <dialog class="vb-dialog"> = rámeček dialogu, ::backdrop = ztmavené pozadí,
 * .vb-dialog__header, .vb-dialog__close, .vb-dialog__body (posouvá se, když se obsah nevejde).
 * Šířku nastavuje --vb-dialog-max-width (výchozí 500px jako Bootstrap .modal-dialog).
 */

.vb-dialog {
  box-sizing: border-box;
  flex-direction: column;
  width: calc(100% - 1rem);
  max-width: var(--vb-dialog-max-width);
  max-height: calc(100% - 1rem);
  margin: auto;
  padding: 0;
  border: 1px solid var(--border-color, #e2e2e2);
  border-radius: var(--border-radius-card);
  background-color: var(--color-white, #fff);
  background-clip: padding-box;
  box-shadow: var(--shadow-hover, 0 0.5rem 1rem rgba(0, 0, 0, 0.15));
  color: inherit;
  overflow: hidden;
  opacity: 0;
  transform: translate(0, -50px);
  transition: opacity 0.15s linear, transform 0.3s ease-out;
}

.vb-dialog[open] {
  display: flex;
}

.vb-dialog::backdrop {
  background-color: #000;
  opacity: 0;
  transition: opacity 0.15s linear;
}

.vb-dialog--open {
  opacity: 1;
  transform: none;
}

.vb-dialog--open::backdrop {
  opacity: 0.5;
}

@media (min-width: 576px) {
  .vb-dialog {
    width: 100%;
    max-height: calc(100% - 3.5rem);
  }
}

/* Tisk: bez stínu jako dřív (Bootstrap print * { box-shadow: none !important }; vb.base
   s print pravidly komponentu nepřebije) */
@media print {
  .vb-dialog {
    box-shadow: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .vb-dialog,
  .vb-dialog::backdrop {
    transition: none;
  }
}

.vb-dialog-lock body {
  overflow: hidden;
  padding-inline-end: var(--vb-dialog-scrollbar, 0px);
}

.vb-dialog__header {
  display: flex;
  flex-shrink: 0;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  padding: var(--spacing-card-mobile) var(--spacing-card-mobile) 0.75rem;
}

.vb-dialog__close {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  margin: -0.15rem -0.25rem 0 0;
  padding: 0;
  border: none;
  border-radius: var(--border-radius-button);
  background: transparent;
  color: var(--text-muted, #6f6f6f);
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
  transition: color var(--transition-fast, 0.15s ease-in-out),
    background-color var(--transition-fast, 0.15s ease-in-out);
}

.vb-dialog__close:hover,
.vb-dialog__close:focus {
  color: var(--text-color);
  background: var(--gray-10, #f8f9fa);
  outline: none;
}

/* Fokus z klávesnice musí být vidět (WCAG 2.4.7), samotné pozadí --gray-10 nestačí. */
.vb-dialog__close:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 2px;
}

.vb-dialog__body {
  position: relative;
  flex: 1 1 auto;
  overflow-y: auto;
  padding: 0 var(--spacing-card-mobile) var(--spacing-card-mobile);
}

@media (min-width: 768px) {
  .vb-dialog__header {
    padding: var(--spacing-card-desktop) var(--spacing-card-desktop) 0.85rem;
  }

  .vb-dialog__body {
    padding: 0 var(--spacing-card-desktop) var(--spacing-card-desktop);
  }
}
}
/* assets/css/vb/components/header-button.css */
@layer vb.components{
/*
 * Tlačítko s ikonou v hlavičce webu (plán 96, přepínač tmavého režimu) bez Bootstrapu.
 * V klidu a po najetí vypadá jako sousední tlačítka hlavičky (.btn .btn-outline-secondary
 * .btn-multibrand .btn-multibrand-radius .py-2): výška 42 px, obrys a ikona v barvě tlačítek
 * hlavičky, zaoblení z Designu. Stisk má barvu najetí (Bootstrap tu ikonu přebarvil na bílou)
 * a fokus z klávesnice rámeček v barvě ikony (Bootstrap ho schoval).
 *
 * <button class="vb-header-button vb-ms-2"><ikona></button>
 */

.vb-header-button {
  display: inline-block;
  box-sizing: border-box;
  height: 42px;
  margin: 0;
  padding: 0.5rem 0.8rem;
  border: 1px solid var(--button-multibrand-color);
  border-radius: var(--border-radius-header-button);
  background-color: transparent;
  color: var(--button-multibrand-color);
  font-family: inherit;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  text-align: center;
  text-transform: none;
  vertical-align: middle;
  cursor: pointer;
  user-select: none;
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
}

.vb-header-button:hover,
.vb-header-button:active {
  border-color: var(--button-multibrand-color-hover);
  color: var(--button-multibrand-color-hover);
}

.vb-header-button:focus {
  outline: none;
}

.vb-header-button:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  .vb-header-button {
    transition: none;
  }
}
}
/* assets/css/vb/components/lightbox.css */
@layer vb.components{
/* Lightbox obrázků (plán 82, F2) – nativní <dialog>, skript assets/js/vb/lightbox.js,
   markup snippet `lightbox`. Rozměry, barvy a časování převzaté z Lightbox2 v konfiguraci
   Visualbooku (resizeDuration 200, fadeDuration 300, imageFadeDuration 300). */

.vb-lightbox {
  /* Okraj okna kolem obrázku (čte ho i JS při výpočtu velikosti rámu). */
  --vb-lightbox-gap-inline: 40px;
  --vb-lightbox-gap-block: 120px;
  --vb-lightbox-frame-bg: #000;
  --vb-lightbox-text: #ccc;
  --vb-lightbox-muted: #999;
  --vb-lightbox-fade: 0.3s;
  --vb-lightbox-resize: 0.2s;

  position: fixed;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  max-inline-size: none;
  max-block-size: none;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--vb-lightbox-text);
  overflow: hidden;
  line-height: 0;
  font-weight: normal;
  text-align: center;
  outline: none;
}

/* ::backdrop v prohlížečích z roku 2023 nedědí vlastní vlastnosti z dialogu,
   proto barva natvrdo (= dnešní overlay: černá s průhledností 0,8). */
.vb-lightbox::backdrop {
  background-color: rgb(0 0 0 / 80%);
}

.vb-lightbox[open] {
  animation: vb-lightbox-fade-in var(--vb-lightbox-fade) ease;
}

.vb-lightbox[open]::backdrop {
  animation: vb-lightbox-fade-in 0.3s ease;
}

.vb-lightbox[data-vb-closing] {
  animation: vb-lightbox-fade-out var(--vb-lightbox-fade) ease forwards;
}

.vb-lightbox[data-vb-closing]::backdrop {
  animation: vb-lightbox-fade-out 0.3s ease forwards;
}

@keyframes vb-lightbox-fade-in {
  from { opacity: 0; }
}

@keyframes vb-lightbox-fade-out {
  to { opacity: 0; }
}

.vb-lightbox-body {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  inline-size: 100%;
  block-size: 100%;
}

.vb-lightbox-frame {
  position: relative;
  flex: none;
  inline-size: var(--vb-lightbox-width, 250px);
  block-size: var(--vb-lightbox-height, 250px);
  border-radius: var(--border-radius-card);
  background-color: var(--vb-lightbox-frame-bg);
  overflow: hidden;
  touch-action: pan-y pinch-zoom;
  transition: inline-size var(--vb-lightbox-resize) ease-in-out, block-size var(--vb-lightbox-resize) ease-in-out;
}

.vb-lightbox-image {
  display: block;
  inline-size: 100%;
  block-size: 100%;
  object-fit: contain;
  border: none;
  border-radius: var(--border-radius-card);
}

.vb-lightbox-image-in {
  animation: vb-lightbox-fade-in var(--vb-lightbox-fade) ease;
}

.vb-lightbox[data-vb-loading] .vb-lightbox-image,
.vb-lightbox-image:not([src]) {
  visibility: hidden;
}

.vb-lightbox-spinner {
  position: absolute;
  inset-block-start: 43%;
  inset-inline-start: calc(50% - 20px);
  inline-size: 40px;
  block-size: 40px;
  background: url(../img/tech/lightbox/spinner.svg) no-repeat center / contain;
  opacity: 0;
  pointer-events: none;
}

.vb-lightbox[data-vb-loading] .vb-lightbox-spinner {
  opacity: 1;
  transition: opacity 0.6s;
}

/* Šipky = levá a pravá polovina obrázku, ikona se ukáže po najetí. */
.vb-lightbox-prev,
.vb-lightbox-next {
  position: absolute;
  inset-block: 0;
  z-index: 1;
  inline-size: 50%;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background-color: transparent;
  background-repeat: no-repeat;
  background-size: 40px;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.6s;
}

.vb-lightbox-prev {
  inset-inline-start: 0;
  background-image: url(../img/tech/lightbox/prev.svg);
  background-position: left 48%;
}

.vb-lightbox-next {
  inset-inline-end: 0;
  background-image: url(../img/tech/lightbox/next.svg);
  background-position: right 48%;
}

.vb-lightbox-prev[hidden],
.vb-lightbox-next[hidden] {
  display: none;
}

.vb-lightbox-prev:hover,
.vb-lightbox-next:hover,
.vb-lightbox-prev:focus-visible,
.vb-lightbox-next:focus-visible {
  opacity: 0.9;
}

/* Fokus z klávesnice ukazuje šipka (opacity výše). Rámeček přes půlku obrázku
   majitel nechce (14. 10. 2026). */
.vb-lightbox-prev:focus-visible,
.vb-lightbox-next:focus-visible {
  outline: none;
}

/* Světlý obrázek (jas okrajů nad 160): tmavé šipky. */
.vb-lightbox[data-vb-contrast="light"] .vb-lightbox-prev {
  background-image: url(../img/tech/lightbox/prev-dark.svg);
}

.vb-lightbox[data-vb-contrast="light"] .vb-lightbox-next {
  background-image: url(../img/tech/lightbox/next-dark.svg);
}

.vb-lightbox-meta {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  flex: none;
  inline-size: var(--vb-lightbox-width, 250px);
  max-inline-size: calc(100vw - var(--vb-lightbox-gap-inline));
  padding: 5px 4px 0;
  opacity: 0;
  transition: inline-size var(--vb-lightbox-resize) ease-in-out;
}

.vb-lightbox[data-vb-ready] .vb-lightbox-meta {
  opacity: 1;
  transition: inline-size var(--vb-lightbox-resize) ease-in-out, opacity var(--vb-lightbox-resize);
}

.vb-lightbox-details {
  flex: 0 1 85%;
  text-align: start;
  line-height: 1.1em;
}

.vb-lightbox-caption {
  font-size: 13px;
  font-weight: bold;
  line-height: 1em;
}

.vb-lightbox-counter {
  display: block;
  padding-block-end: 1em;
  font-size: 12px;
  color: var(--vb-lightbox-muted);
}

.vb-lightbox-caption[hidden],
.vb-lightbox-counter[hidden] {
  display: none;
}

.vb-lightbox-close {
  flex: none;
  inline-size: 30px;
  block-size: 30px;
  margin: 0;
  padding: 0;
  border: 0;
  background: url(../img/tech/lightbox/close.svg) top right / 25px no-repeat;
  cursor: pointer;
  opacity: 0.7;
  transition: opacity 0.2s;
}

.vb-lightbox-close:hover,
.vb-lightbox-close:focus-visible {
  opacity: 1;
}

.vb-lightbox-close:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 2px;
}

/* Zámek scrollu stránky pod otevřeným lightboxem (jako disableScrolling v Lightbox2). */
.vb-lightbox-scroll-lock body {
  overflow: hidden;
}

@media (max-width: 767.98px) {
  .vb-lightbox {
    --vb-lightbox-gap-inline: 30px;
  }

  .vb-lightbox-prev,
  .vb-lightbox-next {
    opacity: 0.7;
  }
}

@media (max-width: 480px) {
  .vb-lightbox {
    --vb-lightbox-gap-inline: 20px;
  }

  .vb-lightbox-details {
    flex-basis: 75%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .vb-lightbox[open],
  .vb-lightbox[open]::backdrop,
  .vb-lightbox-image-in {
    animation: none;
  }

  .vb-lightbox-frame,
  .vb-lightbox-meta,
  .vb-lightbox[data-vb-ready] .vb-lightbox-meta {
    transition: none;
  }
}
}
/* assets/css/vb/components/tabs.css */
@layer vb.components{
/*
 * Záložky (plán 82, F2) – chování v assets/js/vb/tabs.js (window.vbTabs, událost vb:tab-shown).
 *
 * .vb-tabs__list (role=tablist) > .vb-tabs__tab (button, role=tab, aria-selected)
 * .vb-tabs__panel (role=tabpanel), neaktivní má atribut hidden
 *
 * Varianty:
 *   --logo    karta loga, záložky Tmavé / Světlé pozadí (templates/logo.php)
 *   --switch  přepínač Světlý / Tmavý režim v modulu poměru barev (module-color-ratio-chart)
 *   --pills   výběr nástroje v dialogu MCP (homepage-mcp-card.php)
 */

.vb-tabs__tab {
  -webkit-appearance: none;
  appearance: none;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  color: inherit;
  text-align: center;
  cursor: pointer;
}

.vb-tabs__panel[hidden] {
  display: none;
}

.vb-tabs__panel--fade {
  transition: opacity 0.15s linear;
}

.vb-tabs__panel--fade.vb-tabs__panel--entering {
  opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
  .vb-tabs__panel--fade {
    transition: none;
  }
}

/* --- Karta loga ----------------------------------------------------------- */

.vb-tabs__list--logo {
  display: flex;
  flex-wrap: wrap;
  margin: 0 0 -2px;
  padding: 0;
  border-block-end: 1px solid var(--vb-tabs-border-color);
  font-family: var(--font-family-body);
  /* 14 px jako přepínač v modulu poměru barev (rozhodnutí majitele 15. 10. 2026) */
  font-size: 0.875rem;
  letter-spacing: var(--body-kerning, 0);
}

.vb-tabs__tab--logo {
  /* nad horním okrajem karty, který panel překrývá o 3 px (margin níže) */
  z-index: 11;
  display: flex;
  flex: 1 1 0;
  align-items: center;
  justify-content: center;
  /* O něco vyšší než původní <a> v <li> (padding 0.5rem), text svisle na středu */
  padding: 0.75rem 1rem;
  color: var(--link-color);
  letter-spacing: inherit;
}

.vb-tabs__tab--logo:first-child {
  border-start-start-radius: var(--border-radius-card);
}

.vb-tabs__tab--logo:last-child {
  border-start-end-radius: var(--border-radius-card);
}

.vb-tabs__tab--on-dark {
  color: #fff;
}

.vb-tabs__tab--logo > i {
  padding-inline-end: 10px;
}

.vb-tabs__panels--logo {
  margin-block-start: -1px;
}

@media (max-width: 359.98px) {
  /* Obě záložky musí zůstat vedle sebe (samotné nowrap by je naskládalo pod sebe),
     proto menší písmo a užší odsazení. */
  .vb-tabs__list--logo {
    flex-wrap: nowrap;
  }

  .vb-tabs__tab--logo {
    min-width: 0;
    padding-inline: 0.5rem;
    font-size: 0.875rem;
    white-space: nowrap;
  }

  .vb-tabs__tab--logo > i {
    padding-inline-end: 6px;
  }
}

/* --- Přepínač v modulu poměru barev --------------------------------------- */

.vb-tabs__list--switch {
  display: flex;
  justify-content: center;
  width: 100%;
  margin: 0 0 var(--vb-space-3);
  border: 1px solid var(--vb-tabs-switch-border-color);
  border-radius: 4px;
  background-color: #fff;
  overflow: hidden;
}

.vb-tabs__tab--switch {
  position: relative;
  display: flex;
  flex: 1;
  align-items: center;
  justify-content: center;
  height: 44px;
  margin: 0 0 -1px;
  padding: 0 1.5rem;
  border-block-end: 2px solid transparent;
  color: var(--vb-tabs-switch-color);
  font-size: 14px;
  font-weight: 400;
}

.vb-tabs__tab--switch > i {
  margin-inline-end: 8px;
  color: inherit;
}

.vb-tabs__tab--switch:hover,
.vb-tabs__tab--switch[aria-selected="true"] {
  color: var(--vb-tabs-accent, var(--button-primary-color, #fe1a3f));
}

.vb-tabs__tab--switch[aria-selected="true"]::after {
  content: '';
  position: absolute;
  inset-block-end: 0;
  inset-inline-start: 0;
  display: block;
  width: 100%;
  height: 2px;
  margin-block-end: -1px;
  background-color: var(--vb-tabs-accent, var(--button-primary-color, #fe1a3f));
}

.vb-tabs__tab--switch:focus {
  outline: none;
}

.vb-tabs__tab--switch:focus-visible {
  outline: 2px solid var(--vb-tabs-accent, var(--button-primary-color, #fe1a3f));
  outline-offset: -2px;
}

/* --- Výběr nástroje v dialogu MCP (dřív .vb-mcp-modal-tabs v mcp-modal.css) -- */

.vb-tabs__list--pills {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.45rem;
  margin: 0;
  padding: 0;
  font-family: var(--font-family-body);
  font-size: calc(var(--base-font-size) * 0.9375);
  letter-spacing: var(--body-kerning, 0);
}

@media (min-width: 768px) {
  .vb-tabs__list--pills {
    font-size: var(--base-font-size);
  }
}

@media (max-width: 575px) {
  .vb-tabs__list--pills {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.vb-tabs__tab--pills {
  /* jako dřív tlačítko v <li>: výška podle vlastního textu, ne podle souseda v řádku mřížky */
  align-self: start;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-width: 0;
  min-height: 2.5rem;
  padding: 0.5rem 0.55rem;
  border-radius: var(--border-radius-button);
  background: var(--gray-10, #f3f4f6);
  color: var(--text-dark, #525252);
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: normal;
  transition: color var(--transition-fast, 0.15s ease-in-out),
    background-color var(--transition-fast, 0.15s ease-in-out);
}

.vb-tabs__tab--pills:hover {
  color: var(--text-color);
  background: var(--gray-15, #e9ecef);
}

.vb-tabs__tab--pills:focus,
.vb-tabs__tab--pills:focus-visible {
  outline: 2px solid var(--vb-tabs-accent, var(--button-primary-color, #fe1a3f));
  outline-offset: 1px;
}

.vb-tabs__tab--pills[aria-selected="true"] {
  color: #fff;
  background-color: var(--vb-tabs-accent, var(--button-primary-color, #fe1a3f));
  outline: none;
  box-shadow: none;
  font-weight: 700;
}
}
/* assets/css/vb/components/text-video.css */
@layer vb.components{
/*
 * Video vložené do textu (vrstva vb.components, plán 93)
 *
 * KirbyTag (video:) vypíše <figure class="video"><iframe>, rám YouTube/Vimeo napsaný přímo
 * do textu projde sanitizérem bez třídy a rozměrů. Bez pravidla má prohlížečový výchozí
 * rám 300 × 150 px, tady se roztáhne na šířku textu v poměru 16 : 9.
 *
 * Rám s vlastní třídou, stylem nebo rozměry (moduly Video, Vložený obsah, Soubory Google,
 * náhled e-mailového podpisu) a rámy v modulu Vložený obsah se nemění. Rozměry zadané
 * editorem u (video: … width: / height:) mají přednost.
 *
 * Vrstvu (@layer vb.components) doplní scripts/build-css.php, tady jen holá pravidla. Bez important deklarací.
 */

figure.video > iframe:not([width], [height], [style]),
iframe:is(
  [src^="https://www.youtube.com/embed/"],
  [src^="https://www.youtube-nocookie.com/embed/"],
  [src^="https://player.vimeo.com/video/"]
):not([class], [style], [width], [height], .universal-embed-container *, figure.video > *) {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  border: 0;
}
}
/* assets/css/vb/components/tooltip.css */
@layer vb.components{
/*
 * Bublinová nápověda (plán 82, F2) – jeden sdílený prvek z assets/js/vb/tooltip.js.
 * Vzhled = dřívější Bootstrap tooltip + styles.css (barvy a zaoblení z tokenů značky).
 * S popover API je prvek v horní vrstvě; UA styly popoveru (inset, margin, border,
 * padding, overflow, pozadí) se tu ruší. Bez popoveru je to fixně pozicovaný prvek.
 * Písmo vnitřku dál určuje dynamické CSS značky (pravidlo pro div), proto ho tu nenastavujeme.
 */

.vb-tooltip {
  display: none;
  position: fixed;
  inset: 0 auto auto 0;
  z-index: var(--vb-tooltip-z);
  margin: 0;
  padding: 0;
  border: 0;
  overflow: visible;
  width: auto;
  height: auto;
  color: inherit;
  background: transparent;
  pointer-events: none;
  will-change: transform;
  /* Reset dědičných vlastností jako Bootstrap .tooltip */
  font-style: normal;
  font-weight: 400;
  font-size: 0.875rem;
  line-height: 1.5;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  letter-spacing: normal;
  word-break: normal;
  word-spacing: normal;
  white-space: normal;
  line-break: auto;
  overflow-wrap: break-word;
  opacity: 0;
  transition: opacity 0.15s linear;
}

.vb-tooltip.is-open {
  display: block;
}

.vb-tooltip.is-visible {
  opacity: 1;
}

.vb-tooltip__inner {
  max-width: var(--vb-tooltip-max-width);
  padding: var(--vb-tooltip-padding-block) var(--vb-tooltip-padding-inline);
  color: var(--tooltip-text-color);
  text-align: center;
  background-color: var(--tooltip-bg-color);
  border-radius: var(--border-radius-tooltip);
  font-weight: var(--vb-tooltip-font-weight);
  font-size: var(--vb-tooltip-font-size);
  line-height: var(--vb-tooltip-line-height);
}

.vb-tooltip__arrow {
  position: absolute;
  display: block;
  width: var(--vb-tooltip-arrow-width);
  height: var(--vb-tooltip-arrow-height);
}

.vb-tooltip__arrow::before {
  position: absolute;
  content: "";
  border-color: transparent;
  border-style: solid;
}

.vb-tooltip[data-side="top"] {
  padding-block: var(--vb-tooltip-arrow-height);
}

.vb-tooltip[data-side="top"] .vb-tooltip__arrow {
  bottom: 0;
}

.vb-tooltip[data-side="top"] .vb-tooltip__arrow::before {
  top: 0;
  border-width: var(--vb-tooltip-arrow-height) calc(var(--vb-tooltip-arrow-width) / 2) 0;
  border-top-color: var(--tooltip-bg-color);
}

.vb-tooltip[data-side="bottom"] {
  padding-block: var(--vb-tooltip-arrow-height);
}

.vb-tooltip[data-side="bottom"] .vb-tooltip__arrow {
  top: 0;
}

.vb-tooltip[data-side="bottom"] .vb-tooltip__arrow::before {
  bottom: 0;
  border-width: 0 calc(var(--vb-tooltip-arrow-width) / 2) var(--vb-tooltip-arrow-height);
  border-bottom-color: var(--tooltip-bg-color);
}

@media (prefers-reduced-motion: reduce) {
  .vb-tooltip {
    transition: none;
  }
}

/* Prvek s bublinou, který je jen informace (odznaky na stránce Loga): tabindex="0" kvůli
   klávesnici, fokus z klávesnice musí být vidět i na barevném odznaku. */
.vb-tooltip-focusable:focus-visible {
  outline: 2px solid var(--text-color, #161616);
  outline-offset: 2px;
}
}
/* assets/css/vb/variants/dark.css */
@layer vb.variants{
/*
 * Visualbook – tmavý režim (plán 96)
 *
 * Platí jen s <html data-vb-theme="dark">, který nastaví head.php (inline skript podle
 * localStorage) a přepínač vb/theme.js, a to jen se zapnutým tmavým režimem v Designu.
 * Vrstva vb.variants (doplní scripts/build-css.php) je nad vb.legacy, proto přepsání tokenů
 * vyhraje bez !important. Hodnoty s !important ve styles.css (např. bílý text tlačítka)
 * jsou proto převedené na tokeny --vb-*.
 *
 * Hlavička (logo, nadpis, tlačítka hlavičky) a velké karty na úvodní stránce se nemění:
 * tokeny se nastavují na děti <body> kromě <header> a tokeny hlavičky (--header-color,
 * --title-color, --button-multibrand-*) ani velkých karet (--card-bottom-*) se nepřepisují.
 *
 * Barvy doplněné designérem (Design → Tmavý režim) vypisuje dynamické CSS jako
 * --vb-dark-link-color, --vb-dark-button-color a --vb-dark-button-text.
 * Paleta ve stupních šedi: --vb-dark-*, registr v assets/css/vb/README.md.
 */

html[data-vb-theme="dark"] {
  color-scheme: dark;

  --vb-dark-bg: #161616;
  --vb-dark-surface: #1a1a1a;
  --vb-dark-surface-raised: #212121;
  --vb-dark-surface-hover: #272727;
  --vb-dark-border: #2c2c2c;
  --vb-dark-border-subtle: #242424;
  /* Texty ze šedé palety Visualbooku (Gray 20/40/50), kontrast WCAG AA i na kartách:
     text 6,8–7,9 : 1, tlumený text ≥ 4,9 : 1 (na najetí 4,5), nadpisy 12,2–14,2 : 1 */
  --vb-dark-text: #a8a8a8;
  --vb-dark-text-muted: #8d8d8d;
  --vb-dark-heading: #e0e0e0;
}

html[data-vb-theme="dark"] body {
  background-color: var(--vb-dark-bg);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  /* Tokeny značky (visualbook-dynamic-css) */
  --dynamic-web-bg-color: var(--vb-dark-bg);
  --dynamic-blocks-bg-color: var(--vb-dark-surface);
  --text-color: var(--vb-dark-text);
  --headings-color: var(--vb-dark-heading);
  --link-color: var(--vb-dark-link-color, #e0e0e0);
  /* Výchozí tlačítka Gray 30, aby nesvítila víc než nadpisy */
  --button-primary-color: var(--vb-dark-button-color, #c6c6c6);
  --vb-button-primary-text: var(--vb-dark-button-text, #161616);
  --table-header-color-bg: var(--vb-dark-surface-raised);
  --table-color-bg: var(--vb-dark-surface);
  /* Najetí na řádek nic nemění, stejně jako ve světlém režimu (buňky i hover jsou bílé) */
  --table-hover-bg: var(--vb-dark-surface);
  --scrollbar-color: #6f6f6f;

  /* Interní tokeny styles.css a tokens.css */
  --border-color: var(--vb-dark-border);
  --border-color-light: var(--vb-dark-border-subtle);
  --line-color: var(--vb-dark-border-subtle);
  --table-line-color: var(--vb-dark-border);
  --bg-subtle: var(--vb-dark-surface);
  --bg-indicator: var(--vb-dark-surface-raised);
  --bg-input: var(--vb-dark-surface-raised);
  --bg-meter: var(--vb-dark-surface-raised);
  --text-muted: var(--vb-dark-text-muted);
  --text-dark: var(--vb-dark-text);
  --vb-card-border-color: var(--vb-dark-border);
  --vb-card-surface: var(--vb-dark-surface);
  --shadow-hover: 0 0.5rem 1rem rgba(0, 0, 0, 0.5);

  color: var(--vb-dark-text);
}

/* Bootstrap .bg-white má !important ve vb.legacy, proto čte token --vb-surface-white
   (bootstrap-subset.css). Obrázky s .bg-white (průhledné PNG v modulech) zůstávají
   na bílé, jinak by tmavé části obrázku zmizely. */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-surface-white: var(--vb-dark-surface);
  --vb-surface-light: var(--vb-dark-surface-raised);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) img.bg-white {
  --vb-surface-white: #fff;
}

/* Karty, formuláře, dialog */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .card,
html[data-vb-theme="dark"] .vb-dialog {
  background-color: var(--vb-dark-surface);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .form-control,
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .form-control:focus,
html[data-vb-theme="dark"] .vb-dialog .form-control {
  color: var(--vb-dark-heading);
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .btn-dark {
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

/* Info box a štítky: tmavá paleta místo světlých barev z Designu */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  /* Poznámky a tipy výrazněji nad pozadím stránky (Gray 90) */
  --info-box-bg-color: #262626;
  --info-box-text-color: var(--vb-dark-heading);
  /* Text info boxů v modulech (inline <style> #alert-wrapper-… s !important) */
  --vb-info-box-text: #c6c6c6;
  /* Štítky (RGB, CMYK, Všechny verze, váhy písma…) na černé */
  --info-badge-bg-color: #000000;
  --info-badge-text-color: var(--vb-dark-heading);
}

/* Akordeon (components/accordion.css) */
html[data-vb-theme="dark"] .vb-accordion,
html[data-vb-theme="dark"] .vb-accordion--standalone {
  --vb-accordion-summary-surface: var(--vb-dark-surface-raised);
  --vb-accordion-summary-surface-hover: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .vb-accordion--standalone {
  --vb-accordion-panel-surface: var(--vb-dark-surface);
}

/* Záložky (components/tabs.css) */
html[data-vb-theme="dark"] .vb-tabs__list--switch {
  background-color: var(--vb-dark-surface);
}

html[data-vb-theme="dark"] .vb-tabs__tab--pills {
  color: var(--vb-dark-text);
  background: var(--vb-dark-surface-raised);
}

html[data-vb-theme="dark"] .vb-tabs__tab--pills:hover {
  background: var(--vb-dark-surface-hover);
}

/* Vybraná záložka (výběr nástroje v okně MCP): barva tlačítek tmavého režimu, bez ní bílá */
html[data-vb-theme="dark"] .vb-tabs__tab--pills[aria-selected="true"] {
  color: var(--vb-dark-button-text, #161616);
  background: var(--vb-dark-button-color, #ffffff);
}

/* Lišta formátů a stahování u vzorníků a palet (module-color-swatch.css, color-palette.css) */
html[data-vb-theme="dark"] .format-navigation,
html[data-vb-theme="dark"] .tab-control-inner,
html[data-vb-theme="dark"] .download-button {
  background-color: var(--vb-dark-surface);
  border-color: var(--vb-dark-border);
}

/* Po najetí výplň v barvě tlačítek tmavého režimu (bez ní #fafafa) a tmavá ikona */
html[data-vb-theme="dark"] .download-button:hover {
  background-color: var(--vb-dark-button-color, #fafafa);
  border-color: var(--vb-dark-button-color, #fafafa);
}

html[data-vb-theme="dark"] .download-button:hover i {
  color: var(--vb-dark-button-text, #161616);
}

html[data-vb-theme="dark"] .download-button:hover svg {
  fill: var(--vb-dark-button-text, #161616);
}

/* Nabídka stahování leží nad kartami barev, proto vyšší plocha, okraj a hlubší stín */
html[data-vb-theme="dark"] .dropdown-menu-content {
  background-color: var(--vb-dark-surface-raised);
  border: 1px solid var(--vb-dark-border);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}

html[data-vb-theme="dark"] .dropdown-menu-item {
  color: var(--vb-dark-heading);
}

html[data-vb-theme="dark"] .dropdown-menu-item .extension {
  background-color: transparent;
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .format-tab {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .dropdown-menu-item:hover {
  background-color: var(--vb-dark-border);
}

/* Výběr jazyka v hlavičce: Bootstrap mu dává bílé pozadí, ale text bere z --text-color
   (styles.css s !important), který obal hlavičky (.header-bg-color, dítě <body>) dostal tmavý.
   Nabídka je proto tmavá jako nabídka stahování a token se nastavuje přímo na ní, takže
   platí i tam, kde hlavička obal nemá. Vybraný jazyk zůstává v barvě hlavních tlačítek. */
html[data-vb-theme="dark"] .dropdown-menu {
  --text-color: var(--vb-dark-heading);
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}

html[data-vb-theme="dark"] .dropdown-item:not(.active):is(:hover, :focus) {
  background-color: var(--vb-dark-surface-hover);
}

/* Bootstrap kreslí oddělovač i horním okrajem #e9ecef, v tmavém režimu by svítil bíle */
html[data-vb-theme="dark"] .dropdown-divider {
  background-color: var(--vb-dark-border);
  border-top-color: var(--vb-dark-border);
}

/* Znaky písma (module-font-glyphs.css) */
html[data-vb-theme="dark"] .glyph-card,
html[data-vb-theme="dark"] .glyph-item,
html[data-vb-theme="dark"] .glyph-table td {
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .glyph-card:hover,
html[data-vb-theme="dark"] .glyph-item:hover,
html[data-vb-theme="dark"] .glyph-table td:hover {
  background-color: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .glyph-table,
html[data-vb-theme="dark"] .category-title {
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .category-title {
  color: var(--vb-dark-heading);
}

/* Nadpisy v Informacích o písmu (module-font.php): světlejší než text */
html[data-vb-theme="dark"] .font-info-heading {
  color: var(--vb-dark-heading);
}

/* Popisky Znaková sada a Velikost znaků (module-font-glyphs.js) */
html[data-vb-theme="dark"] .glyph-selector-label {
  color: #c6c6c6;
}

/* Šipka výběrů v sekci Znaky (module-font-glyphs.css, SVG s výplní #333) */
html[data-vb-theme="dark"] .form-control.glyph-selector {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23c6c6c6' d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E");
}

/* Znaky v mřížce i tabulce modulu písma */
html[data-vb-theme="dark"] .glyph-char {
  color: #fafafa;
}

html[data-vb-theme="dark"] .glyph-name,
html[data-vb-theme="dark"] .glyph-unicode {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .form-control.glyph-selector {
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

/* Tabulky: záhlaví (styles.css .table th = --gray-00) a nadpisy sloupců, které šablony
   vypisují inline jako var(--vb-table-heading-color, <Nadpisy H2–H6>) */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-table-heading-color: var(--vb-dark-heading);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .table th,
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .table thead th {
  background-color: var(--vb-dark-surface-raised);
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .table td,
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .table th {
  border-color: var(--vb-dark-border);
}

/* Formáty papíru (inline <style> v templates/paper-formats.php) */
html[data-vb-theme="dark"] .paper-unit-toggle .unit-btn:not(.active),
html[data-vb-theme="dark"] .paper-compare-box,
html[data-vb-theme="dark"] .paper-compare-select {
  color: var(--vb-dark-text);
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .paper-unit-toggle .unit-btn.active {
  color: var(--vb-button-primary-text);
}

html[data-vb-theme="dark"] .paper-compare-label {
  color: var(--vb-dark-heading);
}

html[data-vb-theme="dark"] .paper-compare-rect {
  border-color: var(--vb-dark-text-muted);
  background: rgba(255, 255, 255, 0.04);
}

html[data-vb-theme="dark"] .paper-cell[data-clipboard-text]:hover {
  background: rgba(255, 255, 255, 0.06);
}

/* Obrázek s body (module-image-hotspots.css): karta s legendou */
html[data-vb-theme="dark"] .vb-hotspot-card {
  background-color: var(--vb-dark-surface);
}

/* Ikony (module-icons.css): ovládání ztmavne, dlaždice s ikonami zůstávají jako náhled */
html[data-vb-theme="dark"] .vb-icons-batch-select,
html[data-vb-theme="dark"] .vb-icons-batch-color-button {
  background-color: var(--vb-dark-surface-raised);
}

/* Ikony na bílých dlaždicích dědí barvu textu (currentColor): v tmavém režimu
   původní tmavá jako ve světlém, nepřebarvují se */
html[data-vb-theme="dark"] .vb-icon-item {
  color: #212529;
}

/* Okno ikony (module-icons.css): okno a ovládání tmavé, plátno s ikonou jako ve světlém
   režimu (světlá varianta plátna, ikona a šipky beze změny). Tmavou variantu plátna
   (.bg-dark) si volí návštěvník a zůstává. */
html[data-vb-theme="dark"] .vb-icon-modal {
  --button-primary-color: var(--vb-dark-button-color, #fafafa);
  color: var(--vb-dark-text);
  background: var(--vb-dark-surface-raised);
  border: 1px solid var(--vb-dark-border);
}

html[data-vb-theme="dark"] .vb-icon-modal-preview.bg-light {
  --bg-indicator: #fafafa;
  --border-color-light: #ededed;
  color: #212529;
}

html[data-vb-theme="dark"] .vb-icon-modal-title {
  color: var(--vb-dark-heading);
}

html[data-vb-theme="dark"] .vb-icon-modal-close {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .vb-icon-modal-close:hover {
  color: #fafafa;
}

html[data-vb-theme="dark"] .vb-icon-color-toggle {
  background-color: var(--vb-dark-bg);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .vb-icon-color-reset {
  background: var(--vb-dark-surface-hover);
  border-color: #393939;
}

html[data-vb-theme="dark"] .vb-icon-color-reset svg {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .vb-icon-color-btn {
  border-color: rgba(255, 255, 255, 0.18);
}

html[data-vb-theme="dark"] :is(.vb-icon-modal-btn-third, .vb-icon-modal-btn-flex) {
  background: transparent;
}

html[data-vb-theme="dark"] :is(.vb-icon-modal-btn-third, .vb-icon-modal-btn-flex):hover {
  background: var(--button-primary-color);
}

html[data-vb-theme="dark"] :is(.vb-icon-modal-btn, .vb-icon-modal-btn-flex, .vb-icon-modal-btn-third):hover {
  color: var(--vb-dark-button-text, #161616);
}

html[data-vb-theme="dark"] .vb-icon-modal-select-auto {
  color: var(--vb-dark-heading);
  background-color: var(--vb-dark-bg);
  border-color: var(--vb-dark-border);
}

/* Ikona plechovky (výběr barvy ikon) stejně jako text výběrů vedle ní */
html[data-vb-theme="dark"] .vb-icons-batch-color-button .vb-icon-color-picker-icon {
  color: var(--vb-dark-text);
}

/* Patičky karet s tlačítky ke stažení: šablony a moduly mají inline
   background: var(--vb-card-footer-surface, rgb(251,251,251)) */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-card-footer-surface: var(--vb-dark-surface-raised);
  --vb-search-result-hover: var(--vb-dark-surface-hover);
  /* Názvy výsledků hledání (search.php: color: var(--vb-search-text, #161616) !important) */
  --vb-search-text: var(--vb-dark-heading);
  /* Nalezený výraz: tmavě fialová plocha, světle fialový text (search.php) */
  --vb-search-highlight-surface: hsl(275, 60%, 25%);
  --vb-search-highlight-text: hsl(275, 60%, 86%);
}

/* Detail loga: rozbalovací nápověda k formátům (inline <style> v templates/logo.php) */
html[data-vb-theme="dark"] .logo-format-help-wrap,
html[data-vb-theme="dark"] .logo-format-help-panel {
  background: var(--vb-dark-surface);
}

html[data-vb-theme="dark"] .logo-format-help-bar {
  border-top-color: var(--vb-dark-border);
}

/* Vysouvací lišta „Jaký formát loga mám použít?“ a tabulka formátů (inline <style> v logo.php) */
html[data-vb-theme="dark"] .logo-format-help-bar:hover {
  background: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .logo-format-help-toggle,
html[data-vb-theme="dark"] .logo-format-help-close-inline {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .logo-format-help-toggle:hover,
html[data-vb-theme="dark"] .logo-format-help-close-inline:hover {
  color: #fafafa;
}

html[data-vb-theme="dark"] .format-help-table,
html[data-vb-theme="dark"] .format-help-table tbody td:first-child {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .format-help-table thead th,
html[data-vb-theme="dark"] .format-help-table tbody td {
  border-bottom-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .format-help-table tbody td.format-help-sep-line {
  border-left-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .format-help-mode-badge {
  color: #c6c6c6;
  border-color: #6f6f6f;
}

/* Průvodce formáty loga: první sloupec je sticky a potřebuje plné pozadí */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .table td:first-child {
  background-color: var(--vb-dark-surface);
}

/* Vyhledávání (inline <style> v templates/search.php) */
html[data-vb-theme="dark"] .bg-gray {
  background-color: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .bg-section-gray {
  background-color: var(--vb-dark-surface);
}

/* Aktivní položka navigace (sidebar-open.php, templates/logo.php) a pole v detailu loga */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-menu-active-surface: #393939;
  --vb-input-surface: var(--vb-dark-bg);
  /* Popisky posuvníků a pole šířky v detailu loga (barva textu z Designu s !important) */
  --vb-logo-control-label: #c6c6c6;
  /* Barva textu z Designu vypsaná v šabloně (popisy sekcí, ochranná zóna, Před / Po, audio):
     stejná barva jako ostatní texty */
  --vb-design-text: var(--vb-dark-text);
}

/* Automatická ochranná zóna loga (templates/logo.php, styles.css .meter): tmavý podklad
   s tmavými animovanými pruhy, rámeček s logem si nechává svou barvu */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-protection-zone-surface: var(--vb-dark-surface);
  --vb-meter-stripe: var(--vb-dark-surface-raised);
}

/* Lomítka drobečkové navigace (Gray 60) */
html[data-vb-theme="dark"] nav[aria-label="breadcrumb"] .breadcrumb-item + .breadcrumb-item::before {
  color: #6f6f6f;
}

/* Aktivní položka o stupeň světlejší než lomítka (Gray 50) */
html[data-vb-theme="dark"] nav[aria-label="breadcrumb"] .breadcrumb > .breadcrumb-item.active {
  color: #8d8d8d;
}

/* Horní linka patičky (<hr> s průhlednou černou z Bootstrapu) v barvě obrysů karet */
html[data-vb-theme="dark"] .footer hr {
  border-top-color: var(--vb-dark-border);
}

/* Obrysová tlačítka (stažení): bez vlastní barvy z Designu tlumený obrys Gray 60,
   text v barvě tlačítek; po najetí se vyplní a text ztmavne (--vb-button-primary-text,
   čtou ho i inline styly modulů) */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .btn-outline-primary:not(:hover):not(:focus):not(:active) {
  border-color: var(--vb-dark-button-color, #6f6f6f);
}

/* Po najetí bez vlastní barvy tlačítek výplň #fafafa. Token se přepíše přímo na tlačítku,
   takže ho převezmou i hover pravidla modulů s !important */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) .btn-outline-primary:is(:hover, :focus, :active) {
  --button-primary-color: var(--vb-dark-button-color, #fafafa);
}

/* Logo Visualbooku v patičce: verze na tmavé pozadí */
.vb-footer-logo--dark,
html[data-vb-theme="dark"] .vb-footer-logo--light {
  display: none;
}

html[data-vb-theme="dark"] .vb-footer-logo--dark {
  display: inline;
}

/* Frontend editor (frontend-editor.css): upravovaná sekce leží nad překryvem a má
   natvrdo bílé pozadí. Okna editoru (.frontend-editor-link-modal-backdrop, přímé dítě
   <body>) zůstávají světlá, proto jsou z tmavé palety výše vyjmutá. */
html[data-vb-theme="dark"] .frontend-editor-link-modal-backdrop {
  color-scheme: light;
}

html[data-vb-theme="dark"] .frontend-editor-module.editing {
  background: var(--vb-dark-bg);
  box-shadow: 0 0 40px rgba(0, 0, 0, 0.6);
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar {
  --fe-toolbar-bg: var(--vb-dark-surface-raised);
  border-bottom-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar button {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar button:hover:not(:disabled) {
  background: var(--vb-dark-surface-hover);
}

/* Aktivní formát (tučné, nadpis, seznam… pod kurzorem): výrazné pozadí a světlá ikona */
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar button.is-active,
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar button.is-active:hover:not(:disabled) {
  color: var(--vb-dark-button-color, #fafafa);
  background: #393939;
}

/* Bublina interaktivních bodů má vlastní barvy panelu (frontend-editor.css) */
html[data-vb-theme="dark"] .frontend-editor-module.editing .vb-hotspot-tooltip .frontend-editor-tiptap-toolbar button.is-active {
  color: var(--vb-hotspot-tooltip-color, #fff);
  background: color-mix(in srgb, var(--vb-hotspot-tooltip-color, #fff) 18%, transparent);
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-tiptap-toolbar .fe-tiptap-toolbar__sep {
  background: var(--vb-dark-border);
}

/* Okna frontend editoru (odkaz, soubor, obrázek, tlačítko, ochranná zóna…; frontend-editor.css).
   Leží v .frontend-editor-link-modal-backdrop mimo tokeny tmavého režimu, proto barvy přímo.
   Náhledy obrázků a písem zůstávají na světlém podkladu (podklady značky). */
html[data-vb-theme="dark"] .frontend-editor-link-modal {
  --button-primary-color: var(--vb-dark-button-color, #fafafa);
  --vb-fe-pz-value: var(--vb-dark-heading);
  /* Nadpis okna barví styles.css (body h3 { color: var(--headings-color) !important }) */
  --headings-color: var(--vb-dark-heading);
  color: var(--vb-dark-text);
  background: var(--vb-dark-surface-raised);
  border: 1px solid var(--vb-dark-border);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-title {
  color: var(--vb-dark-heading);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-types {
  background: var(--vb-dark-bg);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-type-btn {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-type-btn.is-active {
  color: var(--vb-dark-heading);
  background: var(--vb-dark-surface-hover);
  box-shadow: none;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-field span,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-pz-slider-head span,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-pz-hint,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-current,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-file-modal-name {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-editor-current,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-file-modal-empty {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-field input,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-field select {
  color: var(--vb-dark-heading);
  background-color: var(--vb-dark-bg);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-field input:focus,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-field select:focus {
  border-color: var(--button-primary-color);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-results {
  border-color: var(--vb-dark-border);
}

/* Výsledky hledání na tmavém podkladu jako pole, vybraná a najetá položka výrazně světlejší */
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-result {
  color: var(--vb-dark-text);
  background: var(--vb-dark-bg);
  border-bottom-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-result:hover {
  color: #fafafa;
  background: #393939;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-result.is-active {
  color: #fafafa;
  background: #474747;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-cancel {
  color: #fafafa;
  background: #393939;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-cancel:hover {
  background: #474747;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-link-modal-insert:hover:not(:disabled) {
  color: var(--vb-dark-button-text, #161616);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-file-modal-result {
  background: var(--vb-dark-surface);
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-file-modal-result:hover {
  background: var(--vb-dark-surface-hover);
  border-color: #393939;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal.frontend-editor-icon-picker .frontend-editor-file-modal-result:hover {
  border-color: var(--button-primary-color);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-file-modal-placeholder {
  color: var(--vb-dark-text-muted);
  background: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-editor-thumb {
  border-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-dropzone {
  color: var(--vb-dark-text);
  background: var(--vb-dark-surface);
  border-color: #393939;
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-dropzone:hover,
html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-dropzone.is-dragover {
  color: var(--vb-dark-heading);
  background: var(--vb-dark-surface-hover);
  border-color: var(--button-primary-color);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-status {
  color: var(--vb-dark-text);
  background: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .frontend-editor-link-modal .frontend-editor-image-status.is-error {
  color: #ff8a80;
  background: rgba(179, 38, 30, 0.25);
}

/* Čárkované rámečky polí mají v tmavém režimu jednu barvu: frontend-editor.css je kreslí
   currentColor, takže se lišily podle barvy textu pole. Aktivní pole (plný rámeček
   v barvě značky) zůstává beze změny. */
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-editable:not(.frontend-editor-editing)::before,
html[data-vb-theme="dark"] .frontend-editor-module.editing .fe-alert-type-header::before {
  border-color: var(--vb-dark-heading);
}

/* Prázdná poznámka a prázdný text: místo poloviční průhlednosti celého bloku (ztlumila
   by i rámečky) tlumený text */
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-empty-alert,
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-empty-text {
  opacity: 1;
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-empty-alert:not(:focus-within) .fe-alert-type-header,
html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-empty-text:not(:focus-within) {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .frontend-editor-module.editing .frontend-editor-icon-add {
  border-color: var(--vb-dark-border);
  color: var(--vb-dark-text-muted);
}

/* Legenda modulu poměrů barev (inline styly z module-color-ratio-chart.js) */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-chart-legend-text: var(--vb-dark-text);
  --vb-chart-legend-border: var(--vb-dark-border);
  --vb-chart-outline: var(--vb-dark-border);
  --vb-gradient-border: var(--vb-dark-border);
  /* Graf hlasu a tonality (module-chart.php): tmavší linka, aby vynikly hodnoty */
  --vb-chart-track: #383838;
  /* Proces tvorby (module-idea-process.php): neaktivní kroky tmavé, aktivní v barvě tlačítek */
  --vb-process-step-surface: var(--vb-dark-surface-raised);
  --vb-process-step-border: var(--vb-dark-border);
  --vb-process-step-text: #c6c6c6;
  --vb-process-step-done-text: #fafafa;
  --vb-process-step-description: var(--vb-dark-text);
  /* Používané řezy písma (module-font.php) */
  --vb-font-style-item-surface: var(--vb-dark-surface-raised);
  --vb-font-style-item-border: var(--vb-dark-border);
  --vb-font-style-item-text: var(--vb-dark-heading);
  /* Kontrola kontrastu (module-color-contrast-checker): kroužky vzorníku s tmavým obrysem
     by na tmavé ploše splynuly, štítky AAA/AA a Neprošlo tlumené místo pastelových */
  --vb-contrast-color-border: rgba(255, 255, 255, 0.18);
  --vb-contrast-pass-surface: rgba(76, 175, 80, 0.16);
  --vb-contrast-pass-text: #7bc67e;
  --vb-contrast-fail-surface: rgba(255, 0, 42, 0.16);
  --vb-contrast-fail-text: #ff6b81;
}

/* Kontrola kontrastu: čtverečky barev a rozbalovací vzorník (module-color-contrast-checker.css) */
html[data-vb-theme="dark"] .contrast-checker .color-swatch {
  border-color: rgba(255, 255, 255, 0.18);
}

html[data-vb-theme="dark"] .contrast-checker .color-swatch:hover {
  border-color: rgba(255, 255, 255, 0.32);
}

html[data-vb-theme="dark"] .contrast-checker .color-swatch[aria-expanded="true"] {
  border-color: rgba(255, 255, 255, 0.45);
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.12);
}

html[data-vb-theme="dark"] .vb-contrast-popover {
  background: var(--vb-dark-surface-raised);
  border-color: var(--vb-dark-border);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}

html[data-vb-theme="dark"] .vb-contrast-group-row:not(:last-child)::after {
  background-color: var(--vb-dark-border);
}

html[data-vb-theme="dark"] .vb-contrast-group-label {
  color: var(--vb-dark-text-muted);
}

html[data-vb-theme="dark"] .vb-contrast-color-picker {
  border-color: rgba(255, 255, 255, 0.18);
}

html[data-vb-theme="dark"] .vb-contrast-color-btn.active,
html[data-vb-theme="dark"] .vb-contrast-color-picker.active {
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.35);
}

html[data-vb-theme="dark"] .vb-contrast-color-btn:focus-visible,
html[data-vb-theme="dark"] .vb-contrast-color-picker:focus-visible {
  outline-color: rgba(255, 255, 255, 0.6);
}

html[data-vb-theme="dark"] .vb-contrast-color-reset {
  background: var(--vb-dark-surface);
  border-color: rgba(255, 255, 255, 0.18);
}

html[data-vb-theme="dark"] .vb-contrast-color-reset svg {
  color: var(--vb-dark-text);
}

html[data-vb-theme="dark"] .vb-contrast-color-reset:hover {
  border-color: rgba(255, 255, 255, 0.32);
}

html[data-vb-theme="dark"] .vb-contrast-color-reset:hover svg {
  color: var(--vb-dark-heading);
}

/* Vzorníky barev, palety a poměr barev: moduly si --button-primary-color nastavují inline
   (module-color-swatch.php, module-color-ratio-chart.php, color-palette.js) jako
   var(--vb-theme-button-primary, <barva z Designu>), proto token tlačítek dostanou tady.
   Aktivní záložka má bílý text a podtržení v barvě tlačítek tmavého režimu. */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-theme-button-primary: var(--vb-dark-button-color, #ffffff);
  --vb-theme-button-text: var(--vb-dark-button-text, #161616);
}

html[data-vb-theme="dark"] .format-tab.active,
html[data-vb-theme="dark"] .format-tab:hover,
html[data-vb-theme="dark"] .vb-tabs__tab--switch[aria-selected="true"] {
  color: #ffffff;
}

/* Obrázek s body: body leží na nezměněném obrázku, mají barvu tlačítek a odkazů z Designu
   (dynamické CSS ji vypisuje jako --vb-design-*) */
html[data-vb-theme="dark"] .vb-hotspots-image-wrap,
html[data-vb-theme="dark"] .vb-hotspot-legend {
  --button-primary-color: var(--vb-design-button-primary-color);
  --link-color: var(--vb-design-link-color);
}

/* Body v legendě pod obrázkem leží na tmavé kartě: tmavý prstenec místo bílého
   (body na obrázku si bílý prstenec nechávají) */
html[data-vb-theme="dark"] .vb-hotspot-dot--legend {
  box-shadow: 0 0 0 2px #000, 0 2px 6px rgba(0, 0, 0, 0.4);
}

/* Obrysy gradientů a poměru barev: stejná tmavě šedá jako rámečky karet */
html[data-vb-theme="dark"] .vb-tabs__list--switch,
html[data-vb-theme="dark"] .chart-wrapper,
html[data-vb-theme="dark"] .color-legend-item {
  border-color: var(--vb-dark-border);
}

/* Tlačítka frontend editoru (tužka, ozubené kolo) zapuštěná do tmavého režimu */
html[data-vb-theme="dark"] .frontend-editor-module > .frontend-editor-module-btn {
  color: var(--vb-dark-heading);
  background: var(--vb-dark-surface-raised);
  box-shadow: 0 0 0 1px var(--vb-dark-border), 0 2px 8px rgba(0, 0, 0, 0.4);
}

html[data-vb-theme="dark"] .frontend-editor-module > .frontend-editor-module-btn:hover {
  background: var(--vb-dark-surface-hover);
}

/* Přepínač v hlavičce: měsíc ve světlém režimu, slunce v tmavém */
/* Měsíc je inline SVG: zarovnání na účaří jako glyf ikonového fontu (sestup 180/1200 em) */
.vb-theme-toggle__moon {
  vertical-align: -0.15em;
}

.vb-theme-toggle__sun,
html[data-vb-theme="dark"] .vb-theme-toggle__moon {
  display: none;
}

html[data-vb-theme="dark"] .vb-theme-toggle__sun {
  display: inline;
}

/* Náhled písma: znaky „Aa“ a název písma (styles.css s !important, proto token)
   a text testeru písma (module-font.php) */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) {
  --vb-font-preview-color: #fafafa;
}

html[data-vb-theme="dark"] .font-test-display {
  color: var(--vb-font-preview-color);
}

/* Okno Připojit AI agenta (mcp-modal.css): bloky s kódem na černé */
html[data-vb-theme="dark"] .vb-mcp-modal-block {
  background: #000000;
}

html[data-vb-theme="dark"] .vb-mcp-modal-code {
  color: var(--vb-dark-text);
}

/* Kolečko posuvníků: barva tlačítek tmavého režimu, bez ní #fafafa (styles.css
   a tester písma v module-font.php mají barvu tlačítek z Designu) */
html[data-vb-theme="dark"] input[type=range]::-webkit-slider-thumb {
  background: var(--vb-dark-button-color, #fafafa);
}

html[data-vb-theme="dark"] input[type=range]::-moz-range-thumb {
  background: var(--vb-dark-button-color, #fafafa);
}

/* Dráha posuvníků (styles.css input[type=range] v barvě obrysů): o stupeň světlejší */
html[data-vb-theme="dark"] input[type=range] {
  background-color: #393939;
  border-color: #393939;
}

/* Sekce Text: blok kódu a řádkový kód z editoru (styles.css, #f2f2f2 a #e1e1e1) */
html[data-vb-theme="dark"] .module--module-text .col-md-8 pre {
  color: var(--vb-dark-heading);
  background-color: #000000;
}

html[data-vb-theme="dark"] .module--module-text .col-md-8 code {
  background-color: var(--vb-dark-surface-hover);
}

html[data-vb-theme="dark"] .module--module-text .col-md-8 pre code {
  background-color: transparent;
}

/* Odkazy v textu: bez vlastní barvy odkazů (Design → Tmavý režim) bílé, po najetí
   #fafafa a podtržené. Navigace a boční menu (seznamy odkazů) se nemění. */
html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) :is(p, li, td, th, blockquote, figcaption, dd) a:not(.btn):not(:is(nav, [class*="sidebar"], .logo-page-sibling-nav) a) {
  /* Token přímo na odkazu: barvu odkazů nastavují i pravidla s !important přes --link-color */
  --link-color: var(--vb-dark-link-color, #fafafa);
  color: var(--link-color);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.2em;
}

html[data-vb-theme="dark"] body > :not(header, .frontend-editor-link-modal-backdrop) :is(p, li, td, th, blockquote, figcaption, dd) a:not(.btn):not(:is(nav, [class*="sidebar"], .logo-page-sibling-nav) a):hover {
  --link-color: #fafafa;
  text-decoration-line: underline;
}

/* Ano/ne ikony v tabulkách vlastností formátů loga (logo.php) a použití písma: bez barev,
   fajfka světlá, křížek tlumený. Třídy .text-success-color / .text-danger-color mají
   !important přes tokeny, proto tokeny přímo na ikoně. */
html[data-vb-theme="dark"] :is(.format-check, .font-usage-icon) {
  --success-color: #fafafa;
  --danger-color: #6f6f6f;
}

/* Pruh s názvem pod náhledem karty (group-page.php, default.php, multibrand-page.php,
   module-portal-image-cards.php s .bg-white, logos.php s --vb-card-footer-surface):
   výraznější plocha (Gray 90) */
html[data-vb-theme="dark"] :is(article, a) > .card-main.border-top.radius-bottom {
  --vb-surface-white: #262626;
  --vb-card-footer-surface: #262626;
  background-color: #262626;
}
}
/* assets/css/vb/utilities.css */
@layer vb.utilities{
/*
 * Visualbook – utility (vrstva vb.utilities, plán 82, F1)
 *
 * UZAVŘENÝ seznam. Vychází z utilit Bootstrapu 4, které šablony opravdu používají
 * (inventura 14. 10. 2026), převedených na názvy vb-. Do šablon se dostávají v F3/F4
 * spolu s převáděnou komponentou (zásada 7), do té doby je nic nepoužívá.
 *
 * Schéma názvů (popis v assets/css/vb/README.md):
 *   vb-<vlastnost>-<hodnota>          vb-d-flex, vb-mb-3, vb-justify-content-between
 *   vb-<vlastnost>-<bp>-<hodnota>     vb-d-md-flex, vb-mb-md-3 (bp = sm/md/lg/xl, od šířky OKNA
 *                                     576/768/992/1200 px, mobile-first jako Bootstrap)
 *   Mezery: m/p + t/b (blok začátek/konec), s/e (řádek začátek/konec), x/y (obě strany),
 *   hodnoty 0–5 = --vb-space-0 … --vb-space-5. Logické vlastnosti (margin-block-end …).
 *
 * Pravidla: bez important deklarací (vrstva vb.utilities vyhrává nad komponentami bez něj),
 * žádná třída skládaná z řetězce, nová utilita jen sem a jen když ji šablona potřebuje.
 * Víc než ~4 utility na prvku = kandidát na komponentu.
 * Vrstvu (@layer vb.utilities) doplní scripts/build-css.php.
 */


/* Display */
.vb-d-none { display: none; }
.vb-d-inline { display: inline; }
.vb-d-inline-block { display: inline-block; }
.vb-d-block { display: block; }
.vb-d-flex { display: flex; }
.vb-d-inline-flex { display: inline-flex; }

/* Mezery (škála --vb-space-0 … 5) */
.vb-m-0 { margin: var(--vb-space-0); }
.vb-m-1 { margin: var(--vb-space-1); }
.vb-m-2 { margin: var(--vb-space-2); }
.vb-m-3 { margin: var(--vb-space-3); }
.vb-m-4 { margin: var(--vb-space-4); }
.vb-m-5 { margin: var(--vb-space-5); }
.vb-mt-0 { margin-block-start: var(--vb-space-0); }
.vb-mt-1 { margin-block-start: var(--vb-space-1); }
.vb-mt-2 { margin-block-start: var(--vb-space-2); }
.vb-mt-3 { margin-block-start: var(--vb-space-3); }
.vb-mt-4 { margin-block-start: var(--vb-space-4); }
.vb-mt-5 { margin-block-start: var(--vb-space-5); }
.vb-mb-0 { margin-block-end: var(--vb-space-0); }
.vb-mb-1 { margin-block-end: var(--vb-space-1); }
.vb-mb-2 { margin-block-end: var(--vb-space-2); }
.vb-mb-3 { margin-block-end: var(--vb-space-3); }
.vb-mb-4 { margin-block-end: var(--vb-space-4); }
.vb-mb-5 { margin-block-end: var(--vb-space-5); }
.vb-ms-0 { margin-inline-start: var(--vb-space-0); }
.vb-ms-1 { margin-inline-start: var(--vb-space-1); }
.vb-ms-2 { margin-inline-start: var(--vb-space-2); }
.vb-ms-3 { margin-inline-start: var(--vb-space-3); }
.vb-ms-4 { margin-inline-start: var(--vb-space-4); }
.vb-ms-5 { margin-inline-start: var(--vb-space-5); }
.vb-me-0 { margin-inline-end: var(--vb-space-0); }
.vb-me-1 { margin-inline-end: var(--vb-space-1); }
.vb-me-2 { margin-inline-end: var(--vb-space-2); }
.vb-me-3 { margin-inline-end: var(--vb-space-3); }
.vb-me-4 { margin-inline-end: var(--vb-space-4); }
.vb-me-5 { margin-inline-end: var(--vb-space-5); }
.vb-mx-0 { margin-inline: var(--vb-space-0); }
.vb-mx-1 { margin-inline: var(--vb-space-1); }
.vb-mx-2 { margin-inline: var(--vb-space-2); }
.vb-mx-3 { margin-inline: var(--vb-space-3); }
.vb-mx-4 { margin-inline: var(--vb-space-4); }
.vb-mx-5 { margin-inline: var(--vb-space-5); }
.vb-my-0 { margin-block: var(--vb-space-0); }
.vb-my-1 { margin-block: var(--vb-space-1); }
.vb-my-2 { margin-block: var(--vb-space-2); }
.vb-my-3 { margin-block: var(--vb-space-3); }
.vb-my-4 { margin-block: var(--vb-space-4); }
.vb-my-5 { margin-block: var(--vb-space-5); }
.vb-p-0 { padding: var(--vb-space-0); }
.vb-p-1 { padding: var(--vb-space-1); }
.vb-p-2 { padding: var(--vb-space-2); }
.vb-p-3 { padding: var(--vb-space-3); }
.vb-p-4 { padding: var(--vb-space-4); }
.vb-p-5 { padding: var(--vb-space-5); }
.vb-pt-0 { padding-block-start: var(--vb-space-0); }
.vb-pt-1 { padding-block-start: var(--vb-space-1); }
.vb-pt-2 { padding-block-start: var(--vb-space-2); }
.vb-pt-3 { padding-block-start: var(--vb-space-3); }
.vb-pt-4 { padding-block-start: var(--vb-space-4); }
.vb-pt-5 { padding-block-start: var(--vb-space-5); }
.vb-pb-0 { padding-block-end: var(--vb-space-0); }
.vb-pb-1 { padding-block-end: var(--vb-space-1); }
.vb-pb-2 { padding-block-end: var(--vb-space-2); }
.vb-pb-3 { padding-block-end: var(--vb-space-3); }
.vb-pb-4 { padding-block-end: var(--vb-space-4); }
.vb-pb-5 { padding-block-end: var(--vb-space-5); }
.vb-ps-0 { padding-inline-start: var(--vb-space-0); }
.vb-ps-1 { padding-inline-start: var(--vb-space-1); }
.vb-ps-2 { padding-inline-start: var(--vb-space-2); }
.vb-ps-3 { padding-inline-start: var(--vb-space-3); }
.vb-ps-4 { padding-inline-start: var(--vb-space-4); }
.vb-ps-5 { padding-inline-start: var(--vb-space-5); }
.vb-pe-0 { padding-inline-end: var(--vb-space-0); }
.vb-pe-1 { padding-inline-end: var(--vb-space-1); }
.vb-pe-2 { padding-inline-end: var(--vb-space-2); }
.vb-pe-3 { padding-inline-end: var(--vb-space-3); }
.vb-pe-4 { padding-inline-end: var(--vb-space-4); }
.vb-pe-5 { padding-inline-end: var(--vb-space-5); }
.vb-px-0 { padding-inline: var(--vb-space-0); }
.vb-px-1 { padding-inline: var(--vb-space-1); }
.vb-px-2 { padding-inline: var(--vb-space-2); }
.vb-px-3 { padding-inline: var(--vb-space-3); }
.vb-px-4 { padding-inline: var(--vb-space-4); }
.vb-px-5 { padding-inline: var(--vb-space-5); }
.vb-py-0 { padding-block: var(--vb-space-0); }
.vb-py-1 { padding-block: var(--vb-space-1); }
.vb-py-2 { padding-block: var(--vb-space-2); }
.vb-py-3 { padding-block: var(--vb-space-3); }
.vb-py-4 { padding-block: var(--vb-space-4); }
.vb-py-5 { padding-block: var(--vb-space-5); }

/* Flex */
.vb-flex-row { flex-direction: row; }
.vb-flex-column { flex-direction: column; }
.vb-flex-wrap { flex-wrap: wrap; }
.vb-flex-nowrap { flex-wrap: nowrap; }
.vb-flex-grow-0 { flex-grow: 0; }
.vb-flex-grow-1 { flex-grow: 1; }
.vb-flex-shrink-0 { flex-shrink: 0; }

/* Zarovnání */
.vb-align-items-start { align-items: flex-start; }
.vb-align-items-center { align-items: center; }
.vb-align-items-stretch { align-items: stretch; }
.vb-align-self-center { align-self: center; }
.vb-align-content-center { align-content: center; }
.vb-justify-content-start { justify-content: flex-start; }
.vb-justify-content-center { justify-content: center; }
.vb-justify-content-end { justify-content: flex-end; }
.vb-justify-content-between { justify-content: space-between; }

/* Text */
.vb-text-center { text-align: center; }
.vb-text-end { text-align: end; }
.vb-text-nowrap { white-space: nowrap; }
.vb-text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vb-text-uppercase { text-transform: uppercase; }
.vb-text-decoration-none { text-decoration: none; }
.vb-fw-bold { font-weight: 700; }
.vb-small { font-size: 0.875em; font-weight: 400; }

/* Rozměry a pozice */
.vb-w-100 { inline-size: 100%; }
.vb-h-100 { block-size: 100%; }
.vb-position-relative { position: relative; }
.vb-position-absolute { position: absolute; }
.vb-overflow-hidden { overflow: hidden; }

/* Ostatní */
.vb-stretched-link::after { position: absolute; inset: 0; z-index: 1; content: ""; }
.vb-img-fluid { max-inline-size: 100%; block-size: auto; }
.vb-list-unstyled { padding-inline-start: 0; list-style: none; }
.vb-invisible { visibility: hidden; }
.vb-visually-hidden { position: absolute; inline-size: 1px; block-size: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* Od šířky okna 576px (sm) */
@media (min-width: 576px) {
  .vb-d-sm-none { display: none; }
  .vb-d-sm-inline { display: inline; }
  .vb-d-sm-inline-block { display: inline-block; }
  .vb-d-sm-block { display: block; }
  .vb-d-sm-flex { display: flex; }
  .vb-d-sm-inline-flex { display: inline-flex; }
  .vb-mb-sm-0 { margin-block-end: var(--vb-space-0); }
  .vb-align-items-sm-center { align-items: center; }
}

/* Od šířky okna 768px (md) */
@media (min-width: 768px) {
  .vb-d-md-none { display: none; }
  .vb-d-md-inline { display: inline; }
  .vb-d-md-inline-block { display: inline-block; }
  .vb-d-md-block { display: block; }
  .vb-d-md-flex { display: flex; }
  .vb-d-md-inline-flex { display: inline-flex; }
  .vb-mb-md-3 { margin-block-end: var(--vb-space-3); }
}

/* Od šířky okna 992px (lg) */
@media (min-width: 992px) {
  .vb-d-lg-none { display: none; }
  .vb-d-lg-inline { display: inline; }
  .vb-d-lg-inline-block { display: inline-block; }
  .vb-d-lg-block { display: block; }
  .vb-d-lg-flex { display: flex; }
  .vb-d-lg-inline-flex { display: inline-flex; }
  .vb-pe-lg-3 { padding-inline-end: var(--vb-space-3); }
}

/* Od šířky okna 1200px (xl) */
@media (min-width: 1200px) {
  .vb-d-xl-none { display: none; }
  .vb-d-xl-inline { display: inline; }
  .vb-d-xl-inline-block { display: inline-block; }
  .vb-d-xl-block { display: block; }
  .vb-d-xl-flex { display: flex; }
  .vb-d-xl-inline-flex { display: inline-flex; }
  .vb-align-items-xl-center { align-items: center; }
  .vb-justify-content-xl-start { justify-content: flex-start; }
  .vb-justify-content-xl-center { justify-content: center; }
}
}
