From 84e180b82cbaa125e185aed18addd152eed0ee05 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Wed, 17 Sep 2025 20:32:10 +0100 Subject: [PATCH] Docs: Improve Doxygen output --- .gitignore | 2 +- docs/doxygen/Doxyfile | 722 ++- docs/doxygen/DoxygenLayout.xml | 265 + docs/doxygen/Makefile | 15 - docs/doxygen/README.md | 21 + docs/doxygen/build.py | 130 + docs/doxygen/css/doxygen-juce-overrides.css | 249 + docs/doxygen/css/header.css | 5342 +++++++++++++++++++ docs/doxygen/css/tokyo-night-dark.min.css | 8 + docs/doxygen/error.html | 4 + docs/doxygen/favicon.ico | Bin 0 -> 15086 bytes docs/doxygen/footer.html | 87 + docs/doxygen/header.html | 108 + docs/doxygen/index.html | 12 + docs/doxygen/js/cpp.min.js | 47 + docs/doxygen/js/highlight.min.js | 354 ++ docs/doxygen/make.bat | 2 - docs/doxygen/process_source_files.py | 180 - 18 files changed, 7070 insertions(+), 478 deletions(-) create mode 100644 docs/doxygen/DoxygenLayout.xml delete mode 100644 docs/doxygen/Makefile create mode 100644 docs/doxygen/README.md create mode 100644 docs/doxygen/build.py create mode 100644 docs/doxygen/css/doxygen-juce-overrides.css create mode 100644 docs/doxygen/css/header.css create mode 100644 docs/doxygen/css/tokyo-night-dark.min.css create mode 100644 docs/doxygen/error.html create mode 100644 docs/doxygen/favicon.ico create mode 100644 docs/doxygen/footer.html create mode 100644 docs/doxygen/header.html create mode 100644 docs/doxygen/index.html create mode 100644 docs/doxygen/js/cpp.min.js create mode 100644 docs/doxygen/js/highlight.min.js delete mode 100644 docs/doxygen/make.bat delete mode 100644 docs/doxygen/process_source_files.py diff --git a/.gitignore b/.gitignore index 79010840e2..5cd46b7200 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,7 @@ profile **/Builds/MacOSX/**/Index **/Builds/MacOSX/**/Intermediates.noindex **/doxygen/doc -**/doxygen/build +**/doxygen/xml **/.idea extras/Projucer/JUCECompileEngine.dylib diff --git a/docs/doxygen/Doxyfile b/docs/doxygen/Doxyfile index 9ad55df62c..20ff961c27 100644 --- a/docs/doxygen/Doxyfile +++ b/docs/doxygen/Doxyfile @@ -1,7 +1,7 @@ -# Doxyfile 1.9.8 +# Doxyfile 1.14.0 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. +# Doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. @@ -15,10 +15,10 @@ # # Note: # -# Use doxygen to compare the used configuration file with the template +# Use Doxygen to compare the used configuration file with the template # configuration file: # doxygen -x [configFile] -# Use doxygen to compare the used configuration file with the template +# Use Doxygen to compare the used configuration file with the template # configuration file without replacing the environment variables or CMake type # replacement variables: # doxygen -x_noenv [configFile] @@ -51,7 +51,7 @@ PROJECT_NAME = JUCE PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a +# for a project that appears at the top of each page and should give viewers a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = @@ -63,18 +63,24 @@ PROJECT_BRIEF = PROJECT_LOGO = +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = favicon.ico + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If +# entered, it will be relative to the location where Doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format # and will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes +# option can be useful when feeding Doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise cause # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to # control the number of sub-directories. # The default value is: NO. @@ -92,7 +98,7 @@ CREATE_SUBDIRS = NO CREATE_SUBDIRS_LEVEL = 8 -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. @@ -101,7 +107,7 @@ CREATE_SUBDIRS_LEVEL = 8 ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this +# documentation generated by Doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English @@ -115,14 +121,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -143,13 +149,13 @@ REPEAT_BRIEF = YES ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief +# Doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. @@ -157,7 +163,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -167,11 +173,11 @@ FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to +# If left blank the directory from which Doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. +# will be relative from the directory where Doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @@ -185,41 +191,42 @@ STRIP_FROM_PATH = STRIP_FROM_INC_PATH = -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't +# If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but +# less readable) file names. This can be useful if your file system doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the +# first line (until the first dot, question mark or exclamation mark) of a +# Javadoc-style comment as the brief description. If set to NO, the Javadoc- +# style will behave just like regular Qt-style comments (thus requiring an +# explicit @brief command for a brief description.) # The default value is: NO. JAVADOC_AUTOBRIEF = YES -# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be -# interpreted by doxygen. +# interpreted by Doxygen. # The default value is: NO. JAVADOC_BANNER = NO -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first +# line (until the first dot, question mark or exclamation mark) of a Qt-style +# comment as the brief description. If set to NO, the Qt-style will behave just +# like regular Qt-style comments (thus requiring an explicit \brief command for +# a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this @@ -231,10 +238,10 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO -# By default Python docstrings are displayed as preformatted text and doxygen's +# By default Python docstrings are displayed as preformatted text and Doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the -# doxygen's special commands can be used and the contents of the docstring -# documentation blocks is shown as doxygen documentation. +# Doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as Doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES @@ -245,7 +252,7 @@ PYTHON_DOCSTRING = YES INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. @@ -336,30 +343,30 @@ OPTIMIZE_OUTPUT_SLICE = NO # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# language is one of the parsers supported by Doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files). For instance to make doxygen treat .inc files +# default for Fortran type files). For instance to make Doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. When specifying no_extension you should add +# the files are not read by Doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = txt=md -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# The output of markdown processing is further processed by Doxygen, so you can +# mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. @@ -369,7 +376,7 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. +# Minimum value: 0, maximum value: 99, default value: 6. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -385,20 +392,29 @@ TOC_INCLUDE_HEADINGS = 0 MARKDOWN_ID_STYLE = DOXYGEN -# When enabled doxygen tries to link words that correspond to documented +# When enabled Doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. +# globally by setting AUTOLINK_SUPPORT to NO. Words listed in the +# AUTOLINK_IGNORE_WORDS tag are excluded from automatic linking. # The default value is: YES. AUTOLINK_SUPPORT = YES +# This tag specifies a list of words that, when matching the start of a word in +# the documentation, will suppress auto links generation, if it is enabled via +# AUTOLINK_SUPPORT. This list does not affect links explicitly created using \# +# or the \link or commands. +# This tag requires that the tag AUTOLINK_SUPPORT is set to YES. + +AUTOLINK_IGNORE_WORDS = + # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and +# tag to YES in order to let Doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES @@ -410,16 +426,16 @@ BUILTIN_STL_SUPPORT = YES CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. +# Doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. @@ -428,7 +444,7 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first +# tag is set to YES then Doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. @@ -486,18 +502,18 @@ TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The +# code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# Doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest +# symbols. At the end of a run Doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use -# during processing. When set to 0 doxygen will based this on the number of +# The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use +# during processing. When set to 0 Doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple @@ -521,7 +537,7 @@ TIMESTAMP = NO # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -587,7 +603,7 @@ EXTRACT_ANON_NSPACES = NO RESOLVE_UNNAMED_PARAMS = YES -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. @@ -595,7 +611,7 @@ RESOLVE_UNNAMED_PARAMS = YES HIDE_UNDOC_MEMBERS = NO -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # will also hide undocumented C++ concepts if enabled. This option has no effect @@ -604,14 +620,22 @@ HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = YES -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# If the HIDE_UNDOC_NAMESPACES tag is set to YES, Doxygen will hide all +# undocumented namespaces that are normally visible in the namespace hierarchy. +# If set to NO, these namespaces will be included in the various overviews. This +# option has no effect if EXTRACT_ALL is enabled. +# The default value is: YES. + +HIDE_UNDOC_NAMESPACES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = YES -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -625,7 +649,7 @@ HIDE_IN_BODY_DOCS = YES INTERNAL_DOCS = NO -# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# With the correct setting of option CASE_SENSE_NAMES Doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly @@ -634,7 +658,7 @@ INTERNAL_DOCS = NO # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On -# Windows (including Cygwin) and MacOS, users should typically set this option +# Windows (including Cygwin) and macOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # Possible values are: SYSTEM, NO and YES. @@ -642,14 +666,14 @@ INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. @@ -662,7 +686,7 @@ HIDE_COMPOUND_REFERENCE= NO SHOW_HEADERFILE = NO -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -675,7 +699,7 @@ SHOW_INCLUDE_FILES = NO SHOW_GROUPED_MEMB_INC = NO -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. @@ -687,14 +711,14 @@ FORCE_LOCAL_INCLUDES = NO INLINE_INFO = NO -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = NO -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. @@ -702,7 +726,7 @@ SORT_MEMBER_DOCS = NO SORT_BRIEF_DOCS = NO -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. @@ -714,7 +738,7 @@ SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. @@ -731,11 +755,11 @@ SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = NO -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. @@ -805,25 +829,25 @@ SHOW_FILES = NO SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from +# Doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file +# by Doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated +# by Doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can +# that represents Doxygen's defaults, run Doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# Note that if you run Doxygen from a directory containing a file called +# DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = @@ -838,19 +862,35 @@ LAYOUT_FILE = CITE_BIB_FILES = +# The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH +# environment variable) so that external tools such as latex and gs can be +# found. +# Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the +# path already specified by the PATH variable, and are added in the order +# specified. +# Note: This option is particularly useful for macOS version 14 (Sonoma) and +# higher, when running Doxygen from Doxywizard, because in this case any user- +# defined changes to the PATH are ignored. A typical example on macOS is to set +# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin +# together with the standard path, the full search path used by doxygen when +# launching external tools will then become +# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +EXTERNAL_TOOL_PATH = + #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the +# standard output by Doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -858,14 +898,14 @@ QUIET = YES WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. @@ -873,8 +913,8 @@ WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES -# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete -# function parameter documentation. If set to NO, doxygen will accept that some +# If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete +# function parameter documentation. If set to NO, Doxygen will accept that some # parameters have no documentation without warning. # The default value is: YES. @@ -882,7 +922,7 @@ WARN_IF_INCOMPLETE_DOC = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong parameter +# value. If set to NO, Doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC @@ -890,20 +930,28 @@ WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = NO -# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about -# undocumented enumeration values. If set to NO, doxygen will accept +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about +# undocumented enumeration values. If set to NO, Doxygen will accept # undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: NO. WARN_IF_UNDOC_ENUM_VAL = NO -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# If WARN_LAYOUT_FILE option is set to YES, Doxygen will warn about issues found +# while parsing the user defined layout file, such as missing or wrong elements. +# See also LAYOUT_FILE for details. If set to NO, problems with the layout file +# will be suppressed. +# The default value is: YES. + +WARN_LAYOUT_FILE = YES + +# If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS -# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but -# at the end of the doxygen process doxygen will return with a non-zero status. -# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves -# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the Doxygen process Doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not # write the warning messages in between other messages but write them at the end # of a run, in case a WARN_LOGFILE is defined the warning messages will be # besides being in the defined file also be shown at the end of a run, unless @@ -914,7 +962,7 @@ WARN_IF_UNDOC_ENUM_VAL = NO WARN_AS_ERROR = NO -# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# The WARN_FORMAT tag determines the format of the warning messages that Doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will @@ -927,7 +975,7 @@ WARN_FORMAT = "$file:$line: $text" # In the $text part of the WARN_FORMAT command it is possible that a reference # to a more specific place is given. To make it easier to jump to this place -# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# (outside of Doxygen) the user can define a custom "cut" / "paste" string. # Example: # WARN_LINE_FORMAT = "'vi $file +$line'" # See also: WARN_FORMAT @@ -954,12 +1002,10 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = build \ - "build/JUCE Module Format.md" \ - "build/CMake API.md" +INPUT = "../../modules" # This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. @@ -969,12 +1015,12 @@ INPUT = build \ INPUT_ENCODING = UTF-8 # This tag can be used to specify the character encoding of the source files -# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# that Doxygen parses. The INPUT_FILE_ENCODING tag can be used to specify # character encoding on a per file pattern basis. Doxygen will compare the file # name with each pattern and apply the encoding instead of the default -# INPUT_ENCODING) if there is a match. The character encodings are a list of the -# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding -# "INPUT_ENCODING" for further information on supported encodings. +# INPUT_ENCODING if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. INPUT_FILE_ENCODING = @@ -984,17 +1030,17 @@ INPUT_FILE_ENCODING = # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. +# read by Doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, +# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be +# provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = juce_*.h \ juce_*.dox @@ -1009,24 +1055,24 @@ RECURSIVE = YES # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # -# Note that relative paths are relative to the directory from which doxygen is +# Note that relative paths are relative to the directory from which Doxygen is # run. -EXCLUDE = build/juce_graphics/image_formats \ - build/juce_core/zip/zlib \ - build/juce_audio_formats/codecs/flac \ - build/juce_audio_formats/codecs/oggvorbis \ - build/juce_audio_devices/native \ - build/juce_audio_plugin_client/AU/AudioUnitSDK \ - build/juce_browser_plugin_client/juce_browser_plugin.h \ - build/juce_core/native \ - build/juce_events/native \ - build/juce_graphics/native \ - build/juce_gui_basics/native \ - build/juce_gui_extra/native \ - build/juce_opengl/native \ - build/juce_video/native \ - build/juce_dsp/native +EXCLUDE = ../../modules/juce_graphics/image_formats \ + ../../modules/juce_core/zip/zlib \ + ../../modules/juce_audio_formats/codecs/flac \ + ../../modules/juce_audio_formats/codecs/oggvorbis \ + ../../modules/juce_audio_devices/native \ + ../../modules/juce_audio_plugin_client/AU/AudioUnitSDK \ + ../../modules/juce_browser_plugin_client/juce_browser_plugin.h \ + ../../modules/juce_core/native \ + ../../modules/juce_events/native \ + ../../modules/juce_graphics/native \ + ../../modules/juce_gui_basics/native \ + ../../modules/juce_gui_extra/native \ + ../../modules/juce_opengl/native \ + ../../modules/juce_video/native \ + ../../modules/juce_dsp/native # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -1081,7 +1127,7 @@ EXAMPLE_RECURSIVE = YES IMAGE_PATH = -# The INPUT_FILTER tag can be used to specify a program that doxygen should +# The INPUT_FILTER tag can be used to specify a program that Doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # @@ -1096,14 +1142,14 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # -# Note that doxygen will use the data processed and written to standard output +# Note that Doxygen will use the data processed and written to standard output # for further processing, therefore nothing else, like debug statements or used # commands (so in case of a Windows batch file always use @echo OFF), should be # written to standard output. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. +# properly processed by Doxygen. INPUT_FILTER = @@ -1116,7 +1162,7 @@ INPUT_FILTER = # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. +# properly processed by Doxygen. FILTER_PATTERNS = @@ -1138,10 +1184,19 @@ FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. +# and want to reuse the introduction page also for the Doxygen output. USE_MDFILE_AS_MAINPAGE = +# If the IMPLICIT_DIR_DOCS tag is set to YES, any README.md file found in sub- +# directories of the project's root, is used as the documentation for that sub- +# directory, except when the README.md starts with a \dir, \page or \mainpage +# command. If set to NO, the README.md file needs to start with an explicit \dir +# command in order to be used as directory documentation. +# The default value is: YES. + +IMPLICIT_DIR_DOCS = NO + # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common # extension is to allow longer lines before the automatic comment starts. The @@ -1165,12 +1220,13 @@ FORTRAN_COMMENT_AFTER = 72 SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. @@ -1208,7 +1264,7 @@ REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# point to the HTML generated by the htags(1) tool instead of Doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. @@ -1222,14 +1278,14 @@ SOURCE_TOOLTIPS = YES # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # -# The result: instead of the source browser generated by doxygen, the links to +# The result: instead of the source browser generated by Doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. @@ -1261,7 +1317,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1282,40 +1338,40 @@ HTML_OUTPUT = doc HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a +# each generated HTML page. If the tag is left blank Doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. +# that Doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally +# for information on how to generate the default header that Doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description +# default header when upgrading to a newer version of Doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = header.html # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard +# generated HTML page. If the tag is left blank Doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. +# that Doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. +# the HTML output. If left blank Doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. +# sheet that Doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. @@ -1325,7 +1381,7 @@ HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. +# created by Doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. @@ -1339,7 +1395,7 @@ HTML_STYLESHEET = # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = css/header.css css/doxygen-juce-overrides.css css/tokyo-night-dark.min.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1349,20 +1405,20 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = js/highlight.min.js js/cpp.min.js # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. -# Possible values are: LIGHT always generate light mode output, DARK always -# generate dark mode output, AUTO_LIGHT automatically set the mode according to -# the user preference, use light mode if no preference is set (the default), -# AUTO_DARK automatically set the mode according to the user preference, use -# dark mode if no preference is set and TOGGLE allow to user to switch between +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between # light and dark mode via a button. # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE = AUTO_LIGHT +HTML_COLORSTYLE = TOGGLE # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1413,14 +1469,33 @@ HTML_DYNAMIC_MENUS = NO HTML_DYNAMIC_SECTIONS = NO -# If the HTML_CODE_FOLDING and SOURCE_BROWSER tags are set to YES then classes -# and functions can be dynamically folded and expanded in the generated HTML -# source code. +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_CODE_FOLDING = YES +# If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = NO + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1438,7 +1513,7 @@ HTML_INDEX_NUM_ENTRIES = 32 # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To -# create a documentation set, doxygen will generate a Makefile in the HTML +# create a documentation set, Doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at @@ -1486,18 +1561,18 @@ DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with -# a.o. the download links, offline the HTML help workshop was already many years -# in maintenance mode). You can download the HTML help workshop from the web -# archives at Installation executable (see: +# a.o. the download links, offline (the HTML help workshop was already many +# years in maintenance mode). You can download the HTML help workshop from the +# web archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for @@ -1517,7 +1592,7 @@ CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. +# Doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1559,7 +1634,7 @@ TOC_EXPAND = NO # protocol see https://www.sitemaps.org # This tag requires that the tag GENERATE_HTML is set to YES. -SITEMAP_URL = +SITEMAP_URL = $(JUCE_SITEMAP_URL) # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that @@ -1619,7 +1694,7 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path -# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1664,29 +1739,38 @@ DISABLE_INDEX = NO # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an -# example, the default style sheet generated by doxygen has an example that +# example, the default style sheet generated by Doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. -# Since the tree basically has the same information as the tab index, you could -# consider setting DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. +# Since the tree basically has more details information than the tab index, you +# could consider setting DISABLE_INDEX to YES when enabling this option. +# The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO -# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the -# FULL_SIDEBAR option determines if the side bar is limited to only the treeview -# area (value NO) or if it should extend to the full height of the window (value -# YES). Setting this to YES gives a layout similar to -# https://docs.readthedocs.io with more room for contents, but less room for the -# project logo, title, and description. If either GENERATE_TREEVIEW or -# DISABLE_INDEX is set to NO, this option has no effect. +# When GENERATE_TREEVIEW is set to YES, the PAGE_OUTLINE_PANEL option determines +# if an additional navigation panel is shown at the right hand side of the +# screen, displaying an outline of the contents of the main page, similar to +# e.g. https://developer.android.com/reference If GENERATE_TREEVIEW is set to +# NO, this option has no effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +PAGE_OUTLINE_PANEL = YES + +# When GENERATE_TREEVIEW is set to YES, the FULL_SIDEBAR option determines if +# the side bar is limited to only the treeview area (value NO) or if it should +# extend to the full height of the window (value YES). Setting this to YES gives +# a layout similar to e.g. https://docs.readthedocs.io with more room for +# contents, but less room for the project logo, title, and description. If +# GENERATE_TREEVIEW is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. +# Doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. @@ -1695,6 +1779,12 @@ FULL_SIDEBAR = NO ENUM_VALUES_PER_LINE = 4 +# When the SHOW_ENUM_VALUES tag is set doxygen will show the specified +# enumeration values besides the enumeration mnemonics. +# The default value is: NO. + +SHOW_ENUM_VALUES = NO + # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. @@ -1702,21 +1792,21 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 320 -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO -# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. OBFUSCATE_EMAILS = YES -# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. @@ -1729,7 +1819,7 @@ HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML +# Doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1773,7 +1863,7 @@ MATHJAX_VERSION = MathJax_2 # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported -# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. @@ -1807,7 +1897,7 @@ MATHJAX_RELPATH = http://www.mathjax.org/mathjax MATHJAX_EXTENSIONS = -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an @@ -1816,12 +1906,12 @@ MATHJAX_EXTENSIONS = MATHJAX_CODEFILE = -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and +# When the SEARCHENGINE tag is enabled Doxygen will generate a search box for +# the HTML output. The underlying search engine uses JavaScript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then +# For large projects the JavaScript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically @@ -1840,7 +1930,7 @@ SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and +# setting. When disabled, Doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing # and searching needs to be provided by external tools. See the section # "External Indexing and Searching" for details. @@ -1849,7 +1939,7 @@ SEARCHENGINE = YES SERVER_BASED_SEARCH = NO -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# When EXTERNAL_SEARCH tag is enabled Doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain the @@ -1894,7 +1984,7 @@ SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through Doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of @@ -1908,7 +1998,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, Doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1953,7 +2043,7 @@ MAKEINDEX_CMD_NAME = makeindex LATEX_MAKEINDEX_CMD = makeindex -# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# If the COMPACT_LATEX tag is set to YES, Doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1984,15 +2074,15 @@ EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for # the generated LaTeX document. The header should contain everything until the -# first chapter. If it is left blank doxygen will generate a standard header. It +# first chapter. If it is left blank Doxygen will generate a standard header. It # is highly recommended to start with a default header using # doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty # and then modify the file new_header.tex. See also section "Doxygen usage" for -# information on how to generate the default header that doxygen normally uses. +# information on how to generate the default header that Doxygen normally uses. # # Note: Only use a user-defined header if you know what you are doing! # Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. The following +# default header when upgrading to a newer version of Doxygen. The following # commands have a special meaning inside the header (and footer): For a # description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2001,10 +2091,10 @@ LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for # the generated LaTeX document. The footer should contain everything after the -# last chapter. If it is left blank doxygen will generate a standard footer. See +# last chapter. If it is left blank Doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what # special commands can be used inside the footer. See also section "Doxygen -# usage" for information on how to generate the default footer that doxygen +# usage" for information on how to generate the default footer that Doxygen # normally uses. Note: Only use a user-defined footer if you know what you are # doing! # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2013,7 +2103,7 @@ LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created -# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# by Doxygen. Using this option one can overrule certain style aspects. Doxygen # will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the @@ -2039,7 +2129,7 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO -# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# If the USE_PDFLATEX tag is set to YES, Doxygen will use the engine as # specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX # files. Set this option to YES, to get a higher quality PDF documentation. # @@ -2049,7 +2139,7 @@ PDF_HYPERLINKS = NO USE_PDFLATEX = NO -# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. # Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch # mode nothing is printed on the terminal, errors are scrolled as if is # hit at every error; missing files that TeX tries to input or request from @@ -2064,7 +2154,7 @@ USE_PDFLATEX = NO LATEX_BATCHMODE = NO -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# If the LATEX_HIDE_INDICES tag is set to YES then Doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2074,7 +2164,7 @@ LATEX_HIDE_INDICES = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. -# The default value is: plain. +# The default value is: plainnat. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain @@ -2091,7 +2181,7 @@ LATEX_EMOJI_DIRECTORY = # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, Doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -2106,7 +2196,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, Doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -2126,28 +2216,36 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's +# Load stylesheet definitions from file. Syntax is similar to Doxygen's # configuration file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. +# default style sheet that Doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's configuration file. A template extensions file can be +# similar to Doxygen's configuration file. A template extensions file can be # generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = +# The RTF_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the RTF_OUTPUT output directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTRA_FILES = + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, Doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -2178,7 +2276,7 @@ MAN_EXTENSION = .3 MAN_SUBDIR = -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without # them the man command would be unable to find the correct page. @@ -2191,11 +2289,11 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, Doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = NO +GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2205,16 +2303,16 @@ GENERATE_XML = NO XML_OUTPUT = xml -# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, Doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. # The default value is: YES. # This tag requires that the tag GENERATE_XML is set to YES. -XML_PROGRAMLISTING = YES +XML_PROGRAMLISTING = NO -# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, Doxygen will include # namespace members in file scope as well, matching the HTML output. # The default value is: NO. # This tag requires that the tag GENERATE_XML is set to YES. @@ -2225,7 +2323,7 @@ XML_NS_MEMB_FILE_SCOPE = NO # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, Doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -2243,7 +2341,7 @@ DOCBOOK_OUTPUT = docbook # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# If the GENERATE_AUTOGEN_DEF tag is set to YES, Doxygen will generate an # AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. @@ -2251,11 +2349,37 @@ DOCBOOK_OUTPUT = docbook GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES Doxygen will generate a Sqlite3 +# database with symbols found by Doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each Doxygen run. If set to NO, Doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, Doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -2263,7 +2387,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, Doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -2293,13 +2417,13 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, Doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# If the MACRO_EXPANSION tag is set to YES, Doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. @@ -2381,7 +2505,7 @@ PREDEFINED = WIN32=1 \ EXPAND_AS_DEFINED = -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# If the SKIP_FUNCTION_MACROS tag is set to YES then Doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have # an all uppercase name, and do not end with a semicolon. Such function macros # are typically used for boiler-plate code, and will confuse the parser if not @@ -2405,26 +2529,26 @@ SKIP_FUNCTION_MACROS = YES # section "Linking to external documentation" for more information about the use # of tag files. # Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is +# the path). If a tag file is not located in the directory in which Doxygen is # run, you must also specify the path to the tagfile here. TAGFILES = -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# When a file name is specified after GENERATE_TAGFILE, Doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. GENERATE_TAGFILE = doc/juce.tag -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2447,7 +2571,7 @@ EXTERNAL_PAGES = YES HIDE_UNDOC_RELATIONS = YES -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# If you set the HAVE_DOT tag to YES then Doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: # https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is @@ -2456,8 +2580,8 @@ HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of +# The DOT_NUM_THREADS specifies the number of dot invocations Doxygen is allowed +# to run in parallel. When set to 0 Doxygen will base this on the number of # processors available in the system. You can set it explicitly to a value # larger than 0 to get control over the balance between CPU load and processing # speed. @@ -2468,7 +2592,7 @@ DOT_NUM_THREADS = 0 # DOT_COMMON_ATTR is common attributes for nodes, edges and labels of # subgraphs. When you want a differently looking font in the dot files that -# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# Doxygen generates you can specify fontname, fontcolor and fontsize attributes. # For details please see Node, # Edge and Graph Attributes specification You need to make sure dot is able # to find the font, which can be done by putting it in a standard location or by @@ -2502,37 +2626,47 @@ DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then Doxygen will # generate a graph for each documented class showing the direct and indirect # inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and # HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case # the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the # CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. # If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance -# relations will be shown as texts / links. +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. # Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. CLASS_GRAPH = YES -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# If the COLLABORATION_GRAPH tag is set to YES then Doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = NO -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. See also the chapter Grouping -# in the manual. +# If the GROUP_GRAPHS tag is set to YES then Doxygen will generate a graph for +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GROUP_GRAPHS = NO -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, Doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2553,10 +2687,19 @@ UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 -# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# If the UML_LOOK tag is enabled, field labels are shown along the edge between +# two class nodes. If there are many fields and many nodes the graph may become +# too cluttered. The UML_MAX_EDGE_LABELS threshold limits the number of items to +# make the size more manageable. Set this to 0 for no limit. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag UML_LOOK is set to YES. + +UML_MAX_EDGE_LABELS = 10 + +# If the DOT_UML_DETAILS tag is set to NO, Doxygen will show attributes and # methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS -# tag is set to YES, doxygen will add type and arguments for attributes and -# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# tag is set to YES, Doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, Doxygen # will not generate fields with class member information in the UML graphs. The # class diagrams will look similar to the default class diagrams but using UML # notation for the relationships. @@ -2568,8 +2711,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2584,24 +2727,29 @@ DOT_WRAP_THRESHOLD = 17 TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the +# YES then Doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDE_GRAPH = NO # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing +# set to YES then Doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDED_BY_GRAPH = NO -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# If the CALL_GRAPH tag is set to YES then Doxygen will generate a call # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. @@ -2613,7 +2761,7 @@ INCLUDED_BY_GRAPH = NO CALL_GRAPH = NO -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# If the CALLER_GRAPH tag is set to YES then Doxygen will generate a caller # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. @@ -2625,17 +2773,20 @@ CALL_GRAPH = NO CALLER_GRAPH = NO -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# If the GRAPHICAL_HIERARCHY tag is set to YES then Doxygen will graphical # hierarchy of all classes instead of a textual one. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GRAPHICAL_HIERARCHY = NO -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# If the DIRECTORY_GRAPH tag is set to YES then Doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2652,24 +2803,29 @@ DIR_GRAPH_MAX_DEPTH = 1 # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: # https://www.graphviz.org/)). -# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order -# to make the SVG files visible in IE 9+ (other browsers do not have this -# requirement). +# +# Note the formats svg:cairo and svg:cairo:cairo cannot be used in combination +# with INTERACTIVE_SVG (the INTERACTIVE_SVG will be set to NO). # Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, -# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and -# png:gdiplus:gdiplus. +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus, +# png:gdiplus:gdiplus, svg:cairo, svg:cairo:cairo, svg:svg, svg:svg:core, +# gif:cairo, gif:cairo:gd, gif:cairo:gdiplus, gif:gdiplus, gif:gdiplus:gdiplus, +# gif:gd, gif:gd:gd, jpg:cairo, jpg:cairo:gd, jpg:cairo:gdiplus, jpg:gd, +# jpg:gd:gd, jpg:gdiplus and jpg:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. DOT_IMAGE_FORMAT = svg -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. +# If DOT_IMAGE_FORMAT is set to svg or svg:svg or svg:svg:core, then this option +# can be set to YES to enable generation of interactive SVG images that allow +# zooming and panning. # # Note that this requires a modern browser other than Internet Explorer. Tested # and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. +# +# Note This option will be automatically disabled when DOT_IMAGE_FORMAT is set +# to svg:cairo or svg:cairo:cairo. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2688,7 +2844,7 @@ DOT_PATH = DOTFILE_DIRS = -# You can include diagrams made with dia in doxygen documentation. Doxygen will +# You can include diagrams made with dia in Doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. @@ -2701,7 +2857,7 @@ DIA_PATH = DIAFILE_DIRS = -# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# When using PlantUML, the PLANTUML_JAR_PATH tag should be used to specify the # path where java can find the plantuml.jar file or to the filename of jar file # to be used. If left blank, it is assumed PlantUML is not used or called during # a preprocessing step. Doxygen will generate a warning when it encounters a @@ -2709,20 +2865,26 @@ DIAFILE_DIRS = PLANTUML_JAR_PATH = -# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a -# configuration file for plantuml. +# When using PlantUML, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for PlantUML. PLANTUML_CFG_FILE = -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. +# When using PlantUML, the specified paths are searched for files specified by +# the !include statement in a PlantUML block. PLANTUML_INCLUDE_PATH = +# The PLANTUMLFILE_DIRS tag can be used to specify one or more directories that +# contain PlantUml files that are included in the documentation (see the +# \plantumlfile command). + +PLANTUMLFILE_DIRS = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct +# larger than this value, Doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. @@ -2752,17 +2914,17 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_MULTI_TARGETS = NO -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# If the GENERATE_LEGEND tag is set to YES Doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. -# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# Note: This tag requires that UML_LOOK isn't set, i.e. the Doxygen internal # graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = NO -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate +# If the DOT_CLEANUP tag is set to YES, Doxygen will remove the intermediate # files that are used to generate the various graphs. # # Note: This setting is not only used for dot files but also for msc temporary @@ -2771,11 +2933,11 @@ GENERATE_LEGEND = NO DOT_CLEANUP = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# You can define message sequence charts within Doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then Doxygen will # use a built-in version of mscgen tool to produce the charts. Alternatively, # the MSCGEN_TOOL tag can also specify the name an external tool. For instance, -# specifying prog as the value, doxygen will call the tool as prog -T +# specifying prog as the value, Doxygen will call the tool as prog -T # -o . The external tool should support # output file formats "png", "eps", "svg", and "ismap". diff --git a/docs/doxygen/DoxygenLayout.xml b/docs/doxygen/DoxygenLayout.xml new file mode 100644 index 0000000000..ec3fdcddc4 --- /dev/null +++ b/docs/doxygen/DoxygenLayout.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/Makefile b/docs/doxygen/Makefile deleted file mode 100644 index 401debef21..0000000000 --- a/docs/doxygen/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -SHELL := /bin/bash - -SOURCE_FILES := $(shell find ../../modules -type f -name "juce_*.h" -or -name "juce_*.dox" | sed 's/ /\\ /g') - -.PHONY: clean - -doc/index.html: build/juce_modules.dox Doxyfile - doxygen - -build/juce_modules.dox: process_source_files.py $(SOURCE_FILES) - python $< ../../modules build - -clean: - rm -rf build doc - diff --git a/docs/doxygen/README.md b/docs/doxygen/README.md new file mode 100644 index 0000000000..3de4ca730f --- /dev/null +++ b/docs/doxygen/README.md @@ -0,0 +1,21 @@ +# JUCE's Doxygen documentation + +JUCE's doxygen setup aims to be pretty vanilla Doxygen and can be run like so: + +``` +doxygen Doxyfile +``` + +However, `build.py` can be run to generate additional documentation indexes for JUCE modules: + +``` +python3 build.py +``` + +## Styles + +`HTML_STYLESHEET` is left empty, meaning that Doxygen will generate its default styles. + +JUCE specific overrides then live in `css/doxygen-juce-overrides.css`. + +Code highlighting is done with [highlight.js](highlightjs.org). diff --git a/docs/doxygen/build.py b/docs/doxygen/build.py new file mode 100644 index 0000000000..f8391474d6 --- /dev/null +++ b/docs/doxygen/build.py @@ -0,0 +1,130 @@ +import argparse +import os +import subprocess +from pathlib import Path, PurePath +import xml.etree.ElementTree as ET +from xml.etree.ElementTree import Element + +def get_modules_directory_xml_element(xml_dir: Path) -> Element: + for entry in os.listdir('xml'): + if not entry.startswith('dir_'): + continue + root = ET.parse(xml_dir / entry).getroot() + location = root.find('.//location') + path = PurePath(location.attrib['file']) + referenced_dir_path_parts = path.parts + if referenced_dir_path_parts[-1] == 'modules': + return root, path + +def get_module_description(module_header: Path) -> str: + with open(module_header, 'r') as f: + content = f.read() + declaration = content[content.find('BEGIN_JUCE_MODULE_DECLARATION'):content.find('END_JUCE_MODULE_DECLARATION')] + for line in map(lambda x: x.strip(), declaration.split("\n")): + if line.startswith('description:'): + return line.removeprefix('description:').strip() + +def get_doxygen_items_recursive(xml_file_ref: str, items: list): + element = ET.parse(f'{Path('xml') / xml_file_ref}.xml').getroot() + item_type = element.find('compounddef').attrib['kind'] + if item_type == 'dir': + name = element.find('.//compoundname').text + new_item = { + 'name': name, + 'classes': [], + 'dirs': [] + } + items.append(new_item) + items = new_item['classes'] + for class_reference in element.findall('.//innerclass'): + html_filename = f'{class_reference.attrib['refid']}.html' + if (Path('doc') / html_filename).exists(): + items.append({ + 'name': class_reference.text.removeprefix('juce::'), + 'url': f'./{html_filename}', + }) + for file_reference in element.findall('.//innerfile'): + get_doxygen_items_recursive(file_reference.attrib['refid'], items) + for dir_reference in element.findall('.//innerdir'): + get_doxygen_items_recursive(dir_reference.attrib['refid'], new_item['dirs']) + +def remove_empty_doxygen_items_recursive(parent: dict): + parent['dirs'] = list(filter(lambda x: x['classes'] or x['dirs'], parent['dirs'])) + for d in parent['dirs']: + remove_empty_doxygen_items_recursive(d) + +def write_module_html_recursive(parent: Element, data: dict): + if data['classes']: + class_list = ET.SubElement(parent, 'ul', {'class': 'juce-module-class-list'}) + for c in data['classes']: + item = ET.SubElement(class_list, 'li', {'class': 'juce-module-class-item'}) + ET.SubElement(item, 'a', {'href': c['url'], 'class': 'juce-module-class-link'}).text = c['name'] + if data['dirs']: + dir_table = ET.SubElement(parent, 'table', {'class': 'juce-module-dir-table'}) + for d in data['dirs']: + row = ET.SubElement(dir_table, 'tr', {'class': 'juce-module-dir-row'}) + ET.SubElement(row, 'td', {'class': 'juce-module-dir-name'}).text = d['name'] + content = ET.SubElement(row, 'td', {'class': 'juce-module-dir-contents'}) + write_module_html_recursive(content, d) + + +parser = argparse.ArgumentParser() +parser.add_argument('--sitemap-url', help='a sitemap URL for Doxygen') +args = parser.parse_args() + +if args.sitemap_url: + os.environ['JUCE_SITEMAP_URL']=args.sitemap_url + +print('--- Running Doxygen') +subprocess.run("doxygen", shell=True, check=True) + +print('--- Parsing Doxygen XML') +xml_dir = Path('xml') +root, root_path = get_modules_directory_xml_element(xml_dir) +modules = [] +module_descriptions = {} +for dir_reference in root.findall('.//innerdir'): + module_name = dir_reference.text + module_path = root_path / module_name + module_header_path = module_path / f'{module_name}.h' + module_descriptions[module_name] = get_module_description(module_header_path) + get_doxygen_items_recursive(dir_reference.attrib['refid'], modules) + remove_empty_doxygen_items_recursive(modules[-1]) + +print('--- Creating JUCE Module HTML') + +module_icon = ET.Element('svg', {'fill': '#000000', 'viewBox': '0 0 56 56', 'class': 'juce-module-icon'}) +ET.SubElement(module_icon, 'path', {'d': 'M 28.0000 26.6406 L 50.0783 14.1016 C 49.7264 13.75 49.3045 13.4688 48.7890 13.1875 L 32.2657 3.7657 C 30.8126 2.9453 29.4063 2.5000 28.0000 2.5000 C 26.5938 2.5000 25.1875 2.9453 23.7344 3.7657 L 7.2110 13.1875 C 6.6954 13.4688 6.2735 13.75 5.9219 14.1016 Z M 26.4063 53.5 L 26.4063 29.4532 L 4.3985 16.8906 C 4.2813 17.4063 4.2110 17.9688 4.2110 18.6719 L 4.2110 36.9297 C 4.2110 40.3281 5.4063 41.5938 7.5860 42.8360 L 25.9375 53.2891 C 26.1016 53.3828 26.2422 53.4532 26.4063 53.5 Z M 29.5938 53.5 C 29.7579 53.4532 29.8985 53.3828 30.0626 53.2891 L 48.4141 42.8360 C 50.5938 41.5938 51.7890 40.3281 51.7890 36.9297 L 51.7890 18.6719 C 51.7890 17.9688 51.7189 17.4063 51.6018 16.8906 L 29.5938 29.4532 Z'}) + +main_div = ET.Element('div', {'class': 'juce-modules-continer'}) + +toc_div = ET.SubElement(main_div, 'div', {'class': 'juce-module-toc-container'}) +ET.SubElement(toc_div, 'p', {'class': 'juce-module-toc-desc'}).text = "Here are the JUCE modules with some brief descriptions:" +toc_table = ET.SubElement(toc_div, 'table', {'class': 'juce-module-toc-table'}) +for module in modules: + toc_row = ET.SubElement(toc_table, 'tr', {'class': 'juce-module-toc-row'}) + module_toc_name = ET.SubElement(toc_row, 'td', {'class': 'juce-module-toc-module-name'}) + ET.SubElement(module_toc_name, 'a', {'href': f'#{module['name']}', 'class': 'juce-module-toc-module-name-link'}).text = module['name'] + ET.SubElement(toc_row, 'td', {'class': 'juce-module-toc-module-decs'}).text = module_descriptions[module['name']] +ET.SubElement(main_div, 'div', {'class': 'juce-module-toc-divider'}) + +for module in modules: + module_div = ET.SubElement(main_div, 'div', {'class': 'juce-module'}) + module_header_div = ET.SubElement(module_div, 'div', {'class': 'juce-module-header'}) + module_title_div = ET.SubElement(module_header_div, 'div', {'class': 'juce-module-title'}) + module_title_div.append(module_icon) + ET.SubElement(module_title_div, 'span', {'id': module['name'], 'class': 'juce-module-name'}).text = module['name'] + ET.SubElement(module_header_div, 'span', {'class': 'juce-module-desc'}).text = module_descriptions[module['name']] + module_contents_div = ET.SubElement(module_div, 'div', {'class': 'juce-module-contents'}) + write_module_html_recursive(module_contents_div, module) + +print('--- Updating Doxygen HTML') +html = ET.tostring(main_div, encoding='utf-8', method='html').decode('utf-8') +with open('doc/index.html', 'r', encoding='utf-8') as f: + content = f.read() +content = content.replace('JUCE Documentation', 'JUCE Modules') +key = '
' +index = content.index(key) + len(key) +content = content[:index] + html + content[index:] +with open('doc/index.html', 'w', encoding='utf-8') as f: + f.write(content) diff --git a/docs/doxygen/css/doxygen-juce-overrides.css b/docs/doxygen/css/doxygen-juce-overrides.css new file mode 100644 index 0000000000..a7b402dc05 --- /dev/null +++ b/docs/doxygen/css/doxygen-juce-overrides.css @@ -0,0 +1,249 @@ +/* +Modified Doxygen Theme for JUCE + +Don't edit the main doxygen-1.14.css file, edit this instead. + +This file is included after the base theme to override specific styles. +*/ + +/* Use Open Sans everywhere, Inconsalata for code */ +html, +body { + --font-family-normal: "Open Sans", Helvetica, Arial, sans-serif; + --font-family-monospace: "Inconsolata", monospace; + --font-family-nav: "Open Sans", Helvetica, Arial, sans-serif; + --font-family-title: "Open Sans", Helvetica, Arial, sans-serif; + --font-family-toc: "Open Sans", Helvetica, Arial, sans-serif; + --font-family-search: "Open Sans", Helvetica, Arial, sans-serif; + --font-family-icon: Arial, Helvetica; + --font-family-tooltip: "Open Sans", Helvetica, Arial, sans-serif; +} + +/* 14px is a good readable minimum */ +body, +table, +div, +p, +dl { + font-size: 14px; +} + +/* slightly larger text blocks for better readability */ +p { + line-height: 1.5em; +} + +/* nicer code blocks */ +pre { + margin-bottom: 1em; +} + +pre code { + border-radius: 4px; +} + +code { + font-family: var(--font-family-monospace); +} + +/* all links should display underline on hover */ +a:hover { + color: var(--page-link-color); + text-decoration: underline; +} + +/* make sure we aren't hugging the sides for readablity */ +#doc-content { + margin: 0 1.5em; +} + +#main-nav { + padding: 0 1em; +} + +/* Readability is TERRIBLE with unlimited widths. UX 101 */ +div.textblock { + max-width: 750px; +} + +div.textblock h2 { + margin-top: 1.5em; +} + +/* Tame the search UX */ +#MSearchField { + font-size: 16px; +} + +.SRPage { + margin: 0.5em; +} + +.SRPage .SREntry { + font-size: 14px; +} + +.SRChildren { + font-size: 12px; +} + +#navrow1 .tablist>li:last-child { + margin-top: 0.3em; +} + +/* Give the header a bit of room */ +div.header { + background-color: transparent; + border-bottom: none; + margin-top: 1em; +} + +/* Align this sub-nav with the heading */ +div.summary { + margin-top: 1.5em; +} + +/* Breadcrumbs aren't useful, so lets hide them */ +div#nav-path { + display: none; +} + +/* Hide the unnecessarily noisy "Detailed Description" header */ +h2.groupheader#header-details { + display: none; +} + +/* remove noisy extra lines in headers */ +td h2.groupheader { + box-shadow: none; +} + +/* Doxygen uses monospace for headings, which is rough on scannability. + It's also using 1990s style css with tables and "float left" for layout +*/ +h2.memtitle { + font-family: var(--font-family-normal); + font-size: 20px; + font-weight: 300; + float: none; + width: max-content; + /* this is what they wanted vs. float */ +} + +/* limit the width of member lists for basic readability */ +div.memitem { + max-width: 750px; +} + +/* member declarations should also not be monospace */ +.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-normal); +} + +/* better spacing around section headers */ +tr.heading h2 { + margin-top: 2em; + margin-bottom: 1em; +} + +/* sane line height on class index */ +.classindex dd { + line-height: 1.5em; +} + +/* descriptions should be readable */ +div.contents div.textblock p { + font-size: 16px; +} + +/* get rid of crufty borders and background colors */ +.memItemLeft, +.memItemRight, +memTemplParams { + background-color: transparent; + border-right: none; + border-left: none; + border-bottom: none; + padding: 0.6em 0 0 0; +} + +.mdescLeft, +.mdescRight { + border-right: none; + border-left: none; + padding: 0 0 0.6em 0; +} + +tr[class^='memdesc'] { + box-shadow: none; +} + +/* tame crufty borders on member lists */ +.memproto, +dl.reflist dt { + border-bottom: none; +} + +/* chill out on the 1990s crufty rolodex card borders */ +html { + --memdef-border-color: #a8b8d949; +} + +/* JUCE MODULES */ +.juce-modules-continer { + margin-left: 1em; +} + +.juce-module-toc-table { + margin-left: 1em; +} + +.juce-module-toc-divider { + border-bottom: 1px solid; + margin-top: 2em; + margin-bottom: 2em; +} + +.juce-module-toc-module-name { + padding-right: 1em; +} + +.juce-module-desc { + margin-left: 1em; +} + +.juce-module-contents { + margin-top: 1em; + margin-left: 1em; +} + +.juce-module-title { + margin-top: 1em; + margin-bottom: 1em; +} + +.juce-module-icon { + height: 1.5em; + margin-right: 0.75em; + vertical-align: middle; + fill: var(--page-foreground-color); +} + +.juce-module-name { + font-size: 1.5em; + font-weight: bold; + vertical-align: middle; +} + +.juce-module-dir-name { + font-size: 1.1em; + font-weight: bold; + vertical-align: top; + padding-right: 1em; +} + +.juce-module-class-list { + list-style: none; + padding: 0; + margin-top: 1.5em; +} diff --git a/docs/doxygen/css/header.css b/docs/doxygen/css/header.css new file mode 100644 index 0000000000..11dc92066a --- /dev/null +++ b/docs/doxygen/css/header.css @@ -0,0 +1,5342 @@ +.wp-block-archives-dropdown label{ + display:block +} +.wp-block-avatar{ + box-sizing:border-box +} +.wp-block-avatar.aligncenter{ + text-align:center +} +.wp-block-audio{ + box-sizing:border-box +} +.wp-block-audio figcaption{ + margin-top:.5em; + margin-bottom:1em +} +.wp-block-audio audio{ + width:100%; + min-width:300px +} +.wp-block-button__link{ + cursor:pointer; + display:inline-block; + text-align:center; + word-break:break-word; + box-sizing:border-box +} +.wp-block-button__link.aligncenter{ + text-align:center +} +.wp-block-button__link.alignright{ + text-align:right +} +:where(.wp-block-button__link){ + box-shadow:none; + text-decoration:none; + border-radius:9999px; + padding:calc(.667em + 2px) calc(1.333em + 2px) +} +.wp-block-button[style*=text-decoration] .wp-block-button__link{ + text-decoration:inherit +} +.wp-block-buttons>.wp-block-button.has-custom-width{ + max-width:none +} +.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{ + width:100% +} +.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{ + font-size:inherit +} +.wp-block-buttons>.wp-block-button.wp-block-button__width-25{ + width:calc(25% - var(--wp--style--block-gap, .5em)*0.75) +} +.wp-block-buttons>.wp-block-button.wp-block-button__width-50{ + width:calc(50% - var(--wp--style--block-gap, .5em)*0.5) +} +.wp-block-buttons>.wp-block-button.wp-block-button__width-75{ + width:calc(75% - var(--wp--style--block-gap, .5em)*0.25) +} +.wp-block-buttons>.wp-block-button.wp-block-button__width-100{ + width:100%; + flex-basis:100% +} +.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{ + width:25% +} +.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{ + width:50% +} +.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{ + width:75% +} +.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{ + border-radius:0 +} +.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{ + border-radius:0!important +} +.wp-block-button.is-style-outline>.wp-block-button__link,.wp-block-button .wp-block-button__link.is-style-outline{ + border:2px solid; + padding:.667em 1.333em +} +.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color),.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color){ + color:currentColor +} +.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background),.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background){ + background-color:transparent; + background-image:none +} +.wp-block-buttons.is-vertical{ + flex-direction:column +} +.wp-block-buttons.is-vertical>.wp-block-button:last-child{ + margin-bottom:0 +} +.wp-block-buttons>.wp-block-button{ + display:inline-block; + margin:0 +} +.wp-block-buttons.is-content-justification-left{ + justify-content:flex-start +} +.wp-block-buttons.is-content-justification-left.is-vertical{ + align-items:flex-start +} +.wp-block-buttons.is-content-justification-center{ + justify-content:center +} +.wp-block-buttons.is-content-justification-center.is-vertical{ + align-items:center +} +.wp-block-buttons.is-content-justification-right{ + justify-content:flex-end +} +.wp-block-buttons.is-content-justification-right.is-vertical{ + align-items:flex-end +} +.wp-block-buttons.is-content-justification-space-between{ + justify-content:space-between +} +.wp-block-buttons.aligncenter{ + text-align:center +} +.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{ + margin-left:auto; + margin-right:auto; + width:100% +} +.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{ + text-decoration:inherit +} +.wp-block-buttons.has-custom-font-size .wp-block-button__link{ + font-size:inherit +} +.wp-block-button.aligncenter,.wp-block-calendar{ + text-align:center +} +.wp-block-calendar tbody td,.wp-block-calendar th{ + padding:.25em; + border:1px solid #ddd +} +.wp-block-calendar tfoot td{ + border:none +} +.wp-block-calendar table{ + width:100%; + border-collapse:collapse +} +.wp-block-calendar table th{ + font-weight:400; + background:#ddd +} +.wp-block-calendar a{ + text-decoration:underline +} +.wp-block-calendar table caption,.wp-block-calendar table tbody{ + color:#40464d +} +.wp-block-categories{ + box-sizing:border-box +} +.wp-block-categories.alignleft{ + margin-right:2em +} +.wp-block-categories.alignright{ + margin-left:2em +} +.wp-block-code{ + box-sizing:border-box +} +.wp-block-code code{ + display:block; + font-family:inherit; + overflow-wrap:break-word; + white-space:pre-wrap +} +.wp-block-columns{ + display:flex; + margin-bottom:1.75em; + box-sizing:border-box; + flex-wrap:wrap!important; + align-items:normal!important +} +@media (min-width:782px){ + .wp-block-columns{ + flex-wrap:nowrap!important + } +} +.wp-block-columns.are-vertically-aligned-top{ + align-items:flex-start +} +.wp-block-columns.are-vertically-aligned-center{ + align-items:center +} +.wp-block-columns.are-vertically-aligned-bottom{ + align-items:flex-end +} +@media (max-width:781px){ + .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{ + flex-basis:100%!important + } +} +@media (min-width:782px){ + .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{ + flex-basis:0; + flex-grow:1 + } + .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{ + flex-grow:0 + } +} +.wp-block-columns.is-not-stacked-on-mobile{ + flex-wrap:nowrap!important +} +.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{ + flex-basis:0; + flex-grow:1 +} +.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{ + flex-grow:0 +} +:where(.wp-block-columns.has-background){ + padding:1.25em 2.375em +} +.wp-block-column{ + flex-grow:1; + min-width:0; + word-break:break-word; + overflow-wrap:break-word +} +.wp-block-column.is-vertically-aligned-top{ + align-self:flex-start +} +.wp-block-column.is-vertically-aligned-center{ + align-self:center +} +.wp-block-column.is-vertically-aligned-bottom{ + align-self:flex-end +} +.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{ + width:100% +} +.wp-block-post-comments .alignleft{ + float:left +} +.wp-block-post-comments .alignright{ + float:right +} +.wp-block-post-comments .navigation:after{ + content:""; + display:table; + clear:both +} +.wp-block-post-comments .commentlist{ + clear:both; + list-style:none; + margin:0; + padding:0 +} +.wp-block-post-comments .commentlist .comment{ + min-height:2.25em; + padding-left:3.25em +} +.wp-block-post-comments .commentlist .comment p{ + font-size:1em; + line-height:1.8; + margin:1em 0 +} +.wp-block-post-comments .commentlist .children{ + list-style:none; + margin:0; + padding:0 +} +.wp-block-post-comments .comment-author{ + line-height:1.5 +} +.wp-block-post-comments .comment-author .avatar{ + border-radius:1.5em; + display:block; + float:left; + height:2.5em; + margin-top:.5em; + margin-right:.75em; + width:2.5em +} +.wp-block-post-comments .comment-author cite{ + font-style:normal +} +.wp-block-post-comments .comment-meta{ + font-size:.875em; + line-height:1.5 +} +.wp-block-post-comments .comment-meta b{ + font-weight:400 +} +.wp-block-post-comments .comment-meta .comment-awaiting-moderation{ + margin-top:1em; + margin-bottom:1em; + display:block +} +.wp-block-post-comments .comment-body .commentmetadata{ + font-size:.875em +} +.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{ + display:block; + margin-bottom:.25em +} +.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{ + display:block; + box-sizing:border-box; + width:100% +} +.wp-block-post-comments .comment-form-cookies-consent{ + display:flex; + gap:.25em +} +.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{ + margin-top:.35em +} +.wp-block-post-comments .comment-reply-title{ + margin-bottom:0 +} +.wp-block-post-comments .comment-reply-title :where(small){ + font-size:var(--wp--preset--font-size--medium,smaller); + margin-left:.5em +} +.wp-block-post-comments .reply{ + font-size:.875em; + margin-bottom:1.4em +} +.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{ + border:1px solid #949494; + font-size:1em; + font-family:inherit +} +.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{ + padding:calc(.667em + 2px) +} +:where(.wp-block-post-comments input[type=submit]){ + border:none +} +.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{ + margin-right:.5em; + margin-bottom:.5em +} +.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{ + margin-right:0 +} +.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{ + margin-right:1ch; + display:inline-block +} +.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){ + transform:scaleX(1) +} +.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{ + margin-left:1ch; + display:inline-block +} +.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){ + transform:scaleX(1) +} +.wp-block-comments-pagination.aligncenter{ + justify-content:center +} +.wp-block-comment-template{ + margin-bottom:0; + max-width:100%; + list-style:none; + padding:0 +} +.wp-block-comment-template li{ + clear:both +} +.wp-block-comment-template ol{ + margin-bottom:0; + max-width:100%; + list-style:none; + padding-left:2rem +} +.wp-block-comment-template.alignleft{ + float:left +} +.wp-block-comment-template.aligncenter{ + margin-left:auto; + margin-right:auto; + width:-moz-fit-content; + width:fit-content +} +.wp-block-comment-template.alignright{ + float:right +} +.wp-block-cover,.wp-block-cover-image{ + position:relative; + background-position:50%; + min-height:430px; + display:flex; + justify-content:center; + align-items:center; + padding:1em; + box-sizing:border-box +} +.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]),.wp-block-cover .has-background-dim:not([class*=-background-color]){ + background-color:#000 +} +.wp-block-cover-image .has-background-dim.has-background-gradient,.wp-block-cover .has-background-dim.has-background-gradient{ + background-color:transparent +} +.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{ + content:""; + background-color:inherit +} +.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim:not(.has-background-gradient):before,.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background{ + position:absolute; + top:0; + left:0; + bottom:0; + right:0; + z-index:1; + opacity:.5 +} +.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{ + opacity:.1 +} +.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{ + opacity:.2 +} +.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{ + opacity:.3 +} +.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{ + opacity:.4 +} +.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{ + opacity:.5 +} +.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{ + opacity:.6 +} +.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{ + opacity:.7 +} +.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{ + opacity:.8 +} +.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{ + opacity:.9 +} +.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{ + opacity:1 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{ + opacity:0 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{ + opacity:.1 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{ + opacity:.2 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{ + opacity:.3 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{ + opacity:.4 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{ + opacity:.5 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{ + opacity:.6 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{ + opacity:.7 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{ + opacity:.8 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{ + opacity:.9 +} +.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{ + opacity:1 +} +.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{ + max-width:420px; + width:100% +} +.wp-block-cover-image:after,.wp-block-cover:after{ + display:block; + content:""; + font-size:0; + min-height:inherit +} +@supports (position:sticky){ + .wp-block-cover-image:after,.wp-block-cover:after{ + content:none + } +} +.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{ + display:flex +} +.wp-block-cover-image .wp-block-cover__inner-container,.wp-block-cover .wp-block-cover__inner-container{ + width:100%; + z-index:1; + color:#fff +} +.wp-block-cover-image.is-light .wp-block-cover__inner-container,.wp-block-cover.is-light .wp-block-cover__inner-container{ + color:#000 +} +.wp-block-cover-image h1:not(.has-text-color),.wp-block-cover-image h2:not(.has-text-color),.wp-block-cover-image h3:not(.has-text-color),.wp-block-cover-image h4:not(.has-text-color),.wp-block-cover-image h5:not(.has-text-color),.wp-block-cover-image h6:not(.has-text-color),.wp-block-cover-image p:not(.has-text-color),.wp-block-cover h1:not(.has-text-color),.wp-block-cover h2:not(.has-text-color),.wp-block-cover h3:not(.has-text-color),.wp-block-cover h4:not(.has-text-color),.wp-block-cover h5:not(.has-text-color),.wp-block-cover h6:not(.has-text-color),.wp-block-cover p:not(.has-text-color){ + color:inherit +} +.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{ + align-items:flex-start; + justify-content:flex-start +} +.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{ + align-items:flex-start; + justify-content:center +} +.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{ + align-items:flex-start; + justify-content:flex-end +} +.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{ + align-items:center; + justify-content:flex-start +} +.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{ + align-items:center; + justify-content:center +} +.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{ + align-items:center; + justify-content:flex-end +} +.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{ + align-items:flex-end; + justify-content:flex-start +} +.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{ + align-items:flex-end; + justify-content:center +} +.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{ + align-items:flex-end; + justify-content:flex-end +} +.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{ + margin:0; + width:auto +} +.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background,.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background{ + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + margin:0; + padding:0; + width:100%; + height:100%; + max-width:none; + max-height:none; + object-fit:cover; + outline:none; + border:none; + box-shadow:none +} +.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{ + background-attachment:fixed; + background-size:cover; + background-repeat:no-repeat +} +@supports (-webkit-overflow-scrolling:touch){ + .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{ + background-attachment:scroll + } +} +@media (prefers-reduced-motion:reduce){ + .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{ + background-attachment:scroll + } +} +.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{ + background-repeat:repeat; + background-size:auto +} +.wp-block-cover__image-background,.wp-block-cover__video-background{ + z-index:0 +} +.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{ + color:#fff +} +.wp-block-cover-image .wp-block-cover.has-left-content{ + justify-content:flex-start +} +.wp-block-cover-image .wp-block-cover.has-right-content{ + justify-content:flex-end +} +.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{ + margin-left:0; + text-align:left +} +.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{ + margin-right:0; + text-align:right +} +.wp-block-cover-image .wp-block-cover-image-text,.wp-block-cover .wp-block-cover-text,section.wp-block-cover-image>h2{ + font-size:2em; + line-height:1.25; + z-index:1; + margin-bottom:0; + max-width:840px; + padding:.44em; + text-align:center +} +.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{ + max-width:360px; + width:100% +} +.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{ + min-width:280px +} +.wp-block-cover .wp-block-embed{ + min-width:320px; + min-height:240px +} +.wp-block-embed{ + overflow-wrap:break-word +} +.wp-block-embed figcaption{ + margin-top:.5em; + margin-bottom:1em +} +.wp-block-embed iframe{ + max-width:100% +} +.wp-block-embed__wrapper{ + position:relative +} +.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{ + content:""; + display:block; + padding-top:50% +} +.wp-embed-responsive .wp-has-aspect-ratio iframe{ + position:absolute; + top:0; + right:0; + bottom:0; + left:0; + height:100%; + width:100% +} +.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{ + padding-top:42.85% +} +.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{ + padding-top:50% +} +.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{ + padding-top:56.25% +} +.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{ + padding-top:75% +} +.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{ + padding-top:100% +} +.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{ + padding-top:177.77% +} +.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{ + padding-top:200% +} +.wp-block-file{ + margin-bottom:1.5em +} +.wp-block-file:not(.wp-element-button){ + font-size:.8em +} +.wp-block-file.aligncenter{ + text-align:center +} +.wp-block-file.alignright{ + text-align:right +} +.wp-block-file *+.wp-block-file__button{ + margin-left:.75em +} +.wp-block-file__embed{ + margin-bottom:1em +} +:where(.wp-block-file__button){ + border-radius:2em; + padding:.5em 1em +} +:where(.wp-block-file__button):is(a):active,:where(.wp-block-file__button):is(a):focus,:where(.wp-block-file__button):is(a):hover,:where(.wp-block-file__button):is(a):visited{ + box-shadow:none; + color:#fff; + opacity:.85; + text-decoration:none +} +.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){ + display:flex; + flex-wrap:wrap; + list-style-type:none; + padding:0; + margin:0 +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{ + margin:0 1em 1em 0; + display:flex; + flex-grow:1; + flex-direction:column; + justify-content:center; + position:relative; + width:calc(50% - 1em) +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){ + margin-right:0 +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{ + margin:0; + height:100%; + display:flex; + align-items:flex-end; + justify-content:flex-start +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{ + display:block; + max-width:100%; + height:auto; + width:auto +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{ + position:absolute; + bottom:0; + width:100%; + max-height:100%; + overflow:auto; + padding:3em .77em .7em; + color:#fff; + text-align:center; + font-size:.8em; + background:linear-gradient(0deg,rgba(0,0,0,.7),rgba(0,0,0,.3) 70%,transparent); + box-sizing:border-box; + margin:0; + z-index:2 +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{ + display:inline +} +.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{ + flex-grow:1 +} +.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{ + width:100%; + height:100%; + flex:1; + object-fit:cover +} +.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{ + width:100%; + margin-right:0 +} +@media (min-width:600px){ + .blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{ + width:calc(33.33333% - .66667em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{ + width:calc(25% - .75em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{ + width:calc(20% - .8em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{ + width:calc(16.66667% - .83333em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{ + width:calc(14.28571% - .85714em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{ + width:calc(12.5% - .875em); + margin-right:1em + } + .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){ + margin-right:0 + } +} +.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{ + margin-right:0 +} +.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{ + max-width:420px; + width:100% +} +.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{ + justify-content:center +} +.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{ + align-self:flex-start +} +figure.wp-block-gallery.has-nested-images{ + align-items:normal +} +.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){ + width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2); + margin:0 +} +.wp-block-gallery.has-nested-images figure.wp-block-image{ + display:flex; + flex-grow:1; + justify-content:center; + position:relative; + flex-direction:column; + max-width:100%; + box-sizing:border-box +} +.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{ + margin:0; + flex-direction:column; + flex-grow:1 +} +.wp-block-gallery.has-nested-images figure.wp-block-image img{ + display:block; + height:auto; + max-width:100%!important; + width:auto +} +.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{ + background:linear-gradient(0deg,rgba(0,0,0,.7),rgba(0,0,0,.3) 70%,transparent); + bottom:0; + color:#fff; + font-size:13px; + left:0; + margin-bottom:0; + max-height:60%; + overflow:auto; + padding:0 8px 8px; + position:absolute; + text-align:center; + width:100%; + box-sizing:border-box +} +.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{ + display:inline +} +.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{ + color:inherit +} +.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{ + box-sizing:border-box +} +.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{ + flex:1 1 auto +} +.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{ + flex:initial; + background:none; + color:inherit; + margin:0; + padding:10px 10px 9px; + position:relative +} +.wp-block-gallery.has-nested-images figcaption{ + flex-grow:1; + flex-basis:100%; + text-align:center +} +.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){ + margin-top:0; + margin-bottom:auto +} +.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){ + align-self:inherit +} +.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){ + display:flex +} +.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{ + width:100%; + flex:1 0 0%; + height:100%; + object-fit:cover +} +.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){ + width:100% +} +@media (min-width:600px){ + .wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){ + width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*0.66667) + } + .wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){ + width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*0.75) + } + .wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){ + width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*0.8) + } + .wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){ + width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*0.83333) + } + .wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){ + width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*0.85714) + } + .wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){ + width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*0.875) + } + .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){ + width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*0.66667) + } + .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){ + width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*0.5) + } + .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{ + width:100% + } +} +.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{ + max-width:420px; + width:100% +} +.wp-block-gallery.has-nested-images.aligncenter{ + justify-content:center +} +.wp-block-group{ + box-sizing:border-box +} +h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{ + padding:1.25em 2.375em +} +.wp-block-image img{ + height:auto; + max-width:100%; + vertical-align:bottom +} +.wp-block-image.has-custom-border img,.wp-block-image img{ + box-sizing:border-box +} +.wp-block-image.aligncenter{ + text-align:center +} +.wp-block-image.alignfull img,.wp-block-image.alignwide img{ + height:auto; + width:100% +} +.wp-block-image.aligncenter,.wp-block-image .aligncenter,.wp-block-image.alignleft,.wp-block-image .alignleft,.wp-block-image.alignright,.wp-block-image .alignright{ + display:table +} +.wp-block-image.aligncenter>figcaption,.wp-block-image .aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image.alignright>figcaption,.wp-block-image .alignright>figcaption{ + display:table-caption; + caption-side:bottom +} +.wp-block-image .alignleft{ + float:left; + margin:.5em 1em .5em 0 +} +.wp-block-image .alignright{ + float:right; + margin:.5em 0 .5em 1em +} +.wp-block-image .aligncenter{ + margin-left:auto; + margin-right:auto +} +.wp-block-image figcaption{ + margin-top:.5em; + margin-bottom:1em +} +.wp-block-image.is-style-circle-mask img,.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img{ + border-radius:9999px +} +.wp-block-image :where(.has-border-color){ + border-style:solid +} +.wp-block-image :where([style*=border-top-color]){ + border-top-style:solid +} +.wp-block-image :where([style*=border-right-color]){ + border-right-style:solid +} +.wp-block-image :where([style*=border-bottom-color]){ + border-bottom-style:solid +} +.wp-block-image :where([style*=border-left-color]){ + border-left-style:solid +} +.wp-block-image :where([style*=border-width]){ + border-style:solid +} +.wp-block-image :where([style*=border-top-width]){ + border-top-style:solid +} +.wp-block-image :where([style*=border-right-width]){ + border-right-style:solid +} +.wp-block-image :where([style*=border-bottom-width]){ + border-bottom-style:solid +} +.wp-block-image :where([style*=border-left-width]){ + border-left-style:solid +} +.wp-block-image figure{ + margin:0 +} +ol.wp-block-latest-comments{ + margin-left:0 +} +.wp-block-latest-comments .wp-block-latest-comments{ + padding-left:0 +} +.wp-block-latest-comments__comment{ + line-height:1.1; + list-style:none; + margin-bottom:1em +} +.has-avatars .wp-block-latest-comments__comment{ + min-height:2.25em; + list-style:none +} +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{ + margin-left:3.25em +} +.has-dates .wp-block-latest-comments__comment,.has-excerpts .wp-block-latest-comments__comment{ + line-height:1.5 +} +.wp-block-latest-comments__comment-excerpt p{ + font-size:.875em; + line-height:1.8; + margin:.36em 0 1.4em +} +.wp-block-latest-comments__comment-date{ + display:block; + font-size:.75em +} +.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{ + border-radius:1.5em; + display:block; + float:left; + height:2.5em; + margin-right:.75em; + width:2.5em +} +.wp-block-latest-posts.alignleft{ + margin-right:2em +} +.wp-block-latest-posts.alignright{ + margin-left:2em +} +.wp-block-latest-posts.wp-block-latest-posts__list{ + list-style:none; + padding-left:0 +} +.wp-block-latest-posts.wp-block-latest-posts__list li{ + clear:both +} +.wp-block-latest-posts.is-grid{ + display:flex; + flex-wrap:wrap; + padding:0 +} +.wp-block-latest-posts.is-grid li{ + margin:0 1.25em 1.25em 0; + width:100% +} +@media (min-width:600px){ + .wp-block-latest-posts.columns-2 li{ + width:calc(50% - .625em) + } + .wp-block-latest-posts.columns-2 li:nth-child(2n){ + margin-right:0 + } + .wp-block-latest-posts.columns-3 li{ + width:calc(33.33333% - .83333em) + } + .wp-block-latest-posts.columns-3 li:nth-child(3n){ + margin-right:0 + } + .wp-block-latest-posts.columns-4 li{ + width:calc(25% - .9375em) + } + .wp-block-latest-posts.columns-4 li:nth-child(4n){ + margin-right:0 + } + .wp-block-latest-posts.columns-5 li{ + width:calc(20% - 1em) + } + .wp-block-latest-posts.columns-5 li:nth-child(5n){ + margin-right:0 + } + .wp-block-latest-posts.columns-6 li{ + width:calc(16.66667% - 1.04167em) + } + .wp-block-latest-posts.columns-6 li:nth-child(6n){ + margin-right:0 + } +} +.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{ + display:block; + font-size:.8125em +} +.wp-block-latest-posts__post-excerpt{ + margin-top:.5em; + margin-bottom:1em +} +.wp-block-latest-posts__featured-image a{ + display:inline-block +} +.wp-block-latest-posts__featured-image img{ + height:auto; + width:auto; + max-width:100% +} +.wp-block-latest-posts__featured-image.alignleft{ + margin-right:1em; + float:left +} +.wp-block-latest-posts__featured-image.alignright{ + margin-left:1em; + float:right +} +.wp-block-latest-posts__featured-image.aligncenter{ + margin-bottom:1em; + text-align:center +} +ol,ul{ + box-sizing:border-box +} +ol.has-background,ul.has-background{ + padding:1.25em 2.375em +} +.wp-block-media-text{ + /*!rtl:begin:ignore*/ + direction:ltr; + /*!rtl:end:ignore*/ + display:grid; + grid-template-columns:50% 1fr; + grid-template-rows:auto; + box-sizing:border-box +} +.wp-block-media-text.has-media-on-the-right{ + grid-template-columns:1fr 50% +} +.wp-block-media-text.is-vertically-aligned-top .wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top .wp-block-media-text__media{ + align-self:start +} +.wp-block-media-text.is-vertically-aligned-center .wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center .wp-block-media-text__media,.wp-block-media-text .wp-block-media-text__content,.wp-block-media-text .wp-block-media-text__media{ + align-self:center +} +.wp-block-media-text.is-vertically-aligned-bottom .wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom .wp-block-media-text__media{ + align-self:end +} +.wp-block-media-text .wp-block-media-text__media{ + /*!rtl:begin:ignore*/ + grid-column:1; + grid-row:1; + /*!rtl:end:ignore*/ + margin:0 +} +.wp-block-media-text .wp-block-media-text__content{ + direction:ltr; + /*!rtl:begin:ignore*/ + grid-column:2; + grid-row:1; + /*!rtl:end:ignore*/ + padding:0 8%; + word-break:break-word +} +.wp-block-media-text.has-media-on-the-right .wp-block-media-text__media{ + /*!rtl:begin:ignore*/ + grid-column:2; + grid-row:1 + /*!rtl:end:ignore*/ +} +.wp-block-media-text.has-media-on-the-right .wp-block-media-text__content{ + /*!rtl:begin:ignore*/ + grid-column:1; + grid-row:1 + /*!rtl:end:ignore*/ +} +.wp-block-media-text__media img,.wp-block-media-text__media video{ + height:auto; + max-width:unset; + width:100%; + vertical-align:middle +} +.wp-block-media-text.is-image-fill .wp-block-media-text__media{ + height:100%; + min-height:250px; + background-size:cover +} +.wp-block-media-text.is-image-fill .wp-block-media-text__media>a{ + display:block; + height:100% +} +.wp-block-media-text.is-image-fill .wp-block-media-text__media img{ + position:absolute; + width:1px; + height:1px; + padding:0; + margin:-1px; + overflow:hidden; + clip:rect(0,0,0,0); + border:0 +} +@media (max-width:600px){ + .wp-block-media-text.is-stacked-on-mobile{ + grid-template-columns:100%!important + } + .wp-block-media-text.is-stacked-on-mobile .wp-block-media-text__media{ + grid-column:1; + grid-row:1 + } + .wp-block-media-text.is-stacked-on-mobile .wp-block-media-text__content{ + grid-column:1; + grid-row:2 + } +} +.wp-block-navigation{ + position:relative; + --navigation-layout-justification-setting:flex-start; + --navigation-layout-direction:row; + --navigation-layout-wrap:wrap; + --navigation-layout-justify:flex-start; + --navigation-layout-align:center +} +.wp-block-navigation ul{ + margin-top:0; + margin-bottom:0; + margin-left:0; + padding-left:0 +} +.wp-block-navigation ul,.wp-block-navigation ul li{ + list-style:none; + padding:0 +} +.wp-block-navigation .wp-block-navigation-item{ + display:flex; + align-items:center; + position:relative +} +.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{ + display:none +} +.wp-block-navigation .wp-block-navigation-item__content{ + display:block +} +.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{ + text-decoration:underline +} +.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{ + text-decoration:line-through +} +.wp-block-navigation:where(:not([class*=has-text-decoration])) a,.wp-block-navigation:where(:not([class*=has-text-decoration])) a:active,.wp-block-navigation:where(:not([class*=has-text-decoration])) a:focus{ + text-decoration:none +} +.wp-block-navigation .wp-block-navigation__submenu-icon{ + align-self:center; + line-height:0; + display:inline-block; + font-size:inherit; + padding:0; + background-color:inherit; + color:currentColor; + border:none; + width:.6em; + height:.6em; + margin-left:.25em +} +.wp-block-navigation .wp-block-navigation__submenu-icon svg{ + display:inline-block; + stroke:currentColor; + width:inherit; + height:inherit; + margin-top:.075em +} +.wp-block-navigation.is-vertical{ + --navigation-layout-direction:column; + --navigation-layout-justify:initial; + --navigation-layout-align:flex-start +} +.wp-block-navigation.no-wrap{ + --navigation-layout-wrap:nowrap +} +.wp-block-navigation.items-justified-center{ + --navigation-layout-justification-setting:center; + --navigation-layout-justify:center +} +.wp-block-navigation.items-justified-center.is-vertical{ + --navigation-layout-align:center +} +.wp-block-navigation.items-justified-right{ + --navigation-layout-justification-setting:flex-end; + --navigation-layout-justify:flex-end +} +.wp-block-navigation.items-justified-right.is-vertical{ + --navigation-layout-align:flex-end +} +.wp-block-navigation.items-justified-space-between{ + --navigation-layout-justification-setting:space-between; + --navigation-layout-justify:space-between +} +.wp-block-navigation .has-child .wp-block-navigation__submenu-container{ + background-color:inherit; + color:inherit; + position:absolute; + z-index:2; + display:flex; + flex-direction:column; + align-items:normal; + opacity:0; + transition:opacity .1s linear; + visibility:hidden; + width:0; + height:0; + overflow:hidden; + left:-1px; + top:100% +} +.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{ + display:flex; + flex-grow:1 +} +.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{ + margin-right:0; + margin-left:auto +} +.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{ + margin:0 +} +@media (min-width:782px){ + .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{ + left:100%; + top:-1px + } + .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{ + content:""; + position:absolute; + right:100%; + height:100%; + display:block; + width:.5em; + background:transparent + } + .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{ + margin-right:.25em + } + .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{ + transform:rotate(-90deg) + } +} +.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container{ + visibility:visible; + overflow:visible; + opacity:1; + width:auto; + height:auto; + min-width:200px +} +.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{ + visibility:visible; + overflow:visible; + opacity:1; + width:auto; + height:auto; + min-width:200px +} +.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container{ + visibility:visible; + overflow:visible; + opacity:1; + width:auto; + height:auto; + min-width:200px +} +.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{ + left:0; + top:100% +} +@media (min-width:782px){ + .wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{ + left:100%; + top:0 + } +} +.wp-block-navigation-submenu{ + position:relative; + display:flex +} +.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{ + stroke:currentColor +} +button.wp-block-navigation-item__content{ + background-color:transparent; + border:none; + color:currentColor; + font-size:inherit; + font-family:inherit; + line-height:inherit; + font-style:inherit; + font-weight:inherit; + text-transform:inherit; + text-align:left +} +.wp-block-navigation-submenu__toggle{ + cursor:pointer +} +.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{ + padding-right:.85em +} +.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{ + margin-left:-.6em; + pointer-events:none +} +.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{ + gap:inherit +} +:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)){ + padding:.5em 1em +} +.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{ + left:auto; + right:0 +} +.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{ + left:-1px; + right:-1px +} +@media (min-width:782px){ + .wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{ + left:auto; + right:100% + } +} +.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{ + background-color:#fff; + color:#000; + border:1px solid rgba(0,0,0,.15) +} +.wp-block-navigation__container{ + display:flex; + flex-wrap:var(--navigation-layout-wrap,wrap); + flex-direction:var(--navigation-layout-direction,initial); + justify-content:var(--navigation-layout-justify,initial); + align-items:var(--navigation-layout-align,initial); + list-style:none; + margin:0; + padding-left:0 +} +.wp-block-navigation__container .is-responsive{ + display:none +} +.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{ + flex-grow:1 +} +@keyframes overlay-menu__fade-in-animation{ + 0%{ + opacity:0; + transform:translateY(.5em) + } + to{ + opacity:1; + transform:translateY(0) + } +} +.wp-block-navigation__responsive-container{ + display:none; + position:fixed; + top:0; + left:0; + right:0; + bottom:0 +} +.wp-block-navigation__responsive-container .wp-block-navigation-link a{ + color:inherit +} +.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{ + display:flex; + flex-wrap:var(--navigation-layout-wrap,wrap); + flex-direction:var(--navigation-layout-direction,initial); + justify-content:var(--navigation-layout-justify,initial); + align-items:var(--navigation-layout-align,initial) +} +.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){ + color:inherit!important; + background-color:inherit!important +} +.wp-block-navigation__responsive-container.is-menu-open{ + display:flex; + flex-direction:column; + background-color:inherit; + animation:overlay-menu__fade-in-animation .1s ease-out; + animation-fill-mode:forwards; + padding:var(--wp--style--root--padding-top,2rem) var(--wp--style--root--padding-right,2rem) var(--wp--style--root--padding-bottom,2rem) var(--wp--style--root--padding-left,2rem); + overflow:auto; + z-index:100000 +} +@media (prefers-reduced-motion:reduce){ + .wp-block-navigation__responsive-container.is-menu-open{ + animation-duration:1ms; + animation-delay:0s + } +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{ + padding-top:calc(2rem + 24px); + overflow:visible; + display:flex; + flex-direction:column; + flex-wrap:nowrap; + align-items:var(--navigation-layout-justification-setting,inherit) +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{ + justify-content:flex-start +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{ + display:none +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{ + opacity:1; + visibility:visible; + height:auto; + width:auto; + overflow:initial; + min-width:200px; + position:static; + border:none; + padding-left:2rem; + padding-right:2rem +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{ + gap:inherit +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{ + padding-top:var(--wp--style--block-gap,2em) +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{ + padding:0 +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{ + display:flex; + flex-direction:column; + align-items:var(--navigation-layout-justification-setting,initial) +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{ + color:inherit!important; + background:transparent!important +} +.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{ + right:auto; + left:auto +} +@media (min-width:600px){ + .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){ + display:block; + width:100%; + position:relative; + z-index:auto; + background-color:inherit + } + .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{ + display:none + } + .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{ + left:0 + } +} +.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{ + background-color:#fff; + color:#000 +} +.wp-block-navigation__toggle_button_label{ + font-size:1rem; + font-weight:700 +} +.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{ + vertical-align:middle; + cursor:pointer; + color:currentColor; + background:transparent; + border:none; + margin:0; + padding:0; + text-transform:inherit +} +.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{ + fill:currentColor; + pointer-events:none; + display:block; + width:24px; + height:24px +} +.wp-block-navigation__responsive-container-open{ + display:flex +} +@media (min-width:600px){ + .wp-block-navigation__responsive-container-open:not(.always-shown){ + display:none + } +} +.wp-block-navigation__responsive-container-close{ + position:absolute; + top:0; + right:0; + z-index:2 +} +.wp-block-navigation__responsive-close{ + width:100%; + max-width:var(--wp--style--global--wide-size,100%); + margin-left:auto; + margin-right:auto +} +.wp-block-navigation__responsive-close:focus{ + outline:none +} +.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{ + box-sizing:border-box +} +.wp-block-navigation__responsive-dialog{ + position:relative +} +.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{ + margin-top:46px +} +@media (min-width:782px){ + .has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{ + margin-top:32px + } +} +html.has-modal-open{ + overflow:hidden +} +.wp-block-navigation .wp-block-navigation-item__label{ + word-break:normal; + overflow-wrap:break-word +} +.wp-block-navigation .wp-block-navigation-item__description{ + display:none +} +.wp-block-navigation .wp-block-page-list{ + display:flex; + flex-direction:var(--navigation-layout-direction,initial); + justify-content:var(--navigation-layout-justify,initial); + align-items:var(--navigation-layout-align,initial); + flex-wrap:var(--navigation-layout-wrap,wrap); + background-color:inherit +} +.wp-block-navigation .wp-block-navigation-item{ + background-color:inherit +} +.is-small-text{ + font-size:.875em +} +.is-regular-text{ + font-size:1em +} +.is-large-text{ + font-size:2.25em +} +.is-larger-text{ + font-size:3em +} +.has-drop-cap:not(:focus):first-letter{ + float:left; + font-size:8.4em; + line-height:.68; + font-weight:100; + margin:.05em .1em 0 0; + text-transform:uppercase; + font-style:normal +} +p.has-drop-cap.has-background{ + overflow:hidden +} +p.has-background{ + padding:1.25em 2.375em +} +:where(p.has-text-color:not(.has-link-color)) a{ + color:inherit +} +.wp-block-post-author{ + display:flex; + flex-wrap:wrap +} +.wp-block-post-author__byline{ + width:100%; + margin-top:0; + margin-bottom:0; + font-size:.5em +} +.wp-block-post-author__avatar{ + margin-right:1em +} +.wp-block-post-author__bio{ + margin-bottom:.7em; + font-size:.7em +} +.wp-block-post-author__content{ + flex-grow:1; + flex-basis:0 +} +.wp-block-post-author__name{ + margin:0 +} +.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){ + font-weight:inherit +} +.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){ + font-family:inherit +} +.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){ + font-size:inherit +} +.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){ + line-height:inherit +} +.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){ + font-style:inherit +} +.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){ + letter-spacing:inherit +} +.wp-block-post-comments-form input[type=submit]{ + box-shadow:none; + cursor:pointer; + display:inline-block; + text-align:center; + overflow-wrap:break-word +} +.wp-block-post-comments-form input:not([type=submit]),.wp-block-post-comments-form textarea{ + border:1px solid #949494; + font-size:1em; + font-family:inherit +} +.wp-block-post-comments-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments-form textarea{ + padding:calc(.667em + 2px) +} +.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments-form .comment-form textarea{ + display:block; + box-sizing:border-box; + width:100% +} +.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{ + display:block; + margin-bottom:.25em +} +.wp-block-post-comments-form .comment-form-cookies-consent{ + display:flex; + gap:.25em +} +.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{ + margin-top:.35em +} +.wp-block-post-comments-form .comment-reply-title{ + margin-bottom:0 +} +.wp-block-post-comments-form .comment-reply-title :where(small){ + font-size:var(--wp--preset--font-size--medium,smaller); + margin-left:.5em +} +.wp-block-post-date{ + box-sizing:border-box +} +.wp-block-post-excerpt__more-link{ + display:inline-block +} +.wp-block-post-featured-image{ + margin-left:0; + margin-right:0 +} +.wp-block-post-featured-image a{ + display:block +} +.wp-block-post-featured-image img{ + max-width:100%; + width:100%; + height:auto; + vertical-align:bottom; + box-sizing:border-box +} +.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{ + width:100% +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{ + position:absolute; + inset:0; + background-color:#000 +} +.wp-block-post-featured-image{ + position:relative +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{ + background-color:transparent +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{ + opacity:0 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{ + opacity:.1 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{ + opacity:.2 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{ + opacity:.3 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{ + opacity:.4 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{ + opacity:.5 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{ + opacity:.6 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{ + opacity:.7 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{ + opacity:.8 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{ + opacity:.9 +} +.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{ + opacity:1 +} +.wp-block-post-terms__separator{ + white-space:pre-wrap +} +.wp-block-post-title{ + word-break:break-word; + box-sizing:border-box +} +.wp-block-post-title a{ + display:inline-block +} +.wp-block-preformatted{ + white-space:pre-wrap +} +.wp-block-preformatted.has-background{ + padding:1.25em 2.375em +} +.wp-block-pullquote{ + margin:0 0 1em; + padding:3em 0; + text-align:center; + overflow-wrap:break-word; + box-sizing:border-box +} +.wp-block-pullquote blockquote,.wp-block-pullquote cite,.wp-block-pullquote p{ + color:inherit +} +.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{ + max-width:420px +} +.wp-block-pullquote cite,.wp-block-pullquote footer{ + position:relative +} +.wp-block-pullquote .has-text-color a{ + color:inherit +} +.wp-block-pullquote.has-text-align-left blockquote{ + text-align:left +} +.wp-block-pullquote.has-text-align-right blockquote{ + text-align:right +} +.wp-block-pullquote.is-style-solid-color{ + border:none +} +.wp-block-pullquote.is-style-solid-color blockquote{ + margin-left:auto; + margin-right:auto; + max-width:60% +} +.wp-block-pullquote.is-style-solid-color blockquote p{ + margin-top:0; + margin-bottom:0; + font-size:2em +} +.wp-block-pullquote.is-style-solid-color blockquote cite{ + text-transform:none; + font-style:normal +} +.wp-block-pullquote cite{ + color:inherit +} +.wp-block-post-template{ + margin-top:0; + margin-bottom:0; + max-width:100%; + list-style:none; + padding:0 +} +.wp-block-post-template.wp-block-post-template{ + background:none +} +.wp-block-post-template.is-flex-container{ + flex-direction:row; + display:flex; + flex-wrap:wrap; + gap:1.25em +} +.wp-block-post-template.is-flex-container li{ + margin:0; + width:100% +} +@media (min-width:600px){ + .wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{ + width:calc(50% - .625em) + } + .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{ + width:calc(33.33333% - .83333em) + } + .wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{ + width:calc(25% - .9375em) + } + .wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{ + width:calc(20% - 1em) + } + .wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{ + width:calc(16.66667% - 1.04167em) + } +} +.wp-block-query-pagination>.wp-block-query-pagination-next,.wp-block-query-pagination>.wp-block-query-pagination-numbers,.wp-block-query-pagination>.wp-block-query-pagination-previous{ + margin-right:.5em; + margin-bottom:.5em +} +.wp-block-query-pagination>.wp-block-query-pagination-next:last-child,.wp-block-query-pagination>.wp-block-query-pagination-numbers:last-child,.wp-block-query-pagination>.wp-block-query-pagination-previous:last-child{ + margin-right:0 +} +.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-child{ + margin-inline-start:auto +} +.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{ + margin-inline-end:auto +} +.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{ + margin-right:1ch; + display:inline-block +} +.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){ + transform:scaleX(1) +} +.wp-block-query-pagination .wp-block-query-pagination-next-arrow{ + margin-left:1ch; + display:inline-block +} +.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){ + transform:scaleX(1) +} +.wp-block-query-pagination.aligncenter{ + justify-content:center +} +.wp-block-query-title,.wp-block-quote{ + box-sizing:border-box +} +.wp-block-quote{ + overflow-wrap:break-word +} +.wp-block-quote.is-large:not(.is-style-plain),.wp-block-quote.is-style-large:not(.is-style-plain){ + margin-bottom:1em; + padding:0 1em +} +.wp-block-quote.is-large:not(.is-style-plain) p,.wp-block-quote.is-style-large:not(.is-style-plain) p{ + font-size:1.5em; + font-style:italic; + line-height:1.6 +} +.wp-block-quote.is-large:not(.is-style-plain) cite,.wp-block-quote.is-large:not(.is-style-plain) footer,.wp-block-quote.is-style-large:not(.is-style-plain) cite,.wp-block-quote.is-style-large:not(.is-style-plain) footer{ + font-size:1.125em; + text-align:right +} +.wp-block-read-more{ + display:block; + width:-moz-fit-content; + width:fit-content +} +.wp-block-read-more:not([style*=text-decoration]),.wp-block-read-more:not([style*=text-decoration]):active,.wp-block-read-more:not([style*=text-decoration]):focus{ + text-decoration:none +} +ul.wp-block-rss{ + list-style:none; + padding:0 +} +ul.wp-block-rss.wp-block-rss{ + box-sizing:border-box +} +ul.wp-block-rss.alignleft{ + margin-right:2em +} +ul.wp-block-rss.alignright{ + margin-left:2em +} +ul.wp-block-rss.is-grid{ + display:flex; + flex-wrap:wrap; + padding:0; + list-style:none +} +ul.wp-block-rss.is-grid li{ + margin:0 1em 1em 0; + width:100% +} +@media (min-width:600px){ + ul.wp-block-rss.columns-2 li{ + width:calc(50% - 1em) + } + ul.wp-block-rss.columns-3 li{ + width:calc(33.33333% - 1em) + } + ul.wp-block-rss.columns-4 li{ + width:calc(25% - 1em) + } + ul.wp-block-rss.columns-5 li{ + width:calc(20% - 1em) + } + ul.wp-block-rss.columns-6 li{ + width:calc(16.66667% - 1em) + } +} +.wp-block-rss__item-author,.wp-block-rss__item-publish-date{ + display:block; + font-size:.8125em +} +.wp-block-search__button{ + margin-left:.625em; + word-break:normal +} +.wp-block-search__button.has-icon{ + line-height:0 +} +.wp-block-search__button svg{ + min-width:1.5em; + min-height:1.5em; + fill:currentColor; + vertical-align:text-bottom +} +:where(.wp-block-search__button){ + border:1px solid #ccc; + padding:.375em .625em +} +.wp-block-search__inside-wrapper{ + display:flex; + flex:auto; + flex-wrap:nowrap; + max-width:100% +} +.wp-block-search__label{ + width:100% +} +.wp-block-search__input{ + padding:8px; + flex-grow:1; + margin-left:0; + margin-right:0; + min-width:3em; + border:1px solid #949494; + text-decoration:unset!important +} +.wp-block-search.wp-block-search__button-only .wp-block-search__button{ + margin-left:0 +} +:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){ + padding:4px; + border:1px solid #949494 +} +:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{ + border-radius:0; + border:none; + padding:0 0 0 .25em +} +:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{ + outline:none +} +:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){ + padding:.125em .5em +} +.wp-block-search.aligncenter .wp-block-search__inside-wrapper{ + margin:auto +} +.wp-block-separator{ + border:1px solid; + border-right:none; + border-left:none +} +.wp-block-separator.is-style-dots{ + background:none!important; + border:none; + text-align:center; + line-height:1; + height:auto +} +.wp-block-separator.is-style-dots:before{ + content:"···"; + color:currentColor; + font-size:1.5em; + letter-spacing:2em; + padding-left:2em; + font-family:serif +} +.wp-block-site-logo{ + box-sizing:border-box; + line-height:0 +} +.wp-block-site-logo a{ + display:inline-block +} +.wp-block-site-logo.is-default-size img{ + width:120px; + height:auto +} +.wp-block-site-logo img{ + height:auto; + max-width:100% +} +.wp-block-site-logo a,.wp-block-site-logo img{ + border-radius:inherit +} +.wp-block-site-logo.aligncenter{ + margin-left:auto; + margin-right:auto; + text-align:center +} +.wp-block-site-logo.is-style-rounded{ + border-radius:9999px +} +.wp-block-social-links{ + box-sizing:border-box; + padding-left:0; + padding-right:0; + text-indent:0; + margin-left:0; + background:none +} +.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{ + text-decoration:none; + border-bottom:0; + box-shadow:none +} +.wp-block-social-links .wp-social-link a{ + padding:.25em +} +.wp-block-social-links .wp-social-link svg{ + width:1em; + height:1em +} +.wp-block-social-links .wp-social-link span:not(.screen-reader-text){ + margin-left:.5em; + margin-right:.5em; + font-size:.65em +} +.wp-block-social-links.has-small-icon-size{ + font-size:16px +} +.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{ + font-size:24px +} +.wp-block-social-links.has-large-icon-size{ + font-size:36px +} +.wp-block-social-links.has-huge-icon-size{ + font-size:48px +} +.wp-block-social-links.aligncenter{ + justify-content:center; + display:flex +} +.wp-block-social-links.alignright{ + justify-content:flex-end +} +.wp-block-social-link{ + display:block; + border-radius:9999px; + transition:transform .1s ease; + height:auto +} +@media (prefers-reduced-motion:reduce){ + .wp-block-social-link{ + transition-duration:0s; + transition-delay:0s + } +} +.wp-block-social-link a{ + align-items:center; + display:flex; + line-height:0; + transition:transform .1s ease +} +.wp-block-social-link:hover{ + transform:scale(1.1) +} +.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor:visited,.wp-block-social-links .wp-block-social-link .wp-block-social-link-anchor svg{ + color:currentColor; + fill:currentColor +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link{ + background-color:#f0f0f0; + color:#444 +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-amazon{ + background-color:#f90; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-bandcamp{ + background-color:#1ea0c3; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-behance{ + background-color:#0757fe; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-codepen{ + background-color:#1e1f26; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-deviantart{ + background-color:#02e49b; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-dribbble{ + background-color:#e94c89; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-dropbox{ + background-color:#4280ff; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-etsy{ + background-color:#f45800; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-facebook{ + background-color:#1778f2; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-fivehundredpx{ + background-color:#000; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-flickr{ + background-color:#0461dd; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-foursquare{ + background-color:#e65678; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-github{ + background-color:#24292d; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-goodreads{ + background-color:#eceadd; + color:#382110 +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-google{ + background-color:#ea4434; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-instagram{ + background-color:#f00075; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-lastfm{ + background-color:#e21b24; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-linkedin{ + background-color:#0d66c2; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-mastodon{ + background-color:#3288d4; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-medium{ + background-color:#02ab6c; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-meetup{ + background-color:#f6405f; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-patreon{ + background-color:#ff424d; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-pinterest{ + background-color:#e60122; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-pocket{ + background-color:#ef4155; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-reddit{ + background-color:#ff4500; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-skype{ + background-color:#0478d7; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-snapchat{ + background-color:#fefc00; + color:#fff; + stroke:#000 +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-soundcloud{ + background-color:#ff5600; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-spotify{ + background-color:#1bd760; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-telegram{ + background-color:#2aabee; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-tiktok{ + background-color:#000; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-tumblr{ + background-color:#011835; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-twitch{ + background-color:#6440a4; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-twitter{ + background-color:#1da1f2; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-vimeo{ + background-color:#1eb7ea; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-vk{ + background-color:#4680c2; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-wordpress{ + background-color:#3499cd; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-whatsapp{ + background-color:#25d366; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-yelp{ + background-color:#d32422; + color:#fff +} +.wp-block-social-links:not(.is-style-logos-only) .wp-social-link-youtube{ + background-color:red; + color:#fff +} +.wp-block-social-links.is-style-logos-only .wp-social-link{ + background:none +} +.wp-block-social-links.is-style-logos-only .wp-social-link a{ + padding:0 +} +.wp-block-social-links.is-style-logos-only .wp-social-link svg{ + width:1.25em; + height:1.25em +} +.wp-block-social-links.is-style-logos-only .wp-social-link-amazon{ + color:#f90 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-bandcamp{ + color:#1ea0c3 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-behance{ + color:#0757fe +} +.wp-block-social-links.is-style-logos-only .wp-social-link-codepen{ + color:#1e1f26 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-deviantart{ + color:#02e49b +} +.wp-block-social-links.is-style-logos-only .wp-social-link-dribbble{ + color:#e94c89 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-dropbox{ + color:#4280ff +} +.wp-block-social-links.is-style-logos-only .wp-social-link-etsy{ + color:#f45800 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-facebook{ + color:#1778f2 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-fivehundredpx{ + color:#000 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-flickr{ + color:#0461dd +} +.wp-block-social-links.is-style-logos-only .wp-social-link-foursquare{ + color:#e65678 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-github{ + color:#24292d +} +.wp-block-social-links.is-style-logos-only .wp-social-link-goodreads{ + color:#382110 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-google{ + color:#ea4434 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-instagram{ + color:#f00075 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-lastfm{ + color:#e21b24 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-linkedin{ + color:#0d66c2 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-mastodon{ + color:#3288d4 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-medium{ + color:#02ab6c +} +.wp-block-social-links.is-style-logos-only .wp-social-link-meetup{ + color:#f6405f +} +.wp-block-social-links.is-style-logos-only .wp-social-link-patreon{ + color:#ff424d +} +.wp-block-social-links.is-style-logos-only .wp-social-link-pinterest{ + color:#e60122 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-pocket{ + color:#ef4155 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-reddit{ + color:#ff4500 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-skype{ + color:#0478d7 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-snapchat{ + color:#fff; + stroke:#000 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-soundcloud{ + color:#ff5600 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-spotify{ + color:#1bd760 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-telegram{ + color:#2aabee +} +.wp-block-social-links.is-style-logos-only .wp-social-link-tiktok{ + color:#000 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-tumblr{ + color:#011835 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-twitch{ + color:#6440a4 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-twitter{ + color:#1da1f2 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-vimeo{ + color:#1eb7ea +} +.wp-block-social-links.is-style-logos-only .wp-social-link-vk{ + color:#4680c2 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-whatsapp{ + color:#25d366 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-wordpress{ + color:#3499cd +} +.wp-block-social-links.is-style-logos-only .wp-social-link-yelp{ + color:#d32422 +} +.wp-block-social-links.is-style-logos-only .wp-social-link-youtube{ + color:red +} +.wp-block-social-links.is-style-pill-shape .wp-social-link{ + width:auto +} +.wp-block-social-links.is-style-pill-shape .wp-social-link a{ + padding-left:.66667em; + padding-right:.66667em +} +.wp-block-spacer{ + clear:both +} +.wp-block-tag-cloud.aligncenter{ + text-align:center; + justify-content:center +} +.wp-block-tag-cloud.alignfull{ + padding-left:1em; + padding-right:1em +} +.wp-block-tag-cloud a{ + display:inline-block; + margin-right:5px +} +.wp-block-tag-cloud span{ + display:inline-block; + margin-left:5px; + text-decoration:none +} +.wp-block-tag-cloud.is-style-outline{ + display:flex; + flex-wrap:wrap; + gap:1ch +} +.wp-block-tag-cloud.is-style-outline a{ + border:1px solid; + font-size:unset!important; + margin-right:0; + padding:1ch 2ch; + text-decoration:none!important +} +.wp-block-table{ + overflow-x:auto +} +.wp-block-table table{ + border-collapse:collapse; + width:100% +} +.wp-block-table td,.wp-block-table th{ + border:1px solid; + padding:.5em +} +.wp-block-table .has-fixed-layout{ + table-layout:fixed; + width:100% +} +.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{ + word-break:break-word +} +.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{ + display:table; + width:auto +} +.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{ + word-break:break-word +} +.wp-block-table .has-subtle-light-gray-background-color{ + background-color:#f3f4f5 +} +.wp-block-table .has-subtle-pale-green-background-color{ + background-color:#e9fbe5 +} +.wp-block-table .has-subtle-pale-blue-background-color{ + background-color:#e7f5fe +} +.wp-block-table .has-subtle-pale-pink-background-color{ + background-color:#fcf0ef +} +.wp-block-table.is-style-stripes{ + border-spacing:0; + border-collapse:inherit; + background-color:transparent; + border-bottom:1px solid #f0f0f0 +} +.wp-block-table.is-style-stripes tbody tr:nth-child(odd){ + background-color:#f0f0f0 +} +.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){ + background-color:#f3f4f5 +} +.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){ + background-color:#e9fbe5 +} +.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){ + background-color:#e7f5fe +} +.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){ + background-color:#fcf0ef +} +.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{ + border-color:transparent +} +.wp-block-table .has-border-color>*,.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr{ + border-color:inherit +} +.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th,.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th{ + border-top-color:inherit +} +.wp-block-table table[style*=border-top-color] tr:not(:first-child){ + border-top-color:currentColor +} +.wp-block-table table[style*=border-right-color]>*,.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr{ + border-right-color:inherit +} +.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th,.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th{ + border-bottom-color:inherit +} +.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){ + border-bottom-color:currentColor +} +.wp-block-table table[style*=border-left-color]>*,.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr{ + border-left-color:inherit +} +.wp-block-table table[style*=border-style]>*,.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr{ + border-style:inherit +} +.wp-block-table table[style*=border-width]>*,.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr{ + border-width:inherit; + border-style:inherit +} +.wp-block-text-columns,.wp-block-text-columns.aligncenter{ + display:flex +} +.wp-block-text-columns .wp-block-column{ + margin:0 1em; + padding:0 +} +.wp-block-text-columns .wp-block-column:first-child{ + margin-left:0 +} +.wp-block-text-columns .wp-block-column:last-child{ + margin-right:0 +} +.wp-block-text-columns.columns-2 .wp-block-column{ + width:50% +} +.wp-block-text-columns.columns-3 .wp-block-column{ + width:33.33333% +} +.wp-block-text-columns.columns-4 .wp-block-column{ + width:25% +} +pre.wp-block-verse{ + font-family:inherit; + overflow:auto; + white-space:pre-wrap +} +.wp-block-video{ + box-sizing:border-box +} +.wp-block-video video{ + width:100% +} +@supports (position:sticky){ + .wp-block-video [poster]{ + object-fit:cover + } +} +.wp-block-video.aligncenter{ + text-align:center +} +.wp-block-video figcaption{ + margin-top:.5em; + margin-bottom:1em +} +.wp-element-button{ + cursor:pointer +} +:root{ + --wp--preset--font-size--normal:16px; + --wp--preset--font-size--huge:42px +} +:root .has-very-light-gray-background-color{ + background-color:#eee +} +:root .has-very-dark-gray-background-color{ + background-color:#313131 +} +:root .has-very-light-gray-color{ + color:#eee +} +:root .has-very-dark-gray-color{ + color:#313131 +} +:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{ + background:linear-gradient(135deg,#00d084,#0693e3) +} +:root .has-purple-crush-gradient-background{ + background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe) +} +:root .has-hazy-dawn-gradient-background{ + background:linear-gradient(135deg,#faaca8,#dad0ec) +} +:root .has-subdued-olive-gradient-background{ + background:linear-gradient(135deg,#fafae1,#67a671) +} +:root .has-atomic-cream-gradient-background{ + background:linear-gradient(135deg,#fdd79a,#004a59) +} +:root .has-nightshade-gradient-background{ + background:linear-gradient(135deg,#330968,#31cdcf) +} +:root .has-midnight-gradient-background{ + background:linear-gradient(135deg,#020381,#2874fc) +} +.has-regular-font-size{ + font-size:1em +} +.has-larger-font-size{ + font-size:2.625em +} +.has-normal-font-size{ + font-size:var(--wp--preset--font-size--normal) +} +.has-huge-font-size{ + font-size:var(--wp--preset--font-size--huge) +} +.has-text-align-center{ + text-align:center +} +.has-text-align-left{ + text-align:left +} +.has-text-align-right{ + text-align:right +} +#end-resizable-editor-section{ + display:none +} +.aligncenter{ + clear:both +} +.items-justified-left{ + justify-content:flex-start +} +.items-justified-center{ + justify-content:center +} +.items-justified-right{ + justify-content:flex-end +} +.items-justified-space-between{ + justify-content:space-between +} +.screen-reader-text{ + border:0; + clip:rect(1px,1px,1px,1px); + clip-path:inset(50%); + height:1px; + margin:-1px; + overflow:hidden; + padding:0; + position:absolute; + width:1px; + word-wrap:normal!important +} +.screen-reader-text:focus{ + background-color:#ddd; + clip:auto!important; + clip-path:none; + color:#444; + display:block; + font-size:1em; + height:auto; + left:5px; + line-height:normal; + padding:15px 23px 14px; + text-decoration:none; + top:5px; + width:auto; + z-index:100000 +} +html :where(.has-border-color){ + border-style:solid +} +html :where([style*=border-top-color]){ + border-top-style:solid +} +html :where([style*=border-right-color]){ + border-right-style:solid +} +html :where([style*=border-bottom-color]){ + border-bottom-style:solid +} +html :where([style*=border-left-color]){ + border-left-style:solid +} +html :where([style*=border-width]){ + border-style:solid +} +html :where([style*=border-top-width]){ + border-top-style:solid +} +html :where([style*=border-right-width]){ + border-right-style:solid +} +html :where([style*=border-bottom-width]){ + border-bottom-style:solid +} +html :where([style*=border-left-width]){ + border-left-style:solid +} +html :where(img[class*=wp-image-]){ + height:auto; + max-width:100% +} +figure{ + margin:0 0 1em +} + +.ct-section-inner-wrap{ + margin-left:auto; + margin-right:auto; + height:100% +} +.ct-section-with-shape-divider{ + position:relative!important +} +.oxygen-unslider-container:not(.unslider-fade)>ul{ + list-style:none; + width:0 +} +.oxygen-unslider-container:not(.unslider-fade):not(.unslider-horizontal)>ul>li{ + opacity:0 +} +.oxygen-unslider-container.unslider-fade>ul>li:not(.unslider-active){ + opacity:0 +} +div.ct-svg-icon>svg,svg.ct-svg-icon{ + height:1em!important; + fill:currentColor +} +.ct-columns-inner-wrap{ + display:-webkit-flex!important; + display:-ms-flexbox!important; + display:flex!important +} +.ct-column{ + float:left!important; + word-break:break-word +} +svg.ct-svg-icon{ + display:inline-block; + width:1em!important +} +div.ct-svg-icon{ + display:inline-block; + box-sizing:content-box; + border-radius:50%; + width:auto +} +div.ct-svg-icon>svg{ + width:1em!important; + display:block +} +div.ct-fancy-icon{ + display:inline-flex; + border-radius:50% +} +.ct-fancy-icon>svg{ + fill:currentColor +} +.ct-columns-inner-wrap>.ct-column:first-child{ + margin-left:0!important +} +.ct-columns-inner-wrap>.ct-column:last-child{ + margin-right:0!important +} +.ct-video{ + width:100% +} +.ct-video>.oxygen-vsb-responsive-video-wrapper{ + position:relative +} +.ct-video>.oxygen-vsb-responsive-video-wrapper>iframe{ + position:absolute; + top:0; + left:0; + width:100%; + height:100% +} +.oxy-nav-menu-list{ + display:flex; + padding:0; + margin:0 +} +.oxy-nav-menu .oxy-nav-menu-list li.menu-item{ + list-style-type:none; + display:flex; + flex-direction:column +} +.oxy-nav-menu .oxy-nav-menu-list li.menu-item a{ + text-decoration:none; + border-style:solid; + border-width:0; + transition-timing-function:ease-in-out; + transition-property:background-color,color,border-color; + border-color:transparent +} +.oxy-nav-menu .oxy-nav-menu-list li.current-menu-item>a,.oxy-nav-menu .oxy-nav-menu-list li.menu-item:focus-within>a,.oxy-nav-menu .oxy-nav-menu-list li.menu-item:hover>a{ + border-color:initial +} +.oxy-nav-menu .menu-item,.oxy-nav-menu .sub-menu{ + position:relative +} +.oxy-nav-menu .menu-item .sub-menu{ + padding:0; + flex-direction:column; + white-space:nowrap; + transition-timing-function:ease-in-out; + transition-property:visibility,opacity; + visibility:hidden; + opacity:0; + display:flex; + position:absolute; + top:100% +} +.oxy-nav-menu .sub-menu .sub-menu,.oxy-nav-menu.oxy-nav-menu-vertical .sub-menu{ + left:100%; + top:0 +} +.oxy-nav-menu .menu-item:hover>.sub-menu,.oxy-nav-menu .menu-item:focus-within>.sub-menu{ + visibility:visible; + opacity:1 +} +.oxy-nav-menu .sub-menu li.menu-item{ + flex-direction:column +} +@keyframes oxy_sticky_header_fadein{ + 0%{ + opacity:0 + } + 100%{ + opacity:1 + } +} +.oxy-sticky-header-fade-in{ + animation-name:oxy_sticky_header_fadein; + animation-duration:.5s; + animation-iteration-count:1 +} +.oxy-header-wrapper{ + position:relative +} +.oxy-header-row{ + width:100%; + display:block +} +.oxy-header-container{ + height:100%; + margin-left:auto; + margin-right:auto; + display:flex; + flex-wrap:nowrap; + justify-content:flex-start; + align-items:stretch +} +.oxy-header-center,.oxy-header-left,.oxy-header-right{ + display:flex; + align-items:center +} +.oxy-header .oxygen-only-show-in-overlay,.oxy-video-container{ + display:none +} +.oxy-header-left{ + justify-content:flex-start +} +.oxy-header-center{ + flex-grow:1; + justify-content:center +} +.oxy-header-right{ + justify-content:flex-end +} +.admin-bar .oxy-sticky-header-active{ + top:32px!important +} +@media screen and (max-width:782px){ + .admin-bar .oxy-sticky-header-active{ + top:46px!important + } +} +@media screen and (max-width:600px){ + .admin-bar .oxy-sticky-header-active{ + top:0!important + } +} +.oxy-video-background{ + position:relative; + z-index:1 +} +.oxy-video-background .oxy-video-container{ + display:block; + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + overflow:hidden; + z-index:-1 +} +.oxy-video-background .oxy-video-container video{ + min-width:100%; + min-height:100%; + width:auto; + height:auto; + top:50%; + left:50%; + position:absolute; + transform:translate(-50%,-50%) +} +.oxy-video-overlay{ + position:absolute; + top:0; + bottom:0; + left:0; + right:0 +} +.oxy-map iframe{ + width:100%; + height:100%; + display:block +} +.unslider .unslider-fade ul li.unslider-active{ + position:relative +} +.oxy-menu-toggle{ + cursor:pointer; + display:none +} +.oxy-nav-menu.oxy-nav-menu-open{ + width:100%; + position:fixed; + top:0; + right:0; + left:0; + bottom:0; + display:flex; + align-items:center; + justify-content:center; + flex-direction:column; + overflow:auto; + z-index:2147483642!important; + background-color:#fff +} +.oxy-nav-menu.oxy-nav-menu-open>div:last-child{ + max-height:100%; + overflow:auto; + padding-top:2em; + padding-bottom:2em; + width:100% +} +.oxy-nav-menu-prevent-overflow{ + overflow:hidden; + height:100% +} +.oxy-nav-menu.oxy-nav-menu-open .oxy-menu-toggle{ + display:initial +} +.oxy-nav-menu.oxy-nav-menu-open .oxy-nav-menu-list{ + flex-direction:column!important; + width:100% +} +.oxy-nav-menu.oxy-nav-menu-open .oxy-nav-menu-list .menu-item a{ + text-align:center; + border:0!important; + background-color:initial!important; + justify-content:center +} +.oxy-nav-menu.oxy-nav-menu-open .oxy-nav-menu-hamburger-wrap{ + position:fixed; + top:20px; + right:20px; + z-index:1 +} +.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu{ + background-color:#fff; + z-index:2147483641 +} +.oxy-nav-menu.oxy-nav-menu-open .menu-item .sub-menu,.oxy-nav-menu.oxy-nav-menu-open .menu-item-has-children>a::after{ + display:none +} +.oxy-nav-menu.oxy-nav-menu-open.oxy-nav-menu-responsive-dropdowns .menu-item .sub-menu{ + display:flex; + position:static; + animation-name:none; + visibility:visible; + opacity:1; + transition-duration:0s!important +} +.oxy-nav-menu.oxy-nav-menu-open a:not([href]){ + display:none +} +.oxy-nav-menu-hamburger-wrap{ + display:flex; + align-items:center; + justify-content:center +} +.oxy-nav-menu-hamburger{ + display:flex; + justify-content:space-between; + flex-direction:column +} +.oxy-nav-menu-hamburger-line{ + border-radius:2px +} +.oxy-nav-menu-open .oxy-nav-menu-hamburger{ + transform:rotate(45deg) +} +.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line{ + display:none +} +.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:first-child{ + display:initial; + position:relative +} +.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:last-child{ + display:initial; + position:relative; + transform:rotate(90deg) +} +.oxy-nav-menu .menu-item a{ + display:flex; + align-items:center +} +.oxy-nav-menu.oxy-nav-menu-vertical .menu-item a{ + flex-direction:row +} +.oxy-nav-menu-dropdowns.oxy-nav-menu-dropdown-arrow .menu-item-has-children>a::after{ + width:.35em; + height:.35em; + margin-left:.5em; + border-right:.1em solid; + border-top:.1em solid; + transform:rotate(135deg); + content:"" +} +.oxy-nav-menu-dropdowns.oxy-nav-menu-dropdown-arrow .sub-menu .menu-item-has-children>a::after,.oxy-nav-menu-dropdowns.oxy-nav-menu-dropdown-arrow.oxy-nav-menu-vertical .menu-item-has-children>a::after{ + transform:rotate(45deg) +} +.oxy-social-icons{ + display:flex; + flex-wrap:wrap; + align-items:flex-start; + justify-content:flex-start +} +.oxy-social-icons a{ + line-height:1; + width:1em; + height:1em; + display:flex; + align-items:center; + justify-content:center; + text-decoration:none +} +.oxy-social-icons a svg{ + stroke-width:0; + stroke:currentColor; + fill:currentColor +} +.oxy-soundcloud{ + min-width:300px; + min-height:120px +} +.oxy-soundcloud iframe{ + width:100%; + height:100% +} +.comment-body .alignleft,.oxy-stock-content-styles .alignleft{ + margin-right:1em; + float:left +} +.comment-body .alignright,.oxy-stock-content-styles .alignright{ + margin-left:1em; + float:right +} +.comment-body .aligncenter,.oxy-stock-content-styles .aligncenter{ + margin-left:auto; + margin-right:auto +} +.comment-body img,.oxy-stock-content-styles img{ + max-width:100% +} +.oxy-comment-form .comment-reply-title{ + margin-bottom:.5em +} +.oxy-comment-form .logged-in-as{ + margin-bottom:1em; + font-size:.75em +} +.oxy-comment-form #submit{ + padding:1em 2em; + background-color:#000; + color:#fff; + cursor:pointer; + margin-top:.5em; + border:none; + font-weight:700 +} +.oxy-comment-form input,.oxy-comment-form textarea{ + padding:.5em; + border-radius:0; + border:1px solid #000; + color:gray; + width:100% +} +.oxy-comment-form label{ + font-weight:700 +} +.oxy-comment-form .comment-form>p{ + margin-top:0; + margin-bottom:1em +} +.oxy-comments h3.comments-title{ + margin-bottom:1em +} +.oxy-comments ol.children,.oxy-comments ol.comments-list{ + list-style:none; + margin:0; + padding:0 +} +.oxy-comments ol.children{ + margin-left:50px +} +.oxy-comments li.comment .comment-body{ + margin-left:0; + margin-right:0; + margin-bottom:50px +} +.oxy-comments li.comment .comment-body .comment-content{ + margin-bottom:1em +} +.oxy-comments .comment-meta .comment-author{ + display:flex; + flex-direction:row; + align-items:center +} +.oxy-comments .comment-meta .comment-author .avatar{ + max-width:64px; + max-height:64px; + margin-right:.5em +} +.oxy-comments .comment-meta .comment-author span.says::before{ + content:" "; + white-space:pre +} +.oxy-progress-bar-overlay-percent,.oxy-progress-bar-overlay-text{ + line-height:1; + white-space:nowrap; + color:#fff +} +.oxy-comments .comment-meta .comment-metadata{ + font-size:.75em; + margin-top:.75em +} +.oxy-comments .comment-meta .edit-link{ + margin-left:.5em +} +.oxy-comments .reply{ + display:flex +} +.oxy-comments .reply .comment-reply-link{ + font-size:.75em +} +.oxy-comments .comment-meta{ + flex-wrap:wrap +} +.oxy-comments .comment-awaiting-moderation{ + flex-basis:100% +} +.oxy-login-form p{ + display:flex; + flex-direction:column +} +.oxy-login-form input{ + padding:.5em; + border-radius:0; + border:1px solid #000 +} +.oxy-login-form input[type=submit]{ + padding:1em 2em; + background-color:#000; + color:#fff; + cursor:pointer; + border:none; + font-weight:700 +} +.oxy-search-form input{ + padding:.5em; + border-radius:0; + border:1px solid #000 +} +.oxy-search-form input[type=submit]{ + padding:calc(.5em + 1px)1em; + background-color:#000; + color:#fff; + cursor:pointer; + border:none +} +.oxy-search-form label.screen-reader-text{ + display:none +} +.oxy-icon-box-icon{ + display:flex; + flex-shrink:0; + flex-grow:0 +} +.oxy-icon-box-content{ + flex-grow:1; + width:100% +} +.oxy-icon-box-heading,.oxy-icon-box-text{ + margin:0 +} +.oxy-icon-box{ + display:flex; + align-items:flex-start +} +.oxy-pricing-box{ + display:flex; + flex-direction:column; + position:relative; + overflow:hidden +} +.oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-graphic{ + order:10; + display:flex; + flex-direction:row +} +.oxy-pricing-box-graphic>img{ + max-width:100%; + display:block +} +.oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-title{ + order:20 +} +.oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-price{ + order:30; + display:flex; + flex-wrap:wrap; + flex-direction:row; + align-items:baseline; + justify-content:center +} +.oxy-pricing-box-amount{ + display:flex; + align-items:baseline; + flex-direction:row +} +.oxy-pricing-box-currency{ + align-self:flex-start +} +.oxy-pricing-box-amount-decimal{ + align-self:baseline +} +.oxy-pricing-box-term{ + margin-left:.4em +} +.oxy-pricing-box-sale-price{ + width:100%; + flex-grow:0; + flex-shrink:0 +} +.oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-content{ + order:40 +} +.oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-cta{ + order:60 +} +@keyframes oxy_progress_bar_width{ + 0%{ + width:0% + } + 100%{ + width:100% + } +} +@keyframes oxy_progress_bar_stripes{ + from{ + background-position:44px 0 + } + to{ + background-position:0 0 + } +} +.oxy-progress-bar-background,.oxy-progress-bar-progress{ + background-position:0 0; + background-attachment:fixed; + background-size:44px 44px +} +.oxy-progress-bar{ + display:flex; + flex-direction:column; + align-items:center; + width:100% +} +.oxy-progress-bar-background{ + background-color:#d3d3d3; + width:100% +} +.oxy-progress-bar-progress{ + padding:20px; + display:flex; + background-color:#a9a9a9; + align-items:center +} +.oxy-progress-bar-overlay-percent{ + margin-left:auto; + padding-left:1em; + font-size:.8em +} +.oxy-tab,.oxy-tab-content{ + padding:20px +} +.oxy-progress-bar-overlay-percent:empty{ + display:none +} +.oxy-superbox{ + display:inline-flex +} +.oxy-superbox-primary,.oxy-superbox-secondary,.oxy-tabs-wrapper{ + display:flex +} +.oxy-superbox-wrap{ + position:relative; + overflow:hidden; + display:flex; + width:100% +} +.oxy-superbox-primary{ + position:relative; + top:0; + left:0; + width:100% +} +.oxy-superbox-secondary{ + position:absolute; + top:0; + left:0; + width:100%; + height:100% +} +.oxy-tab{ + cursor:pointer +} +.oxy-tabs-contents-content-hidden{ + display:none!important +} +.oxy-testimonial{ + display:flex; + width:100% +} +.oxy-testimonial .oxy-testimonial-photo-wrap{ + display:flex; + flex-direction:column +} +.oxy-testimonial .oxy-testimonial-photo{ + border-radius:50% +} +.oxy-testimonial .oxy-testimonial-content-wrap{ + display:flex; + flex-direction:column; + order:2 +} +.oxy-testimonial .oxy-testimonial-author-wrap{ + display:flex; + flex-direction:column +} +.oxy-testimonial .oxy-testimonial-author,.oxy-testimonial .oxy-testimonial-author-info{ + display:flex +} +.oxy-toggle{ + display:flex; + flex-direction:row; + cursor:pointer +} +.oxy-toggle-content{ + align-self:stretch; + flex-grow:1; + display:flex; + flex-direction:column; + justify-content:center +} +.oxy-expand-collapse-icon{ + align-self:center; + flex-shrink:0; + flex-grow:0; + margin-right:.4em; + text-align:initial; + width:1em; + height:1em; + position:relative; + display:inline-block +} +.oxy-expand-collapse-icon::after,.oxy-expand-collapse-icon::before{ + content:""; + background-color:#000; + position:absolute; + width:1em; + height:.16em; + top:calc((1em/2) - .08em); + transition:.3s ease-in-out all; + border-radius:.03em +} +.oxy-expand-collapse-icon::after{ + transform:rotate(-90deg)scale(0) +} +.oxy-eci-collapsed.oxy-expand-collapse-icon::after{ + transform:rotate(-180deg) +} +.oxy-eci-collapsed.oxy-expand-collapse-icon::before{ + transform:rotate(-90deg) +} +[data-aos][data-aos=""]{ + transition-duration:0s!important +} +body.oxy-modal-active{ + height:100vh; + overflow-y:hidden; + position:fixed; + right:0; + left:0 +} +.oxy-modal-backdrop{ + display:flex; + align-items:center; + justify-content:center +} +body:not(.oxygen-builder-body) .oxy-modal-backdrop{ + display:none +} +body.oxygen-builder-body .oxy-modal-backdrop{ + height:100vh +} +.oxy-modal-backdrop.live{ + position:fixed; + top:0; + left:0; + width:100%; + height:100%; + z-index:1400 +} +.oxy-modal-backdrop.hidden{ + display:none +} +.oxy-modal-backdrop.left{ + flex-direction:column; + align-items:flex-start +} +.oxy-modal-backdrop.right{ + flex-direction:column; + align-items:flex-end +} +.oxy-modal-backdrop.top{ + flex-direction:row; + align-items:flex-start +} +.oxy-modal-backdrop.bottom{ + flex-direction:row; + align-items:flex-end +} +.oxy-modal-backdrop.upper_left{ + flex-direction:row; + align-items:flex-start; + justify-content:flex-start +} +.oxy-modal-backdrop.upper_right{ + flex-direction:row; + align-items:flex-start; + justify-content:flex-end +} +.oxy-modal-backdrop.bottom_left{ + flex-direction:row; + align-items:flex-end; + justify-content:flex-start +} +.oxy-modal-backdrop.bottom_right{ + flex-direction:row; + align-items:flex-end; + justify-content:flex-end +} +.oxy-modal-backdrop .ct-modal{ + background-color:#fff; + max-height:100vh; + overflow-y:auto +} +div.oxy-dynamic-list div.oxy-product-images.oxy-woo-element{ + align-self:stretch +} +div.oxy-repeater-pages,div.oxy-repeater-pages-wrap{ + display:flex +} +.oxy-rich-text p:first-child{ + margin-block-start:0 +} +.oxy-rich-text p:last-child{ + margin-block-end:0 +} + +#section-13-13 > .ct-section-inner-wrap{ + padding-top:0; + padding-bottom:0 +} +#section-13-13{ + border-top-width: 1px; + border-top-style: solid; + border-top-color: rgba(0,0,0,0.1); + background-color: #472b2c; +} +#section-24-13 > .ct-section-inner-wrap{ + padding-top:11px; + padding-bottom:12px +} +#section-24-13{ + background-color:#472b2c +} +#div_block-15-13{ + width: 33.33%; + text-align: left; + align-items: center; + justify-content: center; +} +#text_block-32-13 { + color: white; +} +#div_block-17-13{ + width:33.33%; + flex-direction:column; + display:flex; + text-align:center; + align-items:center; + justify-content:center +} +#div_block-20-13{ + width: 33.34%; + flex-direction: column; + display: flex; + text-align: right; + align-items: center; + justify-content: center; +} +#div_block-25-13{ + width:100%; + margin-top:0px; + margin-bottom:0px; + height:25px +} +@media (max-width:767px){ + #div_block-15-13{ + flex-direction:column; + display:flex; + align-items:center; + text-align:center + } +} +@media (max-width:767px){ + #div_block-17-13{ + flex-direction:column; + display:flex; + align-items:center; + text-align:center + } +} +@media (max-width:767px){ + #div_block-20-13{ + flex-direction:column; + display:flex; + align-items:center; + text-align:center; + padding-top:36px + } +} +@media (max-width:767px){ + #new_columns-14-13> .ct-div-block{ + width:100% !important + } + #new_columns-14-13{ + flex-direction:column + } +} +#text_block-26-13{ + color:rgba(255,255,255,0.69) +} +#link_button-23-13{ + background-color:#add14c; + border: 1px solid #add14c; +} +#link_button-23-13{ + margin-left:1em; + transition-duration:.5s; + text-transform:uppercase; + font-size:14px; + font-weight:500 +} +#link_button-23-13:hover{ + background-color:#add14c; + border:1px solid #add14c; + color:#ffffff +} +#image-8-13{ + width:160px +} +#image-19-13{ + width:160px +} +#fancy_icon-27-13{ + color:#add14c +} +#fancy_icon-27-13>svg{ + width:30px; + height:30px +} +#fancy_icon-27-13{ + margin-right:.5em +} +#fancy_icon-27-13:hover{ + transition-duration:.3s +} +#_nav_menu-11-13 .oxy-nav-menu-hamburger-line{ + background-color:#ffffff +} +@media (max-width:991px){ + #_nav_menu-11-13 .oxy-nav-menu-list{ + display:none + } + #_nav_menu-11-13 .oxy-menu-toggle{ + display:initial + } + #_nav_menu-11-13.oxy-nav-menu.oxy-nav-menu-open .oxy-nav-menu-list{ + display:initial + } +} +#_nav_menu-11-13.oxy-nav-menu.oxy-nav-menu-open{ + margin-top:0 !important; + margin-right:0 !important; + margin-left:0 !important; + margin-bottom:0 !important +} +#_nav_menu-11-13.oxy-nav-menu.oxy-nav-menu-open .menu-item a{ + padding-top:8px; + padding-bottom:8px; + padding-left:24px; + padding-right:24px +} +#_nav_menu-11-13.oxy-nav-menu.oxy-nav-menu-open .menu-item a:hover{ + color:#8dc63f +} +#_nav_menu-11-13 .oxy-nav-menu-hamburger-wrap{ + width:24px; + height:24px +} +#_nav_menu-11-13 .oxy-nav-menu-hamburger{ + width:24px; + height:19px +} +#_nav_menu-11-13 .oxy-nav-menu-hamburger-line{ + height:3px; + background-color:#ffffff +} +#_nav_menu-11-13 .oxy-nav-menu-hamburger-wrap:hover .oxy-nav-menu-hamburger-line{ + background-color:#ffffff +} +#_nav_menu-11-13.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:first-child{ + top:8px +} +#_nav_menu-11-13.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:last-child{ + top:-8px +} +#_nav_menu-11-13{ + text-transform:uppercase; + -webkit-font-smoothing:subpixel-antialiased; + -moz-osx-font-smoothing:unset; +} +#_nav_menu-11-13 .oxy-nav-menu-list{ + flex-direction:row +} +#_nav_menu-11-13 .menu-item a{ + padding-top:24px; + padding-left:24px; + padding-right:24px; + padding-bottom:24px; + color:#ffffff; + font-size:14px; + font-weight:500; + letter-spacing:1px; + -webkit-font-smoothing:subpixel-antialiased; + -moz-osx-font-smoothing:unset +} +#_nav_menu-11-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu{ + background-color:#8dc63f +} +#_nav_menu-11-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu .menu-item a{ + border:0; + padding-top:24px; + padding-bottom:24px +} +#_nav_menu-11-13 .menu-item:focus-within a,#_nav_menu-11-13 .menu-item:hover a{ + color:#ffffff; + background-color:#8dc63f +} +#_nav_menu-11-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu:hover{ + background-color:#8dc63f +} +#_nav_menu-11-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu .menu-item a:hover{ + border:0; + padding-top:24px; + padding-bottom:24px; + background-color:#018699 +} +#_nav_menu-16-13 .oxy-nav-menu-hamburger-line{ + background-color:#f38d48 +} +#_nav_menu-16-13.oxy-nav-menu.oxy-nav-menu-open{ + margin-top:0 !important; + margin-right:0 !important; + margin-left:0 !important; + margin-bottom:0 !important +} +#_nav_menu-16-13.oxy-nav-menu.oxy-nav-menu-open .menu-item a{ + padding-top:8px; + padding-bottom:8px; + padding-left:20px; + padding-right:20px +} +#_nav_menu-16-13 .oxy-nav-menu-hamburger-wrap{ + width:40px; + height:40px; + margin-top:10px; + margin-bottom:10px +} +#_nav_menu-16-13 .oxy-nav-menu-hamburger{ + width:40px; + height:32px +} +#_nav_menu-16-13 .oxy-nav-menu-hamburger-line{ + height:6px +} +#_nav_menu-16-13.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:first-child{ + top:13px +} +#_nav_menu-16-13.oxy-nav-menu-open .oxy-nav-menu-hamburger .oxy-nav-menu-hamburger-line:last-child{ + top:-13px +} +#_nav_menu-16-13 .oxy-nav-menu-list{ + flex-direction:column +} +#_nav_menu-16-13 .menu-item a{ + padding-top:8px; + padding-left:20px; + padding-right:20px; + padding-bottom:8px; + letter-spacing:2px; + font-weight:500; + font-size:14px; + text-transform:uppercase; + color:#f38d48 +} +#_nav_menu-16-13.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a{ + justify-content:center +} +#_nav_menu-16-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu .menu-item a{ + border:0; + padding-left:8px; + padding-right:8px +} +#_nav_menu-16-13 .menu-item:focus-within a,#_nav_menu-16-13 .menu-item:hover a{ + color:#63002f +} +#_nav_menu-16-13.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a:hover{ + justify-content:center +} +#_nav_menu-16-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu .menu-item a:hover{ + border:0; + padding-left:8px; + padding-right:8px +} +@media (max-width:991px){ + #_nav_menu-11-13{ + padding-top:24px; + padding-left:24px; + padding-right:24px; + padding-bottom:24px + } + #_nav_menu-11-13.oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu .menu-item a{ + border:0 + } +} +#_header_row-5-13 .oxy-nav-menu-open,#_header_row-5-13 .oxy-nav-menu:not(.oxy-nav-menu-open) .sub-menu{ + background-color:#472b2c +} +.oxy-header.oxy-sticky-header-active > #_header_row-5-13.oxygen-show-in-sticky-only{ + display:block +} +#_header_row-5-13{ + background-color:#472b2c +} +#_social_icons-22-13.oxy-social-icons{ + flex-direction:row; + margin-right:-4px; + margin-bottom:-4px +} +#_social_icons-22-13.oxy-social-icons a{ + font-size:32px; + margin-right:4px; + margin-bottom:4px; + border-radius:50%; + background-color:#8dc63f +} +#_social_icons-22-13.oxy-social-icons a:hover{ + background-color:#d7193d +} +#_social_icons-22-13.oxy-social-icons a svg{ + width:0.5em; + height:0.5em; + color:#ffffff +} + +.ct-section { + width:100%; + background-size:cover; + background-repeat:repeat; +} + .ct-section>.ct-section-inner-wrap { + display:flex; + flex-direction:column; + align-items:flex-start; +} + .ct-div-block { + display:flex; + flex-wrap:nowrap; + flex-direction:column; + align-items:flex-start; +} + .ct-new-columns { + display:flex; + width:100%; + flex-direction:row; + align-items:stretch; + justify-content:center; +} + .ct-link-text { + display:inline-block; +} + .ct-link { + display:flex; + flex-wrap:wrap; + text-align:center; + text-decoration:none; + flex-direction:column; + align-items:center; + justify-content:center; +} + .ct-link-button { + display:inline-block; + text-align:center; + text-decoration:none; +} + .ct-link-button { + background-color: #1e73be; + border: 1px solid #1e73be; + color: #ffffff; + padding: 10px 16px; +} + .ct-image { + max-width:100%; +} + .ct-fancy-icon>svg { + width:55px; + height:55px; +} + .ct-inner-content { + width:100%; +} + .ct-slide { + display:flex; + flex-wrap:wrap; + text-align:center; + flex-direction:column; + align-items:center; + justify-content:center; +} + .ct-nestable-shortcode { + display:flex; + flex-wrap:nowrap; + flex-direction:column; + align-items:flex-start; +} + .oxy-comments { + width:100%; + text-align:left; +} + .oxy-comment-form { + width:100%; +} + .oxy-login-form { + width:100%; +} + .oxy-search-form { + width:100%; +} + .oxy-tabs-contents { + display:flex; + width:100%; + flex-wrap:nowrap; + flex-direction:column; + align-items:flex-start; +} + .oxy-tab { + display:flex; + flex-wrap:nowrap; + flex-direction:column; + align-items:flex-start; +} + .oxy-tab-content { + display:flex; + width:100%; + flex-wrap:nowrap; + flex-direction:column; + align-items:flex-start; +} + .oxy-testimonial { + width:100%; +} + .oxy-icon-box { + width:100%; +} + .oxy-pricing-box { + width:100%; +} + .oxy-posts-grid { + width:100%; +} + .oxy-gallery { + width:100%; +} + .ct-slider { + width:100%; +} + .oxy-tabs { + display:flex; + flex-wrap:nowrap; + flex-direction:row; + align-items:stretch; +} + .ct-modal { + flex-direction:column; + align-items:flex-start; +} + .ct-span { + display:inline-block; + text-decoration:inherit; +} + .ct-widget { + width:100%; +} + .oxy-dynamic-list { + width:100%; +} + @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .ct-div-block, .oxy-post-content, .ct-text-block, .ct-headline, .oxy-rich-text, .ct-link-text { + max-width: 100%; + } + img { + flex-shrink: 0; + } + body * { + min-height: 1px; + } +} + .oxy-testimonial { + flex-direction: row; + align-items: center; +} + .oxy-testimonial .oxy-testimonial-photo-wrap { + order: 1; +} + .oxy-testimonial .oxy-testimonial-photo { + width: 125px; + height: 125px; + margin-right: 20px; +} + .oxy-testimonial .oxy-testimonial-photo-wrap, .oxy-testimonial .oxy-testimonial-author-wrap, .oxy-testimonial .oxy-testimonial-content-wrap { + align-items: flex-start; + text-align: left; +} + .oxy-testimonial .oxy-testimonial-text { + margin-bottom:8px; + font-size: 21px; + line-height: 1.4; + -webkit-font-smoothing: subpixel-antialiased; +} + .oxy-testimonial .oxy-testimonial-author { + font-size: 18px; + -webkit-font-smoothing: subpixel-antialiased; +} + .oxy-testimonial .oxy-testimonial-author-info { + font-size: 12px; + -webkit-font-smoothing: subpixel-antialiased; +} + .oxy-icon-box { + text-align: left; + flex-direction: column; +} + .oxy-icon-box .oxy-icon-box-icon { + margin-bottom: 12px; + align-self: flex-start; +} + .oxy-icon-box .oxy-icon-box-heading { + font-size: 21px; + margin-bottom: 12px; +} + .oxy-icon-box .oxy-icon-box-text { + font-size: 16px; + margin-bottom: 12px; + align-self: flex-start; +} + .oxy-icon-box .oxy-icon-box-link { + margin-top: 20px; +} +/* GLOBALS */ + .oxy-pricing-box .oxy-pricing-box-section { + padding-top: 20px; + padding-left: 20px; + padding-right: 20px; + padding-bottom: 20px; + text-align: center; +} + .oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-price { + justify-content: center; +} +/* IMAGE */ + .oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-graphic { + justify-content: center; +} +/* TITLE */ + .oxy-pricing-box .oxy-pricing-box-title-title { + font-size: 48px; +} + .oxy-pricing-box .oxy-pricing-box-title-subtitle { + font-size: 24px; +} +/* PRICE */ + .oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-price { + flex-direction: row; +} + .oxy-pricing-box .oxy-pricing-box-currency { + font-size: 28px; +} + .oxy-pricing-box .oxy-pricing-box-amount-main { + font-size: 80px; + line-height: 0.7; +} + .oxy-pricing-box .oxy-pricing-box-amount-decimal { + font-size: 13px; +} + .oxy-pricing-box .oxy-pricing-box-term { + font-size: 16px; +} + .oxy-pricing-box .oxy-pricing-box-sale-price { + font-size: 12px; + color: rgba(0,0,0,0.5); + margin-bottom: 20px; +} +/* CONTENT */ + .oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-content { + font-size: 16px; + color: rgba(0,0,0,0.5); +} +/* CTA */ + .oxy-pricing-box .oxy-pricing-box-section.oxy-pricing-box-cta { + justify-content: center; +} + .oxy-progress-bar .oxy-progress-bar-background { + background-color: #000000; + background-image: linear-gradient(-45deg,rgba(255,255,255,.12) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.12) 75%,transparent 75%,transparent); + animation: none 0s paused; +} + .oxy-progress-bar .oxy-progress-bar-progress-wrap { + width: 85%; +} + .oxy-progress-bar .oxy-progress-bar-progress { + background-color: #66aaff; + padding: 40px; + animation: none 0s paused, none 0s paused; + background-image: linear-gradient(-45deg,rgba(255,255,255,.12) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.12) 75%,transparent 75%,transparent); +} + .oxy-progress-bar .oxy-progress-bar-overlay-text { + font-size: 30px; + font-weight: 900; + -webkit-font-smoothing: subpixel-antialiased; +} + .oxy-progress-bar .oxy-progress-bar-overlay-percent { + font-size: 12px; +} + .ct-slider .unslider-nav ol li { + border-color: #ffffff; +} +.ct-slider .unslider-nav ol li.unslider-active { + background-color: #ffffff; +} +.ct-slider .ct-slide { + padding: 0px; +} + .oxy-superbox .oxy-superbox-secondary, .oxy-superbox .oxy-superbox-primary { + transition-duration: 0.5s; +} + .oxy-shape-divider { + width: 0px; + height: 0px; +} + .oxy_shape_divider svg { + width: 100%; +} + .oxy-pro-menu .oxy-pro-menu-show-dropdown .oxy-pro-menu-list .menu-item-has-children > a svg{ + transition-duration:0.4s; +} + .oxy-pro-menu .oxy-pro-menu-show-dropdown .oxy-pro-menu-list .menu-item-has-children > a div{ + margin-left:0px; +} + .oxy-pro-menu .oxy-pro-menu-mobile-open-icon svg{ + width:30px; + height:30px; +} + .oxy-pro-menu .oxy-pro-menu-mobile-open-icon{ + padding-top:15px; + padding-right:15px; + padding-bottom:15px; + padding-left:15px; +} + .oxy-pro-menu .oxy-pro-menu-mobile-open-icon, .oxy-pro-menu .oxy-pro-menu-mobile-open-icon svg{ + transition-duration:0.4s; +} + .oxy-pro-menu .oxy-pro-menu-mobile-close-icon{ + top:20px; + left:20px; +} + .oxy-pro-menu .oxy-pro-menu-mobile-close-icon svg{ + width:24px; + height:24px; +} + .oxy-pro-menu .oxy-pro-menu-mobile-close-icon, .oxy-pro-menu .oxy-pro-menu-mobile-close-icon svg{ + transition-duration:0.4s; +} + .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-off-canvas-container, .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-open-container{ + background-color:#ffffff; +} + .oxy-pro-menu .oxy-pro-menu-off-canvas-container, .oxy-pro-menu .oxy-pro-menu-open-container{ + background-image:url(); +} + .oxy-pro-menu .oxy-pro-menu-off-canvas-container .oxy-pro-menu-list .menu-item-has-children > a svg, .oxy-pro-menu .oxy-pro-menu-open-container .oxy-pro-menu-list .menu-item-has-children > a svg{ + font-size:24px; +} + .oxy-pro-menu .oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-open-container .menu-item-has-children ul, .oxy-pro-menu .oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-off-canvas-container .menu-item-has-children ul{ + background-color:rgba(0,0,0,0.2); + border-top-style:solid; +} + .oxy-pro-menu .oxy-pro-menu-container:not(.oxy-pro-menu-open-container):not(.oxy-pro-menu-off-canvas-container) .oxy-pro-menu-list{ + flex-direction: row; +} + .oxy-pro-menu .oxy-pro-menu-container .menu-item a{ + text-align: left; + justify-content: flex-start; +} + .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-open-container .menu-item, .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-off-canvas-container .menu-item{ + align-items: flex-start; +} + .oxy-pro-menu .oxy-pro-menu-off-canvas-container{ + top: 0; + bottom: 0; + right: auto; + left: 0; +} + .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-open-container .oxy-pro-menu-list .menu-item a, .oxy-pro-menu .oxy-pro-menu-container.oxy-pro-menu-off-canvas-container .oxy-pro-menu-list .menu-item a{ + text-align: left; + justify-content: flex-start; +} + .oxy-site-navigation { + --oxynav-brand-color:#4831B0; + --oxynav-neutral-color:#FFFFFF; + --oxynav-activehover-color:#EFEDF4; + --oxynav-background-color:#4831B0; + --oxynav-border-radius:0px; + --oxynav-other-spacing:8px; + --oxynav-transition-duration:0.3s; + --oxynav-transition-timing-function:cubic-bezier(.84,.05,.31,.93); +} + .oxy-site-navigation .oxy-site-navigation__mobile-close-wrapper{ + text-align:left; +} + .oxy-site-navigation > ul{ + left: 0; +} + .oxy-site-navigation { + --oxynav-animation-name: none; +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(1){ + background-color: var(--oxynav-brand-color); + transition: var(--oxynav-transition-duration); + margin-left: var(--oxynav-other-spacing); + border: none; +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(2){ + background: transparent; + border: 1px solid currentColor; + transition: var(--oxynav-transition-duration); + margin-left: var(--oxynav-other-spacing); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(2):not(:hover) > img{ + filter: invert(0) !important; +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:hover{ + background-color: var(--oxynav-activehover-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(1) > a{ + color: var(--oxynav-neutral-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(2) > a{ + color: var(--oxynav-brand-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:hover > a{ + color: var(--oxynav-brand-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(1) > a::after{ + color: var(--oxynav-neutral-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:nth-last-child(2) > a::after{ + color: var(--oxynav-brand-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true']:hover > a::after{ + color: var(--oxynav-brand-color); +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true'] > ul{ + display: none; +} + .oxy-site-navigation > ul:not(.open) > li[data-cta='true'] > button, .oxy-site-navigation > ul:not(.open) > li[data-cta='true'] > ul{ + display: none; +} + .ct-section-inner-wrap, .oxy-header-container{ + max-width: 1120px; +} +.ct-link-text { + text-decoration: none; +} +.ct-link { + text-decoration: none; +} +.ct-link-button { + border-radius: 3px; +} +.ct-section-inner-wrap { + padding-top: 75px; + padding-right: 20px; + padding-bottom: 75px; + padding-left: 20px; +} +.ct-new-columns > .ct-div-block { + padding-top: 20px; + padding-right: 20px; + padding-bottom: 20px; + padding-left: 20px; +} +.oxy-header-container { + padding-right: 20px; + padding-left: 20px; +} +@media (max-width: 992px) { + .ct-columns-inner-wrap { + display: block !important; + } + .ct-columns-inner-wrap:after { + display: table; + clear: both; + content: ""; + } + .ct-column { + width: 100% !important; + margin: 0 !important; + } + .ct-columns-inner-wrap { + margin: 0 !important; + } +} + .universities { +} + .juce-section { +} + .text-universities { +} + .customers { +} + .faq-question { + font-weight:700; + font-size:120%; + margin-bottom:.5em; +} + .faq-answer { +} + .juce-headline-4 { + font-weight:400; + font-size:24px; + margin-bottom:.5em; +} + .juce-headline-2 { + font-weight:400; + line-height:1.2; + font-size:400%; +} + .juce-outline-button { + font-weight:700; + border-top-style:solid; + border-right-style:solid; + border-bottom-style:solid; + border-left-style:solid; + border-top-width:2px; + border-right-width:2px; + border-bottom-width:2px; + border-left-width:2px; + border-top-color:#3c3876; + border-right-color:#3c3876; + border-bottom-color:#3c3876; + border-left-color:#3c3876; + padding-top:8px; + padding-bottom:8px; + padding-left:8px; + padding-right:8px; + border-radius:8px; +} + .md-space { +} + .top-md-space { + margin-top:1em; +} + .juce-headline-1 { +} + .juce-headline { + margin-bottom:25px; +} + .juce-feature-headline { + font-weight:600; +} + .juce-subhead { + font-weight:100; +} + .juce { +} + .juce-title { + margin-bottom:02em; + border-bottom-color:rgba(0,0,0,0.3); + border-bottom-style:solid; + line-height:1; + padding-bottom:8px; + color:#adb4b9; +} + .allcaps { + text-transform:uppercase; +} + .juce-heading-bottom-border { +} + .heading-border { + margin-bottom:25px; + margin-top:0px; + margin-left:0px; + margin-right:0px; + padding-top:0px; + padding-right:0px; + padding-bottom:10px; + padding-left:0px; +} + .heading-bottom-border { + border-bottom-color:rgba(0,0,0,0.3); + border-bottom-style:solid; + border-bottom-width:5px; +} + .headline-bottom-border-thin { + border-top-color:rgba(0,0,0,0.3); + border-right-color:rgba(0,0,0,0.3); + border-bottom-color:rgba(0,0,0,0.3); + border-left-color:rgba(0,0,0,0.3); + border-bottom-width:2px; + border-bottom-style:solid; + padding-bottom:.2em; +} + .headline-border { + margin-bottom:25px; + padding-bottom:10px; +} + .headline-bottom-border { + border-top-color:rgba(0,0,0,0.3); + border-right-color:rgba(0,0,0,0.3); + border-bottom-color:rgba(0,0,0,0.3); + border-left-color:rgba(0,0,0,0.3); + border-top-width:5px; + border-right-width:5px; + border-bottom-width:5px; + border-left-width:5px; + border-top-style:none; + border-right-style:none; + border-bottom-style:solid; + border-left-style:none; + padding-bottom:.2em; +} + .headline-left-border { + border-left-color:rgba(0,0,0,0.3); + border-left-width:16px; + border-left-style:solid; + padding-left:16px; +} + .headline-left-border-primary { + border-left-color:#f38d48; + border-left-width:16px; + border-left-style:solid; + padding-left:16px; + border-top-color:#f38d48; + border-right-color:#f38d48; + border-bottom-color:#f38d48; +} + .headline-left-border-secondary { + border-left-width:16px; + border-left-style:solid; + padding-left:16px; + border-left-color:#8dc63f; +} + .headline-left-border-tertiary { + border-left-width:16px; + border-left-style:solid; + padding-left:16px; + border-left-color:#a95a96; +} + .headline-left-border-quad { + border-left-width:16px; + border-left-style:solid; + padding-left:16px; + border-left-color:#018699; +} + .juce-button:hover{ +} + .juce-button:hover{ +} + .juce-button { + padding: 10px 16px; + border-radius:8px; + font-size:18px; +} + .btn-default:hover{ +} + .btn-default { + padding: 10px 16px; +} + .btn-default { +} + .mr-sm { + margin-right:.5em; +} + .btn-success:hover{ + background-color :#73af1f; + border: 1px solid #73af1f; +} + .btn-success:hover{ +} + .btn-success { + background-color :#5b930b; + border: 1px solid #5b930b; + color: #ffffff; + padding: 10px 16px; +} + .btn-info:hover{ + background-color :#89c1f9; + border: 1px solid #89c1f9; +} + .btn-info { + background-color :#5ba5ef; + border: 1px solid #5ba5ef; + color: #f9f9fa; +} + .btn-warning:hover{ + background-color :#ffd468; + border: 1px solid #ffd468; + color: #130c0e; +} + .btn-warning { + background-color :#f2c248; + border: 1px solid #f2c248; + color: #130c0e; + padding: 10px 16px; +} + .btn-danger:hover{ + background-color :#f42929; + border: 1px solid #f42929; +} + .btn-danger { + background-color :#e0081e; + border: 1px solid #e0081e; +} + .btn-primary:hover{ + background-color :#f09f53; + border: 1px solid #f09f53; + color: #ffffff; +} + .btn-primary { + background-color :#f38d48; + border: 1px solid #f38d48; +} + .btn-secondary:hover{ + background-color :#739613; + border: 1px solid #739613; + color: #130c0e; +} + .btn-secondary { + background-color :#add14c; + border: 1px solid #add14c; + color: #130c0e; + padding: 8px 12.8px; + font-weight:100; + font-size:41px; +} + .btn-tertiary:hover{ + background-color :#8c3275; + border: 1px solid #8c3275; +} + .btn-tertiary:hover{ +} + .btn-tertiary { + background-color :#a95a96; + border: 1px solid #a95a96; +} + .btn-quad:hover{ + background-color :#046472; + border: 1px solid #046472; +} + .btn-quad:hover{ +} + .btn-quad { + background-color :#018699; + border: 1px solid #018699; +} + .mb-lg { + margin-bottom:1em; +} + .btn-lg { + font-size:200%; + padding-bottom:22px; + padding-top:16px; +} + .btn-sm { + font-size:90%; + padding-top:0px; + padding-right:8px; + padding-bottom:2px; + padding-left:8px; +} + .headline-title-shadow { + color:#ffffff; + text-shadow:2px 3px 5px #130c0e; +} + .text-description { + font-style:italic; + font-size:.9em; + color:rgba(19,12,14,0.5); +} + .text-light { + color:rgba(255,255,255,0.5); +} + .juce-feature { +} + .juce-iconblock-11-wrapper { + background-color:#ffffff; + padding-top:30px; + padding-left:30px; + padding-right:30px; + padding-bottom:30px; + width:46%; + margin-top:2%; + margin-left:2%; + margin-right:2%; + margin-bottom:2%; + border-left-color:#018699; + border-left-style:solid; + border-left-width:5px; + box-shadow:0px 20px 40px rgba(0,0,0,0.05); +} + @media (max-width: 767px) { + .juce-iconblock-11-wrapper { + width:98%; + } +} + .juce-primary { + color:#f38d48; +} + .juce-secondary { + color:#8dc63f; +} + .juce-tertiary { + color:#a95a96; +} + .juce-quad { + color:#018699; +} + .alert { + width:100%; + background-color:#f4f4f4; + border-top-color:#666666; + border-right-color:#666666; + border-bottom-color:#666666; + border-left-color:#666666; + border-top-width:2px; + border-right-width:2px; + border-bottom-width:2px; + border-left-width:2px; + border-top-style:solid; + border-right-style:solid; + border-bottom-style:solid; + border-left-style:solid; + border-radius:12px; + padding-left:16px; + padding-top:16px; + padding-right:16px; + padding-bottom:16px; + margin-bottom:1em; +} + .alert-success { + background-color:rgba(46,140,0,0.27); + border-top-color:#6ca320; + border-right-color:#6ca320; + border-bottom-color:#6ca320; + border-left-color:#6ca320; + color:rgba(41,117,3,0.43); +} + .alert-info { + background-color:rgba(38,168,255,0.23); + border-top-color:#26a8ff; + border-right-color:#26a8ff; + border-bottom-color:#26a8ff; + border-left-color:#26a8ff; + color:rgba(33,137,206,0.59); +} + .alert-default { + background-color:rgba(224,224,224,0.5); + border-top-color:#bcbcbc; + border-right-color:#bcbcbc; + border-bottom-color:#bcbcbc; + border-left-color:#bcbcbc; + color:#bcbcbc; +} + .alert-warning { + background-color:rgba(242,194,72,0.31); + border-top-color:#f2c248; + border-right-color:#f2c248; + border-bottom-color:#f2c248; + border-left-color:#f2c248; + color:#cca951; +} + .alert-danger { + background-color:rgba(224,8,30,0.15); + border-top-color:rgba(127,0,12,0.46); + border-right-color:rgba(127,0,12,0.46); + border-bottom-color:rgba(127,0,12,0.46); + border-left-color:rgba(127,0,12,0.46); + color:rgba(224,8,30,0.63); +} + .juce-image-01 { + border-top-left-radius:25px; + border-top-color:#f09f53; + border-top-width:3px; + border-top-style:solid; + border-bottom-color:#a95a96; + border-bottom-style:solid; + border-bottom-width:2px; + border-bottom-right-radius:25px; +} + .juce-image-2 { + border-top-color:#8dc63f; + border-top-width:2px; + border-top-right-radius:25px; + border-top-style:solid; + border-bottom-color:#ecdc13; + border-bottom-width:2px; + border-bottom-style:solid; + border-bottom-left-radius:25px; +} + .juce-image-03 { + border-top-left-radius:25px; + border-bottom-right-radius:25px; + border-top-style:solid; + border-top-color:#e74253; + border-bottom-color:#018699; + border-bottom-style:solid; +} + .juce-image-04 { + border-bottom-left-radius:25px; + border-top-right-radius:25px; + border-top-style:solid; + border-top-width:2px; + border-top-color:#018699; + border-bottom-color:#add14c; + border-bottom-style:solid; + border-bottom-width:2px; +} + .juce-code { + background-color:#535e53; + padding-top:10px; + padding-right:60px; + padding-bottom:10px; + padding-left:60px; + color:#c0d6a7; + border-radius:25px; +} + .ml-indent { + margin-left:4em; +} + .mt-xlrg { + margin-top:1em; +} + .juce-large-display { + font-weight:700; + font-size:30px; +} + .juce-text-block { +} + .juce-section { +} + .juce-section .ct-section-inner-wrap { + padding-top: 25px; + padding-bottom: 25px; +} + .juce-content-block:hover{ + background-color:#ffffff; + border-top-color:#018699; + border-right-color:#018699; + border-bottom-color:#f38d48; + border-left-color:#018699; +} + .juce-content-block { + border-top-style:solid; + border-right-style:solid; + border-bottom-style:solid; + border-left-style:solid; + border-top-width:2px; + border-right-width:1px; + border-bottom-width:2px; + border-left-width:1px; + border-top-color:#f38d48; + border-right-color:rgba(71,43,44,0.4); + border-bottom-color:#018699; + border-left-color:rgba(71,43,44,0.4); + border-radius:8px; + padding-top:16px; + padding-right:16px; + padding-bottom:16px; + padding-left:16px; + width:100%; + border-top-right-radius:16px; + border-bottom-left-radius:16px; + border-bottom-right-radius:0px; + border-top-left-radius:0px; + color:#685f5f; + text-align:left; +} + .juce-content-block:not(.ct-section):not(.oxy-easy-posts), .juce-content-block.oxy-easy-posts .oxy-posts, .juce-content-block.ct-section .ct-section-inner-wrap{ + display:flex; +} + .juce-content-section-head { + margin-top:1em; + margin-left:.5em; + margin-bottom:0px; + font-size:1.6em; + padding-bottom:.2em; +} + .juce-sitemap { + background-image:linear-gradient(rgba(141,198,63,0.66), rgba(141,198,63,0.66)), url(https://juce.com/wp-content/uploads/2022/07/JUCE-fruit.svg); + background-size:auto, 700px auto; + background-blend-mode:normal; + background-color:#699b23; + background-repeat:no-repeat; + background-position:90% 25%; +} + .juce-sitemap .ct-section-inner-wrap { + padding-top: 15px; + padding-bottom: 14px; +} + .juce-title-overlay { + margin-top:10%; + margin-left:2em; + color:#ffffff; + width:40%; + background-color:rgba(0,0,0,0.4); + padding-top:2em; + padding-right:2em; + padding-bottom:2em; + padding-left:2em; + border-radius:16px; + text-align:left; + border-top-color:#f38d48; + border-top-width:2px; + border-top-style:solid; + border-bottom-left-radius:0px; + border-top-right-radius:0px; + border-bottom-color:#018699; + border-bottom-width:2px; + border-bottom-style:solid; +} + @media (max-width: 767px) { + .juce-title-overlay { + font-size:70%; + line-height:1; + width:14rem; + margin-top:2em; + } +} + @media (max-width: 479px) { + .juce-title-overlay { + width:10rem; + background-color:rgba(0,0,0,0.72); + } +} + .mb-sm { +} + .juce-light { + color:#ffffff; +} + .juce-text-light { + color:#f9f9fa; + text-shadow:1px 1px 8px rgba(71,43,44,0.5); +} + .juce-section-main-header { +} + .mr-lg { + margin-right:1em; +} + .mr-xlg { + margin-right:2em; +} + .mb-xlg { + margin-bottom:2em; + border-top-style:solid; + border-right-style:none; + border-bottom-style:solid; + border-left-style:none; + border-top-color:black; + border-right-color:black; + border-bottom-color:black; + border-left-color:black; + border-top-width:1px; + border-right-width:1px; + border-bottom-width:1px; + border-left-width:1px; + padding-top:20px; + padding-right:20px; + padding-bottom:20px; + padding-left:20px; +} + .light { +} + .mb-md { +} + .width-700 { + max-width:700px; +} + .customers { + background-color:#f09f53; + border-radius:20px; + padding-top:2em; + padding-right:2em; + padding-bottom:2em; + padding-left:2em; +} + .features { +} + .universities { + background-color:#a95a96; + border-radius:20px; + padding-top:2em; + padding-right:2em; + padding-bottom:2em; + padding-left:2em; +} + .text-universities:hover{ + color:#ecdc13; +} + .text-universities { + color:#ffffff; + font-weight:600; + font-size:20px; + margin-bottom:.5em; + margin-left:3em; +} + .juce-button, .juce-button:hover, .btn-secondary:hover { + color: #ffffff; +} + .btn-secondary { + color: #000000; +} +/* Drop Caps */ + p.drop-caps:first-child:first-letter { + float: left; + font-size: 75px; + line-height: 60px; + padding: 4px; + margin-right: 5px; + margin-top: 5px; + font-family: Georgia; +} + p.drop-caps.drop-caps-style-2:first-child:first-letter { + background-color: #CCC; + color: #FFF; + padding: 6px; + margin-right: 5px; + border-radius: 4px; +} +/* Alternative Font Style */ + .alternative-font { + color: #CCC; + font-family: "Shadows Into Light", cursive; + font-size: 1.6em; +} + .juce-sitemap a, .juce-sitemap a:focus { + color: white; +} + .juce-sitemap h3 { + color: rgba(0, 0, 0, 0.4); + border-left: 8px solid rgba(0, 0, 0, 0.2); + padding-left: 8px; + margin-bottom: 10px; + margin-top: 25px; +} +/* text sizing and spaces */ + .text-xs { + font-size: 1rem !important; +} + .text-sm { + font-size: 1.3rem !important; +} + .text-md { + font-size: 1.6rem !important; +} + .text-lg { + font-size: 1.9rem !important; +} + .text-xl { + font-size: 2.2rem !important; +} + .text-muted { + color: #999 !important; +} + html.dark .text-muted { + color: #505461 !important; +} + .text-dark { + color: #1d2127 !important; +} + .text-light { + color: #FFF !important; +} + .text-weight-light { + font-weight: 300 !important; +} + .text-weight-normal { + font-weight: 400 !important; +} + .text-weight-semibold { + font-weight: 600 !important; +} + .text-weight-bold { + font-weight: 700 !important; +} + .text-uppercase { + text-transform: uppercase !important; +} + .text-lowercase { + text-transform: lowercase !important; +} + .text-capitalize { + text-transform: capitalize !important; +} + .rounded { + border-radius: 5px !important; +} + .b-thin { + border-width: 3px !important; +} + .b-normal { + border-width: 5px !important; +} + .b-thick { + border-width: 7px !important; +} +/* Spacements */ +/* spacement top & bottom */ + .m-none { + margin: 0 !important; +} + .m-auto { + margin: 0 auto !important; +} + .m-xs { + margin: 5px !important; +} + .m-sm { + margin: 10px !important; +} + .m-md { + margin: 15px !important; +} + .m-lg { + margin: 20px !important; +} + .m-xl { + margin: 25px !important; +} + .m-xlg { + margin: 30px !important; +} +/* spacement top */ + .mt-none { + margin-top: 0 !important; +} + .mt-xs { + margin-top: 5px !important; +} + .mt-sm { + margin-top: 10px !important; +} + .mt-md { + margin-top: 15px !important; +} + .mt-lg { + margin-top: 20px !important; +} + .mt-xl { + margin-top: 25px !important; +} + .mt-xlg { + margin-top: 30px !important; +} +/* spacement bottom */ + .mb-none { + margin-bottom: 0 !important; +} + .mb-xs { + margin-bottom: 5px !important; +} + .mb-sm { + margin-bottom: 10px !important; +} + .mb-md { + margin-bottom: 15px !important; +} + .mb-lg { + margin-bottom: 20px !important; +} + .mb-xl { + margin-bottom: 25px !important; +} + .mb-xlg { + margin-bottom: 30px !important; +} +/* spacement left */ + .ml-none { + margin-left: 0 !important; +} + .ml-xs { + margin-left: 5px !important; +} + .ml-sm { + margin-left: 10px !important; +} + .ml-md { + margin-left: 15px !important; +} + .ml-lg { + margin-left: 20px !important; +} + .ml-xl { + margin-left: 25px !important; +} + .ml-xlg { + margin-left: 30px !important; +} +/* spacement right */ + .mr-none { + margin-right: 0 !important; +} + .mr-xs { + margin-right: 5px !important; +} + .mr-sm { + margin-right: 10px !important; +} + .mr-md { + margin-right: 15px !important; +} + .mr-lg { + margin-right: 20px !important; +} + .mr-xl { + margin-right: 25px !important; +} + .mr-xlg { + margin-right: 30px !important; +} +/* Spacement Padding */ + .p-none { + padding: 0 !important; +} + .p-xs { + padding: 5px !important; +} + .p-sm { + padding: 10px !important; +} + .p-md { + padding: 15px !important; +} + .p-lg { + padding: 20px !important; +} + .p-xl { + padding: 25px !important; +} + .p-xlg { + padding: 30px !important; +} +/* spacement top */ + .pt-none { + padding-top: 0 !important; +} + .pt-xs { + padding-top: 5px !important; +} + .pt-sm { + padding-top: 10px !important; +} + .pt-md { + padding-top: 15px !important; +} + .pt-lg { + padding-top: 20px !important; +} + .pt-xl { + padding-top: 25px !important; +} + .pt-xlg { + padding-top: 30px !important; +} +/* spacement bottom */ + .pb-none { + padding-bottom: 0 !important; +} + .pb-xs { + padding-bottom: 5px !important; +} + .pb-sm { + padding-bottom: 10px !important; +} + .pb-md { + padding-bottom: 15px !important; +} + .pb-lg { + padding-bottom: 20px !important; +} + .pb-xl { + padding-bottom: 25px !important; +} + .pb-xlg { + padding-bottom: 30px !important; +} +/* spacement left */ + .pl-none { + padding-left: 0 !important; +} + .pl-xs { + padding-left: 5px !important; +} + .pl-sm { + padding-left: 10px !important; +} + .pl-md { + padding-left: 15px !important; +} + .pl-lg { + padding-left: 20px !important; +} + .pl-xl { + padding-left: 25px !important; +} + .pl-xlg { + padding-left: 30px !important; +} +/* spacement right */ + .pr-none { + padding-right: 0 !important; +} + .pr-xs { + padding-right: 5px !important; +} + .pr-sm { + padding-right: 10px !important; +} + .pr-md { + padding-right: 15px !important; +} + .pr-lg { + padding-right: 20px !important; +} + .pr-xl { + padding-right: 25px !important; +} + .pr-xlg { + padding-right: 30px !important; +} + .ib { + display: inline-block; + vertical-align: top; +} + .va-middle { + vertical-align: middle; +} + .ws-nowrap { + white-space: nowrap; +} + .ws-normal { + white-space: normal; +} + .customers p { + font-size: 140%; + font-weight: 800; + color: #000000; +} + .features div { + margin-left: 3em; + margin-bottom:1em; +} + #link-28-13 { + margin-left: 1em; +} diff --git a/docs/doxygen/css/tokyo-night-dark.min.css b/docs/doxygen/css/tokyo-night-dark.min.css new file mode 100644 index 0000000000..dc63ad9e76 --- /dev/null +++ b/docs/doxygen/css/tokyo-night-dark.min.css @@ -0,0 +1,8 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Tokyo-night-Dark + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 +*/.hljs-comment,.hljs-meta{color:#565f89}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#f7768e}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#ff9e64}.hljs-attribute,.hljs-built_in{color:#e0af68}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#7dcfff}.hljs-selector-tag{color:#73daca}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#9ece6a}.hljs-code,.hljs-formula,.hljs-section{color:#7aa2f7}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#bb9af7}.hljs-punctuation{color:#c0caf5}.hljs{background:#1a1b26;color:#9aa5ce}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/docs/doxygen/error.html b/docs/doxygen/error.html new file mode 100644 index 0000000000..71c02649e2 --- /dev/null +++ b/docs/doxygen/error.html @@ -0,0 +1,4 @@ + +

