/* 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:#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:#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;
}

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(--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: 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: 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: 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, white 25%, transparent 25%, transparent 50%, white 50%, 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: polarita podle coveru 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). Sekundární karty
   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;
  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: #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/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;
  /* Dřív <a> s margin-bottom:-1px a height:100% uvnitř <li>: o 1 px nižší než obsah,
     text svisle na středu. Stejná výška i poloha textu. */
  padding: calc(0.5rem - 0.5px) 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/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/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; }
}
}