The requested resource is not available.

+

Please contact info@juce.com if you were expecting to find something here.

+ diff --git a/docs/doxygen/favicon.ico b/docs/doxygen/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e731e650f066e038c44e10cdda6ce6a45a9ae7cb GIT binary patch literal 15086 zcmdU02Xvg(l^#QOvnSbI$O3ypayH>?5)6cp?540u2#^@t5EHPC4Q>HLD51rT7#j!} z)7-0Uxyjv@Y}uAvB)O_sy%($3QP-$U(^QQ#-+uSa{L)CCu?^;A&;I9Jy?_4pzI)$& z@7;I5C!KDT?nd2DexhS}hc4;|I^8dHI^7+2_7E$C`dFRG26U*oM7VEx+ z@+4&&!QFZ<%eH9+h*@VRv zu{hCDf_i%w9Q|%|^$(!jJ%9{nKQ1^tO60tZ*V;V;uz1|i^I3W49lk5ykZ%R(A$3Sy z?A6zI@EfBjV<|-xWoHfd%G$FiwYI`N&<{DhltWe*e$!;a_v(A_?YbU(v#wi-oPVF! ze%@%pD~4WFxqa`*yYh{db!P|l(CYEmDRqzfB3kgh8z|E$trTUShcnjTujNNkY-z@T zcR=CR{s^WY>5aIlrW^lO>yukpY9iOZLHQTnpVe-K!z&v54*8aRQ@$;A1hj?JEf{Y2 zJUZ}svHMI)7e%%2@3S{zPje>Q--!}i7k0FjAhM$ZZSGzLBFWx|+i7nNZ>Umq_zCrF zp)bkN>+zz}GJsaQSABaA`-#*g?JRZsF$k7xZU;U)fznP<-`&!wMV6@^U40IGrq9CT#YZuLBBjU^#m8{b)C>=8 zIg@@N{u2tn_>i>G(O#FbeORRnW6$?u`~?cjM_GP+$%!tPmvz=b>JHFBFx_`09eDp{ z%5lLiJ}6^DN>4R9iT!W&srY^IkwM%Verbnw&3OvXcC#}ic4d3w7u(xt`wDYEp1x>P z*af#H=ln%T%hvE_Zzsp>UL#=r*(>Fe9pidH~hB>el zonEdygKp|r$v%8{gHiS0U~M4d(J`?-yY8BD7X+(@JFt}N9~L`d;+T7=El*()Onz*0 zg5l@A(UfX=PTFiq)hYHZm+Gg1{t}2?JAb0&7?Mp*kWulu5I%G>ZU1_)@t?#&KFCnP6qmsU>rSC2VVP3uuEG_$=ilndnf7~W=tr&(DKG? zqW2<-bHKk7>qz_G#%ud5KEK~czYk@5O$Wh0k^MTmyPsGL3R8d|eHMtHxW7lK)$m6& zr7M3f?(M{+l9-@=6NrBTedyWpI5aseXzTale$G>YYnJ zrS$D>H9nmMQviO!`aMkto=ZH2-_Z8YI6!?=P;qsK&{w`HE8=#l3?c?k>m8>KN&A*bFRz_m3{r_=D7G$radHn!K{s^ zQ&MbL%|32+`{rr+E7-Jn(T`cM|BRyMs&QHCk!@;F&|Q5!u-I$R=dnU&%4&xRVa)}Y zHK@nsb{=i&LydI+oXUnB zf=w`rt^Jq<`x_LGj5)K5cEiYVu&pN3XKy`8b!dBzqJvMnlbDElh^AZD@klgYi9pXWf7-i=!J4bfc= zv%`ymW)EU7xsX=h2M68A*k@N5{d1a(^RH86O{d!Bqw07#`%E~I`4GZS>98f95~suV z)Bl8%*}p?g>wdV|E>cCS+lFXE73Nf5z>^$51-r}zGs;e)hQ4a1?OyEY#cQ;^#0o{m zevT(T%!2>fbQ{)JxRBq|&$!zMS}EC+4i#Yfd~ zfj+c{*mDKH=yZVdmC0Iy-REw_R$|{8KWb2v9tr=5n2cYdR38SLvx!LmOisLG5DvR@&~t&TJ><##r&p9y2Bq zv*3Pemro}1{P{==T1;MI%nqCj1iSKmiCYu9YtYgePkVoL5O<&saxQvojlU6xQtm=_ zn3|Z9v7Fa<7xVl2GBs2MLVb_FEL*K+GC;trWcq zTl$gIQ=wvPu{ouUqSjPnv(_Qs(u$gv-663D>LPlG>^XlM&K68XUE3kJ`npHLzU+5B z+d*vo+7YX=uV9|+x3h*dRGCuaL4idN!Rp5^*u4)@m+{#fP}*xidE+MK_kmcibS`}) zoO*0a_zKSCPg3L6WuW~RdO3bBJlTsUb`1BAPJS;9REcFS(2n z_`|*s{vGV&iAA%}*KZ32pZ9SZ!6nipDoNXO5&2dEy11sXTD^Gt zRj$7t_USP3p?1u8tOFk`=)r|}2h2uauwdZ0Dt+Wl&R?R(#0WE8`o^(y3w2ihr3hR&&zqr#`v;1Zx@QAXCp1_7f4=x7v*lGtofl5InUqs z6g`&^W_+XJspYkeTC{9#}C=?)bHAdgl#d2dQ5$!9SdISg52+>pUKh5x#B4G z`0Tt5yKpL&E^GNLcE&5fT`#{xH zo>+(QnTHi_!7l9(`%xnL-5wO@xiRDS9YNbb(?Lqn@wq2CpO(1!O~xJ})-Qhim#rVY z?8oIN=MmTFYruaG(l^}?b4xDzoC7%iandl`Z=QY#+g~_}meLM5xD0!5PR|wFK+{9o zA|ci{eqCw(=+|M``n`rZ;+~pw920*={6Ty@pbfOsj||#g^B-x0 z)I9~tma$Q`tJ+`2*_jhMP+HK3TIZG5?|%HF*$-+cgZUFX*9&#Y%ddj}9;IVXeG2-S zggd=99bv?(;nqsQFJr00QjL+bI|;WUx(rOtG0Z& z9X%*L{>HFzaoKmN<|hshjIT#Tz_ehnP!eL4);UgoQF8#9Ody?^Y{bO?JU3W-~D zln=$n*h6Apy3mNOjsc_?tApha$yA0u=s%a`Z!@`Wc3az3e^$8tbC&e&@>BCT-MM|X ze=)S}MF;VrgA3we7aywk;Q2{IJ|zAkZLn&IiF4QhvdneNS$)3zt)>-qc$}i*I+>Rx zmwmpwierlf`t%LR-0~n&*Z&s^BB!IbvqHsU=fW}}_SI}1s@(c)H1q|noforVE!?6pNYs#OC4tzE!f3dqci}`s6oLpy0jOiwiA&10ihZmo@ zqVH(>NE;Nz`SM&2au(@HPRMvvS>l1E&xt)Pnb*x<_;m=%AH7A6r-+~Gmwj69$=KRhC~@G>F~H1BaqpMM9|ic4#@`jQP1KrG{7HC$k^G(2U{g9A zm>-V_#%+Rg%O9ha$hlmT@w4z`CHnn|sjKjJQs)=u?=&6!ZE+{R6_h^}4pi}{j&Ah2 zU5tGkFgBXeUfzY~!VV>JZfqoHM1Di^i}if=le=d|IPk^Kpp%(CHprfQe+Q?wtqwN8Cq^8RQZ3pe;eUmPm+^82egU9yx!JF;9N*U3zeEamc- zc`T8S1*s=lt_Q)Tm+QnmQXfrEO>fN(G>Njypq-NacGK*r*_99aZ0)nV?9;k~@-Ss^ zpVrO%@dXb0gUlDwzb8}HQj#dbRdx79&gI%ViaaCFUh}?yP>|#s6dB`}PzpIm*@dT( zx$3u>Yw$?sIwf*0*ZlYF@~rYGszfu+pzN4DnRH1{oB=&4sC z=W^|1-jioEJo2vp8{Y_}W3cOd=Pt@|@`C;Htv5@f5O25ygUiZ&K>b)@bYfb2FDA5F zl}zXPqAmxroPFw2INGJ%O_Fj<_$H(_)$~-0gX|P}L{J$x!V=~vO_~)>pGAK7bkvwJ&?GnK@ z(CjXyw8vVmeM+gj@T9S)G|lXy((kh-K!zwQ!GZ;-zGcEvH6JPyTei@gK6 zcsUm?Z+&wf_lbFMpMOt~=q~$~WS^GscEUYs^=hT?sL!R_p|`oPh;{h6-u0|k>K;w0 zeT3Z0MXqV(IMrQ;Y24o+^#$_M(jL#3$D@(`@GqS<<@e%u?~qp)j&pkIaNRZDSuick zcfig(gw!E*NuB<>U!%`?#NW-#YdBo(u(>)=ZZ~30Q@+9>T&(5`g6BAMmx&}!W&hkA zZB(c0(2WbXNy!F?&s%x%4#WyhFvz4${?FW$_x<6wgu zRa`R~n6E8r@!$Y+=#sB(=%;TRJPB}goshRwq7GOxci{swZ1ccY+Y zDY=L;?!ho4y0aE@s}t3pfihdS+8b8Sq(>FM`6BuMPfMN1?DD`s9;KYz=iXc==EwF9 z^0mTmg{QeVmX@h~o>DjYD(g7%R@ptJIG*u8{08D zfsJ`@?T}?p2W`+sea}@gFC_d;5bjdAgT<%pNbhPQSGHcbGAqaDfeBo974?)Lnzr}p zKEw|TU*p4}L&TYXR=mB5+|0s?n>HMI5^>`0(laRvkG4SYOC;uKKtK4Sik73@t094cOt!F zF4~Q$uv;3@#r&ni)HqnZm85>sX$R`6$bU1pb(Z^^-Xnjk@${N4r2cnC*ni0XE+MOY zuBu-+(*sH0!Fl>)b=v`QPqpYZl%p{-9C>>uDK5rPegdX88`>*7(a5n)@`ke~8n9-m z3AyPmbdq<;;Xa3Dwfu>4){dq49@fgJkrL+!I*A9KCQ1DQoXlIe6hfBu6GW;o9U+(Zw-$*Q>`> zPNV!nEwb6Ko?*ROzESe*Q^?;e{Bt+X)8-cTQQFz_8*pSl^WT2HXBYL?LF&ez!l=K9(sT9LJaZ@)EH=p4Ux-@zzxbe*a}2}~ zz1J3W{=F>zDA<9L?rKz@UQ8QEn-8^n>G9WL>o(!Y-_8%q$w~cDZ=Z&#!-0?99-e;| zEMcEnklVrdqk#Lw(pOy;fA}#-{B>I5ua`>>qKX)5&b&(wRQzwW%HP61z{yAIvphHU193a5rr+ zxc-o}gsdqHZYw&tS2lfjAre-k;`ow8B?-$@ksVnA3*#VpCa&|6TCP^OL_0hSbu5wh~diXPsVW)%W3O9>DTmMJKwwR^{0kG zN zn^^SvEa?hhYQveQs_m$HLYIENp4O@|H5J;kD@n+YR!}1L>=74g3bL-Nye9 zIyA5Bh<8hKF86e{b049N>tWfG+JiAI78F|{D&Cs?7+ z%;z4(rCnyVev);>9PUZ{i2MBikYvZQG7}b*#nPWvuJ-FYZdT#W?gQ;5kad`> z38r3(#jdUvjBYTgHR;Yams)>G>^~vVj;*!rm{l0jO?!;{b^6K!;SGtXv({mmK7;>j z5r^@NW6VEK6m_Ey#4v78M}Pv!6M#FQ?^R>pM_ z+wDDf3uDPAQPhzDH}?cc+8~8{EZ=9`HcN}0BP>{()50-qi${Ck7a!k%eTm<~*}O?; zsM|;W-v*}mk(BGg2HNhmqy88);QdFlH#MKqAHl_v=aE^~Wo_aCh< t`Tbe--?2ICE1$>@w}{AjsQ&9>4p=YwUglJnFmoXi>d@}Xv+|C-`@e)oaxnk^ literal 0 HcmV?d00001 diff --git a/docs/doxygen/footer.html b/docs/doxygen/footer.html new file mode 100644 index 0000000000..f594853b2b --- /dev/null +++ b/docs/doxygen/footer.html @@ -0,0 +1,87 @@ + + + + + + +
+ + +
+ +
+ + + + + linkedin + + + + + + facebook + + + + pinterest + + + + youtube + + + + rss + + + + twitter + + + + instagram + + + + + + facebook-blank + + + + rss-blank + + + + linkedin-blank + + + + pinterest + + + + youtube + + + + twitter + + + + instagram + + + + + + + + + diff --git a/docs/doxygen/header.html b/docs/doxygen/header.html new file mode 100644 index 0000000000..9090201708 --- /dev/null +++ b/docs/doxygen/header.html @@ -0,0 +1,108 @@ + + + + + + + + +$projectname: $title +$title + + + + + + + + + + + + +$treeview +$search +$mathjax +$darkmode + +$extrastylesheet + + + + + + + + + + +
+ + + + + + +
+ + +
+ + diff --git a/docs/doxygen/index.html b/docs/doxygen/index.html new file mode 100644 index 0000000000..af1d933f25 --- /dev/null +++ b/docs/doxygen/index.html @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/docs/doxygen/js/cpp.min.js b/docs/doxygen/js/cpp.min.js new file mode 100644 index 0000000000..ec11d3b3c1 --- /dev/null +++ b/docs/doxygen/js/cpp.min.js @@ -0,0 +1,47 @@ +/*! `cpp` grammar compiled for Highlight.js 11.11.1 */ +(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ +className:"number",variants:[{ +begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)" +},{ +begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)" +}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{ +className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},u={ +className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0 +},d=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},_={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],f={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p, +contains:m.concat(["self"]),relevance:0}]),relevance:0},g={className:"function", +begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{ +begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0, +contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p, +relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}] +},s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e) +})(); \ No newline at end of file diff --git a/docs/doxygen/js/highlight.min.js b/docs/doxygen/js/highlight.min.js new file mode 100644 index 0000000000..3fb2e61ae1 --- /dev/null +++ b/docs/doxygen/js/highlight.min.js @@ -0,0 +1,354 @@ +/*! + Highlight.js v11.11.1 (git: 08cb242e7d) + (c) 2006-2025 Josh Goebel and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(t){ +return t instanceof Map?t.clear=t.delete=t.set=()=>{ +throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{ +const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i) +})),t}class t{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function n(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] +;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope +;class r{constructor(e,t){ +this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ +this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const n=e.split(".") +;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ") +}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)} +closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const o=(e={})=>{const t={children:[]} +;return Object.assign(t,e),t};class a{constructor(){ +this.rootNode=o(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const t=o({scope:e}) +;this.add(t),this.stack.push(t)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ +return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), +t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,t){const n=e.root +;t&&(n.scope="language:"+t),this.add(n)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function l(e){ +return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")} +function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")} +function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{ +const t=e[e.length-1] +;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{} +})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n +;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break} +s+=i.substring(0,e.index), +i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0], +"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)} +const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",_="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",O={ +begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t, +contains:[]},n);s.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const r=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return s.contains.push({begin:h(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s +},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({ +__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{ +scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:N, +C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number", +begin:_,relevance:0},C_NUMBER_RE:_,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ +t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const t=/^#![ ]*\// +;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t, +end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){ +"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){ +t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function L(e,t){ +Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function P(e,t){ +void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t] +})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={ +relevance:0,contains:[Object.assign(n,{endsParent:!0})] +},e.relevance=0,delete n.beforeMatch +},H=["of","and","for","in","not","or","if","then","parent","list","value"] +;function C(e,t,n="keyword"){const i=Object.create(null) +;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{ +Object.assign(i,C(e[n],t,n))})),i;function s(e,n){ +t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") +;i[n[0]]=[e,$(n[0],n[1])]}))}}function $(e,t){ +return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const U={},z=e=>{ +console.error(e)},W=(e,...t)=>{console.log("WARN: "+e,...t)},X=(e,t)=>{ +U[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),U[`${e}/${t}`]=!0) +},G=Error();function K(e,t,{key:n}){let i=0;const s=e[n],r={},o={} +;for(let e=1;e<=t.length;e++)o[e+i]=s[e],r[e+i]=!0,i+=p(t[e-1]) +;e[n]=o,e[n]._emit=r,e[n]._multi=!0}function F(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw z("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +G +;if("object"!=typeof e.beginScope||null===e.beginScope)throw z("beginScope must be object"), +G;K(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw z("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +G +;if("object"!=typeof e.endScope||null===e.endScope)throw z("endScope must be object"), +G;K(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function Z(e){ +function t(t,n){ +return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":"")) +}class n{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,t){ +t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const t=this.matcherRe.exec(e);if(!t)return null +;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] +;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n +;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), +t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ +this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ +const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex +;let n=t.exec(e) +;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ +const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} +return n&&(this.regexIndex+=n.position+1, +this.regexIndex===this.count&&this.considerAll()),n}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=i(e.classNameAliases||{}),function n(r,o){const a=r +;if(r.isCompiled)return a +;[I,B,F,D].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))), +r.__beforeBegin=null,[T,L,P].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null +;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), +c=r.keywords.$pattern, +delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=C(r.keywords,e.case_insensitive)), +a.keywordPatternRe=t(c,!0), +o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(a.endRe=t(a.end)), +a.terminatorEnd=l(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)), +r.illegal&&(a.illegalRe=t(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{ +variants:null},t)))),e.cachedVariants?e.cachedVariants:V(e)?i(e,{ +starts:e.starts?i(e.starts):null +}):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a) +})),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new s +;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function V(e){ +return!!e&&(e.endsWithParent||V(e.starts))}class q extends Error{ +constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}} +const J=n,Y=i,Q=Symbol("nomatch"),ee=n=>{ +const i=Object.create(null),s=Object.create(null),r=[];let o=!0 +;const a="Could not find the language '{}', did you forget to load/include a language module?",l={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:c};function b(e){ +return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s="" +;"object"==typeof t?(i=e, +n=t.ignoreIllegals,s=t.language):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."), +X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};N("before:highlight",r) +;const o=r.result?r.result:E(r.language,r.code,n) +;return o.code=r.code,N("after:highlight",o),o}function E(e,n,s,r){ +const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R) +;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n="" +;for(;t;){n+=R.substring(e,t.index) +;const s=w.case_insensitive?t[0].toLowerCase():t[0],r=(i=s,N.keywords[i]);if(r){ +const[e,i]=r +;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{ +const n=w.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0] +;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i +;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{ +if(""===R)return;let e=null;if("string"==typeof N.subLanguage){ +if(!i[N.subLanguage])return void M.addText(R) +;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top +}else e=x(R,N.subLanguage.length?N.subLanguage:null) +;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language) +})():l(),R=""}function u(e,t){ +""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1 +;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue} +const i=w.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}} +function h(e,t){ +return e.scope&&"string"==typeof e.scope&&M.openNode(w.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(u(R,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{ +value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t) +;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e) +;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return f(e.parent,n,i)}function b(e){ +return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){ +const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return Q;const r=N +;N.endScope&&N.endScope._wrap?(g(), +u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(), +d(N.endScope,e)):r.skip?R+=t:(r.returnEnd||r.excludeEnd||(R+=t), +g(),r.excludeEnd&&(R=t));do{ +N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent +}while(N!==s.parent);return s.starts&&h(s.starts,e),r.returnEnd?0:t.length} +let y={};function _(i,r){const a=r&&r[0];if(R+=i,null==a)return g(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===a){ +if(R+=n.slice(r.index,r.index+1),!o){const t=Error(`0 width match regex (${e})`) +;throw t.languageName=e,t.badRule=y.rule,t}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const n=e[0],i=e.rule,s=new t(i),r=[i.__beforeBegin,i["on:begin"]] +;for(const t of r)if(t&&(t(e,s),s.isMatchIgnored))return b(n) +;return i.skip?R+=n:(i.excludeBegin&&(R+=n), +g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(r) +;if("illegal"===r.type&&!s){ +const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"")+'"') +;throw e.mode=N,e}if("end"===r.type){const e=m(r);if(e!==Q)return e} +if("illegal"===r.type&&""===a)return R+="\n",1 +;if(I>1e5&&I>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return R+=a,a.length}const w=O(e) +;if(!w)throw z(a.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const v=Z(w);let k="",N=r||v;const S={},M=new p.__emitter(p);(()=>{const e=[] +;for(let t=N;t!==w;t=t.parent)t.scope&&e.unshift(t.scope) +;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{ +if(w.__emitTokens)w.__emitTokens(n,M);else{for(N.matcher.considerAll();;){ +I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A +;const e=N.matcher.exec(n);if(!e)break;const t=_(n.substring(A,e.index),e) +;A=e.index+t}_(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e, +value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){ +if(t.message&&t.message.includes("Illegal"))return{language:e,value:J(n), +illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A, +context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(o)return{ +language:e,value:J(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N} +;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{ +const t={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)} +;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1))) +;s.unshift(n);const r=s.sort(((e,t)=>{ +if(e.relevance!==t.relevance)return t.relevance-e.relevance +;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1 +;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=r,c=o +;return c.secondBest=a,c}function y(e){let t=null;const n=(e=>{ +let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"" +;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1]) +;return t||(W(a.replace("{}",n[1])), +W("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"} +return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return +;if(N("before:highlightElement",{el:e,language:n +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new q("One of your code blocks includes unescaped HTML.",e.innerHTML) +;t=e;const i=t.textContent,r=n?m(i,{language:n,ignoreIllegals:!0}):x(i) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n +;e.classList.add("hljs"),e.classList.add("language-"+i) +})(e,n,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),N("after:highlightElement",{el:e,result:r,text:i})}let _=!1;function w(){ +if("loading"===document.readyState)return _||window.addEventListener("DOMContentLoaded",(()=>{ +w()}),!1),void(_=!0);document.querySelectorAll(p.cssSelector).forEach(y)} +function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]} +function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +s[e.toLowerCase()]=t}))}function k(e){const t=O(e) +;return t&&!t.disableAutodetect}function N(e,t){const n=e;r.forEach((e=>{ +e[n]&&e[n](t)}))}Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:w, +highlightElement:y, +highlightBlock:e=>(X("10.7.0","highlightBlock will be removed entirely in v12.0"), +X("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)}, +initHighlighting:()=>{ +w(),X("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +w(),X("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){ +if(z("Language definition for '{}' could not be registered.".replace("{}",e)), +!o)throw t;z(t),s=l} +s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete i[e] +;for(const t of Object.keys(s))s[t]===e&&delete s[t]}, +listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v, +autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ +e["before:highlightBlock"](Object.assign({block:t.el},t)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ +e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),r.push(e)}, +removePlugin:e=>{const t=r.indexOf(e);-1!==t&&r.splice(t,1)}}),n.debugMode=()=>{ +o=!1},n.safeMode=()=>{o=!0},n.versionString="11.11.1",n.regex={concat:h, +lookahead:g,either:f,optional:d,anyNumberOfTimes:u} +;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n +},te=ee({});return te.newInstance=()=>ee({}),te}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `cpp` grammar compiled for Highlight.js 11.11.1 */ +(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ +className:"number",variants:[{ +begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)" +},{ +begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)" +}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{ +className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},u={ +className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0 +},d=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},_={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],f={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p, +contains:m.concat(["self"]),relevance:0}]),relevance:0},g={className:"function", +begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{ +begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0, +contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p, +relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}] +},s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e) +})(); \ No newline at end of file diff --git a/docs/doxygen/make.bat b/docs/doxygen/make.bat deleted file mode 100644 index 667edbe738..0000000000 --- a/docs/doxygen/make.bat +++ /dev/null @@ -1,2 +0,0 @@ -python process_source_files.py ..\..\modules build -doxygen diff --git a/docs/doxygen/process_source_files.py b/docs/doxygen/process_source_files.py deleted file mode 100644 index 85ec8ee2f9..0000000000 --- a/docs/doxygen/process_source_files.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python - -import os -import shutil -import re -import argparse - - -def get_curly_brace_scope_end(string, start_pos): - """Given a string and a starting position of an opening brace, find the - position of the closing brace. - """ - start_pos += 1 - string_end = len(string) - bracket_counter = 1 - while start_pos < string_end: - if string[start_pos] == "{": - bracket_counter += 1 - elif string[start_pos] == "}": - bracket_counter -= 1 - if bracket_counter == 0: - return start_pos - start_pos += 1 - return -1 - - -def remove_juce_namespaces(source): - """Return a string of source code with any juce namespaces removed. - """ - namespace_regex = re.compile(r"\s+namespace\s+juce\s*{") - - match = namespace_regex.search(source) - while (match is not None): - source = source[:match.start()] + source[match.end():] - end = get_curly_brace_scope_end(source, match.start() - 1) - if end != -1: - source = source[:end] + source[end + 1:] - match = namespace_regex.search(source) - continue - else: - raise ValueError("failed to find the end of the " - + match.group(1) + " namespace") - return source - - -def add_doxygen_group(path, group_name): - """Add a Doxygen group to the file at 'path'. - - The addition of juce namespacing code to all of the source files breaks - backwards compatibility by changing the doc URLs, so we need to remove - the namespaces. - """ - - filename = os.path.basename(path) - if re.match(r"^juce_.*\.(h|dox)", filename): - with open(path, "r") as f: - content = f.read() - with open(path, "w") as f: - f.write("\r\n/** @weakgroup " + group_name + "\r\n * @{\r\n */\r\n") - f.write(remove_juce_namespaces(content)) - f.write("\r\n/** @}*/\r\n") - - -############################################################################### - -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - parser.add_argument("source_dir", - help="the directory to search for source files") - parser.add_argument("dest_dir", - help="the directory in which to place processed files") - parser.add_argument("--subdirs", - help="if specified, only include these comma separated" - "subdirectories") - args = parser.parse_args() - - try: - shutil.rmtree(args.dest_dir) - except OSError: - pass - except FileNotFoundError: - pass - - # Get the list of JUCE modules to include. - if args.subdirs: - juce_modules = args.subdirs.split(",") - else: - juce_modules = [] - for item in sorted(os.listdir(args.source_dir)): - if os.path.isdir(os.path.join(args.source_dir, item)): - juce_modules.append(item) - - # Copy the JUCE modules to the temporary directory, and process the source - # files. - module_definitions = [] - for module_name in juce_modules: - - # Copy the required modules. - original_module_dir = os.path.join(args.source_dir, module_name) - module_path = os.path.join(args.dest_dir, module_name) - shutil.copytree(original_module_dir, module_path) - - # Parse the module header to get module information. - module_header = os.path.join(module_path, module_name + ".h") - with open(module_header, "r") as f: - content = f.read() - block_info_result = re.match(r".*BEGIN_JUCE_MODULE_DECLARATION" - "(.*)" - "END_JUCE_MODULE_DECLARATION.*", - content, - re.DOTALL) - detail_lines = [] - for line in block_info_result.group(1).split("\n"): - stripped_line = line.strip() - if stripped_line: - result = re.match(r"^.*?description:\s*(.*)$", stripped_line) - if result: - short_description = result.group(1) - else: - detail_lines.append(stripped_line) - - # The module header causes problems for Doxygen, so delete it. - os.remove(module_header) - - # Create a Doxygen group definition for the module. - module_definiton = [] - module_definiton.append("/** @defgroup {n} {n}".format(n=module_name)) - module_definiton.append(" {d}".format(d=short_description)) - module_definiton.append("") - for line in detail_lines: - module_definiton.append(" - {l}".format(l=line)) - module_definiton.append("") - module_definiton.append(" @{") - module_definiton.append("*/") - - # Create a list of the directories in the module that we can use as - # subgroups and create the Doxygen group hierarchy string. - dir_contents = sorted(os.listdir(module_path)) - # Ignore "native" folders as these are excluded by doxygen. - try: - dir_contents.remove("native") - except ValueError: - pass - subdirs = [] - for item in dir_contents: - if (os.path.isdir(os.path.join(module_path, item))): - subdirs.append(item) - module_groups = {} - for subdir in subdirs: - subgroup_name = "{n}-{s}".format(n=module_name, s=subdir) - module_groups[subgroup_name] = os.path.join(module_path, subdir) - module_definiton.append("") - module_definiton.append( - "/** @defgroup {tag} {n} */".format(tag=subgroup_name, n=subdir) - ) - module_definiton.append("") - module_definiton.append("/** @} */") - - module_definitions.append("\r\n".join(module_definiton)) - - # Put the top level files into the main group. - for filename in (set(dir_contents) - set(subdirs)): - add_doxygen_group(os.path.join(module_path, filename), module_name) - - # Put subdirectory files into their respective groups. - for group_name in module_groups: - for dirpath, dirnames, filenames in os.walk(module_groups[group_name]): - for filename in filenames: - filepath = os.path.join(dirpath, filename) - add_doxygen_group(filepath, group_name) - - # Create an extra header file containing the module hierarchy. - with open(os.path.join(args.dest_dir, "juce_modules.dox"), "w") as f: - f.write("\r\n\r\n".join(module_definitions)) - - # Copy markdown docs - for name in ["JUCE Module Format.md", "CMake API.md"]: - shutil.copyfile(os.path.join(args.source_dir, "..", "docs", name), - os.path.join(args.dest_dir, name))