Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("ERROR: CSS Compilation on file 'custom.scss' failed on error: `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2").
Previous exceptions
  • ERROR: CSS Compilation on file 'custom.scss' failed on error: `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2 (500)
  • `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2 (0)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("ERROR: CSS Compilation on file 'custom.scss' failed on error: `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2")." Stacktrace: #46 Twig\Error\RuntimeError in /var/www/web420/html/cp-homepage18/media/gantry5/engines/nucleus/templates/page.html.twig:77 #45 RuntimeException in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Stylesheet/ScssCompiler.php:192 #44 ScssPhp\ScssPhp\Exception\CompilerException in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:6102 #43 ScssPhp\ScssPhp\Compiler:error in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:5868 #42 ScssPhp\ScssPhp\Compiler:findImport in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Stylesheet/Scss/Compiler.php:37 #41 Gantry\Component\Stylesheet\Scss\Compiler:findImport in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2699 #40 ScssPhp\ScssPhp\Compiler:compileImport in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2915 #39 ScssPhp\ScssPhp\Compiler:compileChild in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2378 #38 ScssPhp\ScssPhp\Compiler:compileChildrenNoReturn in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:5747 #37 ScssPhp\ScssPhp\Compiler:importFile in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2703 #36 ScssPhp\ScssPhp\Compiler:compileImport in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2915 #35 ScssPhp\ScssPhp\Compiler:compileChild in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:2378 #34 ScssPhp\ScssPhp\Compiler:compileChildrenNoReturn in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:744 #33 ScssPhp\ScssPhp\Compiler:compileRoot in /var/www/web420/html/cp-homepage18/libraries/gantry5/compat/vendor/scssphp/scssphp/src/Compiler.php:522 #32 ScssPhp\ScssPhp\Compiler:compileString in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Stylesheet/ScssCompiler.php:181 #31 Gantry\Component\Stylesheet\ScssCompiler:compileFile in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:271 #30 Gantry\Framework\Theme:css in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Content/Block/HtmlBlock.php:86 #29 Gantry\Component\Content\Block\HtmlBlock:getStyles in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Framework/Document.php:131 #28 Gantry\Framework\Document:registerStyles in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Framework/Document.php:76 #27 Gantry\Framework\Document:registerAssets in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Framework/Base/Platform.php:277 #26 Gantry\Framework\Base\Platform:finalize in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:702 #25 Twig\Template:getAttribute in /var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7a/7a6df49bd7d94cfdf8e3011ed6f68bc458bf6cd2af5615c4b173883d6e8e006d.php:274 #24 __TwigTemplate_014bef5c541ad6c7391a2a9d21abafc8fe84b7eff2709fc791a2b1b57c192e68:block_page_footer in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:216 #23 Twig\Template:displayBlock in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:177 #22 Twig\Template:displayParentBlock in /var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7b/7b81fc6c23c0d96ff2ce3698f7fb60398f52a8de93dcc0c79b1953e4fc8fe2f8.php:43 #21 __TwigTemplate_5c2d91d6ef7ed192989b4f3d5d71460ea7f6fbcd2bcf450a4840ce09d42cca51:block_page_footer in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:216 #20 Twig\Template:displayBlock in /var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7a/7a6df49bd7d94cfdf8e3011ed6f68bc458bf6cd2af5615c4b173883d6e8e006d.php:152 #19 __TwigTemplate_014bef5c541ad6c7391a2a9d21abafc8fe84b7eff2709fc791a2b1b57c192e68:doDisplay in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #18 Twig\Template:displayWithErrorHandling in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #17 Twig\Template:display in /var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7b/7b81fc6c23c0d96ff2ce3698f7fb60398f52a8de93dcc0c79b1953e4fc8fe2f8.php:35 #16 __TwigTemplate_5c2d91d6ef7ed192989b4f3d5d71460ea7f6fbcd2bcf450a4840ce09d42cca51:doDisplay in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #15 Twig\Template:displayWithErrorHandling in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #14 Twig\Template:display in /var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/68/68813a3ac17c50ea0b2a4ecdf317d46e7999a43c1a2ae19e56317ada2d4739aa.php:35 #13 __TwigTemplate_b3a4c335ec0764c05a82834b8e210b612ab7e445f90b500be6d8a48d319be6ba:doDisplay in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #12 Twig\Template:displayWithErrorHandling in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #11 Twig\Template:display in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Template.php:434 #10 Twig\Template:render in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/TemplateWrapper.php:47 #9 Twig\TemplateWrapper:render in /var/www/web420/html/cp-homepage18/libraries/gantry5/vendor/twig/twig/src/Environment.php:384 #8 Twig\Environment:render in /var/www/web420/html/cp-homepage18/libraries/gantry5/src/classes/Gantry/Component/Theme/AbstractTheme.php:176 #7 Gantry\Component\Theme\AbstractTheme:render in /var/www/web420/html/cp-homepage18/templates/g5_hydrogen/offline.php:47 #6 require in /var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php:678 #5 Joomla\CMS\Document\HtmlDocument:_loadTemplate in /var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php:740 #4 Joomla\CMS\Document\HtmlDocument:_fetchTemplate in /var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php:555 #3 Joomla\CMS\Document\HtmlDocument:parse in /var/www/web420/html/cp-homepage18/libraries/src/Application/CMSApplication.php:1098 #2 Joomla\CMS\Application\CMSApplication:render in /var/www/web420/html/cp-homepage18/libraries/src/Application/SiteApplication.php:778 #1 Joomla\CMS\Application\SiteApplication:render in /var/www/web420/html/cp-homepage18/libraries/src/Application/CMSApplication.php:231 #0 Joomla\CMS\Application\CMSApplication:execute in /var/www/web420/html/cp-homepage18/index.php:49
Stack frames (47)
46
Twig\Error\RuntimeError
/var/www/web420/html/cp-homepage18/media/gantry5/engines/nucleus/templates/page.html.twig77
45
RuntimeException
/src/classes/Gantry/Component/Stylesheet/ScssCompiler.php192
44
ScssPhp\ScssPhp\Exception\CompilerException
/compat/vendor/scssphp/scssphp/src/Compiler.php6102
43
ScssPhp\ScssPhp\Compiler error
/compat/vendor/scssphp/scssphp/src/Compiler.php5868
42
ScssPhp\ScssPhp\Compiler findImport
/src/classes/Gantry/Component/Stylesheet/Scss/Compiler.php37
41
Gantry\Component\Stylesheet\Scss\Compiler findImport
/compat/vendor/scssphp/scssphp/src/Compiler.php2699
40
ScssPhp\ScssPhp\Compiler compileImport
/compat/vendor/scssphp/scssphp/src/Compiler.php2915
39
ScssPhp\ScssPhp\Compiler compileChild
/compat/vendor/scssphp/scssphp/src/Compiler.php2378
38
ScssPhp\ScssPhp\Compiler compileChildrenNoReturn
/compat/vendor/scssphp/scssphp/src/Compiler.php5747
37
ScssPhp\ScssPhp\Compiler importFile
/compat/vendor/scssphp/scssphp/src/Compiler.php2703
36
ScssPhp\ScssPhp\Compiler compileImport
/compat/vendor/scssphp/scssphp/src/Compiler.php2915
35
ScssPhp\ScssPhp\Compiler compileChild
/compat/vendor/scssphp/scssphp/src/Compiler.php2378
34
ScssPhp\ScssPhp\Compiler compileChildrenNoReturn
/compat/vendor/scssphp/scssphp/src/Compiler.php744
33
ScssPhp\ScssPhp\Compiler compileRoot
/compat/vendor/scssphp/scssphp/src/Compiler.php522
32
ScssPhp\ScssPhp\Compiler compileString
/src/classes/Gantry/Component/Stylesheet/ScssCompiler.php181
31
Gantry\Component\Stylesheet\ScssCompiler compileFile
/src/classes/Gantry/Component/Theme/ThemeTrait.php271
30
Gantry\Framework\Theme css
/src/classes/Gantry/Component/Content/Block/HtmlBlock.php86
29
Gantry\Component\Content\Block\HtmlBlock getStyles
/src/classes/Gantry/Framework/Document.php131
28
Gantry\Framework\Document registerStyles
/src/classes/Gantry/Framework/Document.php76
27
Gantry\Framework\Document registerAssets
/src/classes/Gantry/Framework/Base/Platform.php277
26
Gantry\Framework\Base\Platform finalize
/vendor/twig/twig/src/Template.php702
25
Twig\Template getAttribute
/var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7a/7a6df49bd7d94cfdf8e3011ed6f68bc458bf6cd2af5615c4b173883d6e8e006d.php274
24
__TwigTemplate_014bef5c541ad6c7391a2a9d21abafc8fe84b7eff2709fc791a2b1b57c192e68 block_page_footer
/vendor/twig/twig/src/Template.php216
23
Twig\Template displayBlock
/vendor/twig/twig/src/Template.php177
22
Twig\Template displayParentBlock
/var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7b/7b81fc6c23c0d96ff2ce3698f7fb60398f52a8de93dcc0c79b1953e4fc8fe2f8.php43
21
__TwigTemplate_5c2d91d6ef7ed192989b4f3d5d71460ea7f6fbcd2bcf450a4840ce09d42cca51 block_page_footer
/vendor/twig/twig/src/Template.php216
20
Twig\Template displayBlock
/var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7a/7a6df49bd7d94cfdf8e3011ed6f68bc458bf6cd2af5615c4b173883d6e8e006d.php152
19
__TwigTemplate_014bef5c541ad6c7391a2a9d21abafc8fe84b7eff2709fc791a2b1b57c192e68 doDisplay
/vendor/twig/twig/src/Template.php455
18
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
17
Twig\Template display
/var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/7b/7b81fc6c23c0d96ff2ce3698f7fb60398f52a8de93dcc0c79b1953e4fc8fe2f8.php35
16
__TwigTemplate_5c2d91d6ef7ed192989b4f3d5d71460ea7f6fbcd2bcf450a4840ce09d42cca51 doDisplay
/vendor/twig/twig/src/Template.php455
15
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
14
Twig\Template display
/var/www/web420/html/cp-homepage18/cache/gantry5/g5_hydrogen/twig/68/68813a3ac17c50ea0b2a4ecdf317d46e7999a43c1a2ae19e56317ada2d4739aa.php35
13
__TwigTemplate_b3a4c335ec0764c05a82834b8e210b612ab7e445f90b500be6d8a48d319be6ba doDisplay
/vendor/twig/twig/src/Template.php455
12
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
11
Twig\Template display
/vendor/twig/twig/src/Template.php434
10
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php47
9
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php384
8
Twig\Environment render
/src/classes/Gantry/Component/Theme/AbstractTheme.php176
7
Gantry\Component\Theme\AbstractTheme render
/var/www/web420/html/cp-homepage18/templates/g5_hydrogen/offline.php47
6
require
/var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php678
5
Joomla\CMS\Document\HtmlDocument _loadTemplate
/var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php740
4
Joomla\CMS\Document\HtmlDocument _fetchTemplate
/var/www/web420/html/cp-homepage18/libraries/src/Document/HtmlDocument.php555
3
Joomla\CMS\Document\HtmlDocument parse
/var/www/web420/html/cp-homepage18/libraries/src/Application/CMSApplication.php1098
2
Joomla\CMS\Application\CMSApplication render
/var/www/web420/html/cp-homepage18/libraries/src/Application/SiteApplication.php778
1
Joomla\CMS\Application\SiteApplication render
/var/www/web420/html/cp-homepage18/libraries/src/Application/CMSApplication.php231
0
Joomla\CMS\Application\CMSApplication execute
/var/www/web420/html/cp-homepage18/index.php49
 
{%- set body_bottom %}
    {% block body_bottom %}
    {% endblock %}
    {{ gantry.document.getHtml('body_bottom')|join("\n    ")|raw }}
{% endset -%}
 
{%- do gantry.document.addScript(url('gantry-assets://js/main.js'), 11, 'footer') -%}
 
{# Head and footer needs to come last because of any of the above blocks may have CSS or JavaScript in them #}
 
{%- set page_head %}
    {% block page_head -%}
        {% include 'partials/page_head.html.twig' %}
    {%- endblock %}
{% endset -%}
 
{%- set page_footer %}
    {% block page_footer %}
        {% do gantry.platform.finalize() -%}
        {{ gantry.scripts('footer')|join("\n    ")|raw -}}
    {% endblock %}
 
    {{ gantry.debugger.render()|raw }}
{% endset -%}
 
{%- block page -%}
<!DOCTYPE {{ gantry.config.page.doctype|default('html')|raw }}>
<html{{ gantry.page.htmlAttributes|raw }}>
    {{ page_head|raw }}
    {% block page_body -%}
    <body{{ gantry.page.bodyAttributes({'class': [offcanvas_position, gantry.page.preset, 'g-style-' ~ gantry.theme.preset]})|raw }}>
        {{ gantry.config.page.body.body_top|raw }}
        {{ body_top|raw }}
        {{ page_offcanvas|raw }}
        <div id="g-page-surround">
            {% if page_offcanvas|trim -%}
            <div class="g-offcanvas-hide g-offcanvas-toggle" role="navigation" data-offcanvas-toggle aria-controls="g-offcanvas" aria-expanded="false"><i class="fa fa-fw fa-bars"></i></div>
            {%- endif %}
            {{ page_top|raw }}
        // Set the lookup paths.
        $this->functions->setBasePath($path);
        $compiler->setImportPaths([[$this, 'findImport']]);
 
        // Run the compiler.
        $compiler->addVariables($this->getVariables(true));
        $scss = '$output-bourbon-deprecation-warnings: false;' . "\n" . '@import "' . $in . '.scss"';
        try {
            $this->result = $compiler->compileString($scss);
            $css = $this->result->getCss();
        } catch (CompilerException $e) {
            if (version_compare(static::$options['compatibility'], '5.5', '<')) {
                static::$options['legacy'][$in] = true;
                $this->warnings['__TITLE__'] = 'Please update your theme!';
                $this->warnings[$in] = ['WARNING: ' . $e->getMessage()];
 
                return $this->compileLegacyFile($in);
            }
 
            throw new \RuntimeException("ERROR: CSS Compilation on file '{$in}.scss' failed on error: {$e->getMessage()}", 500, $e);
        } catch (\Exception $e) {
            throw new \RuntimeException("ERROR: CSS Compilation on file '{$in}.scss' failed on fatal error: {$e->getMessage()}", 500, $e);
        }
        if (strpos($css, $scss) === 0) {
            $css = '/* ' . $scss . ' */';
        }
 
        // Extract map from css and save it as separate file.
        $pos = strrpos($css, '/*# sourceMappingURL=');
        if ($pos !== false) {
            $map = json_decode(urldecode(substr($css, $pos + 43, -3)), true);
 
            /** @var Document $document */
            $document = $gantry['document'];
 
            foreach ($map['sources'] as &$source) {
                $source = $document::url($source, false, -1);
            }
            unset($source);
 
Exception message: ERROR: CSS Compilation on file 'custom.scss' failed on error: `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2
     * Build an error (exception)
     *
     * @internal
     *
     * @param string                     $msg Message with optional sprintf()-style vararg parameters
     * @param bool|float|int|string|null ...$args
     *
     * @return CompilerException
     */
    public function error($msg, ...$args)
    {
        if ($args) {
            $msg = sprintf($msg, ...$args);
        }
 
        if (! $this->ignoreCallStackMessage) {
            $msg = $this->addLocationToMessage($msg);
        }
 
        return new CompilerException($msg);
    }
 
    /**
     * @param string $msg
     *
     * @return string
     */
    private function addLocationToMessage($msg)
    {
        $line   = $this->sourceLine;
        $column = $this->sourceColumn;
 
        $loc = isset($this->sourceNames[$this->sourceIndex])
            ? $this->getPrettyPath($this->sourceNames[$this->sourceIndex]) . " on line $line, at column $column"
            : "line: $line, column: $column";
 
        $msg = "$msg: $loc";
 
        $callStackMsg = $this->callStackMessage();
 
Exception message: `jlparticles` file not found for @import: templates/g5_hydrogen/custom/scss/custom.scss on line 2, at column 5 Call Stack: #0 import templates/g5_hydrogen/custom/scss/custom.scss (unknown file) on line 2
                // check custom callback for import path
                $file = \call_user_func($dir, $url);
 
                if (! \is_null($file)) {
                    return $file;
                }
            }
        }
 
        if ($this->legacyCwdImportPath) {
            $path = $this->resolveImportPath($url, getcwd());
 
            if (!\is_null($path)) {
                @trigger_error('Resolving imports relatively to the current working directory is deprecated. If that\'s the intended behavior, the value of "getcwd()" should be added as an import path explicitly instead. If this was used for resolving relative imports of the input alongside "chdir" with the source directory, the path of the input file should be passed to "compileString()" instead.', E_USER_DEPRECATED);
 
                return $path;
            }
        }
 
        throw $this->error("`$url` file not found for @import");
    }
 
    /**
     * @param string $url
     * @param string $baseDir
     *
     * @return string|null
     */
    private function resolveImportPath($url, $baseDir)
    {
        $path = Path::join($baseDir, $url);
 
        $hasExtension = preg_match('/.s[ac]ss$/', $url);
 
        if ($hasExtension) {
            return $this->checkImportPathConflicts($this->tryImportPath($path));
        }
 
        $result = $this->checkImportPathConflicts($this->tryImportPathWithExtensions($path));
 
 * Class Compiler
 * @package Gantry\Component\Stylesheet\Scss
 */
class Compiler extends \ScssPhp\ScssPhp\Compiler
{
    static public $currentDir;
 
    /**
     * Return the file path for an import url if it exists
     *
     * @param string      $url
     * @param string|null $currentDir
     *
     * @return string|null
     */
    public function findImport($url, $currentDir = null)
    {
        static::$currentDir = $currentDir;
 
        return parent::findImport($url, null);
    }
}
 
 
        // t1 == t2, neither m1 nor m2 are "not"
        return [empty($m1) ? $m2 : $m1, $t1];
    }
 
    /**
     * Compile import; returns true if the value was something that could be imported
     *
     * @param array                                  $rawPath
     * @param \ScssPhp\ScssPhp\Formatter\OutputBlock $out
     * @param bool                                   $once
     *
     * @return bool
     */
    protected function compileImport($rawPath, OutputBlock $out, $once = false)
    {
        if ($rawPath[0] === Type::T_STRING) {
            $path = $this->compileStringContent($rawPath);
 
            if (strpos($path, 'url(') !== 0 && $filePath = $this->findImport($path, $this->currentDirectory)) {
                $this->registerImport($this->currentDirectory, $path, $filePath);
 
                if (! $once || ! \in_array($filePath, $this->importedFiles)) {
                    $this->importFile($filePath, $out);
                    $this->importedFiles[] = $filePath;
                }
 
                return true;
            }
 
            $this->appendRootDirective('@import ' . $this->compileImportPath($rawPath) . ';', $out);
 
            return false;
        }
 
        if ($rawPath[0] === Type::T_LIST) {
            // handle a list of strings
            if (\count($rawPath[2]) === 0) {
                return false;
            }
            $sourceIndex  = array_search($out->sourceName, $this->sourceNames);
            $this->sourceColumn = $out->sourceColumn;
 
            if ($sourceIndex === false) {
                $sourceIndex = null;
            }
            $this->sourceIndex = $sourceIndex;
        }
 
        switch ($child[0]) {
            case Type::T_SCSSPHP_IMPORT_ONCE:
                $rawPath = $this->reduce($child[1]);
 
                $this->compileImport($rawPath, $out, true);
                break;
 
            case Type::T_IMPORT:
                $rawPath = $this->reduce($child[1]);
 
                $this->compileImport($rawPath, $out);
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1], $out);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
            case Type::T_CHARSET:
                break;
     *
     * @return void
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && \is_object($stm[1]) && $stm[1] instanceof Block) {
                $oldSelfParent = $stm[1]->selfParent;
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = $oldSelfParent;
            } elseif ($selfParent && \in_array($stm[0], [Type::T_INCLUDE, Type::T_EXTEND])) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                throw $this->error('@return may only be used within a function');
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure unchanged
     *
     * @param array $queryList
     *
     * @return array
     */
    protected function evaluateMediaQuery($queryList)
    {
 
            throw $this->error('The Sass indented syntax is not implemented.');
        }
 
        if (isset($this->importCache[$realPath])) {
            $this->handleImportLoop($realPath);
 
            $tree = $this->importCache[$realPath];
        } else {
            $code   = file_get_contents($path);
            $parser = $this->parserFactory($path);
            $tree   = $parser->parse($code);
 
            $this->importCache[$realPath] = $tree;
        }
 
        $currentDirectory = $this->currentDirectory;
        $this->currentDirectory = dirname($path);
 
        $this->compileChildrenNoReturn($tree->children, $out);
        $this->currentDirectory = $currentDirectory;
        $this->popCallStack();
    }
 
    /**
     * Save the imported files with their resolving path context
     *
     * @param string|null $currentDirectory
     * @param string      $path
     * @param string      $filePath
     *
     * @return void
     */
    private function registerImport($currentDirectory, $path, $filePath)
    {
        $this->resolvedImports[] = ['currentDir' => $currentDirectory, 'path' => $path, 'filePath' => $filePath];
    }
 
    /**
     * Detects whether the import is a CSS import.
 
    /**
     * Compile import; returns true if the value was something that could be imported
     *
     * @param array                                  $rawPath
     * @param \ScssPhp\ScssPhp\Formatter\OutputBlock $out
     * @param bool                                   $once
     *
     * @return bool
     */
    protected function compileImport($rawPath, OutputBlock $out, $once = false)
    {
        if ($rawPath[0] === Type::T_STRING) {
            $path = $this->compileStringContent($rawPath);
 
            if (strpos($path, 'url(') !== 0 && $filePath = $this->findImport($path, $this->currentDirectory)) {
                $this->registerImport($this->currentDirectory, $path, $filePath);
 
                if (! $once || ! \in_array($filePath, $this->importedFiles)) {
                    $this->importFile($filePath, $out);
                    $this->importedFiles[] = $filePath;
                }
 
                return true;
            }
 
            $this->appendRootDirective('@import ' . $this->compileImportPath($rawPath) . ';', $out);
 
            return false;
        }
 
        if ($rawPath[0] === Type::T_LIST) {
            // handle a list of strings
            if (\count($rawPath[2]) === 0) {
                return false;
            }
 
            foreach ($rawPath[2] as $path) {
                if ($path[0] !== Type::T_STRING) {
                    $this->appendRootDirective('@import ' . $this->compileImportPath($rawPath) . ';', $out);
            $sourceIndex  = array_search($out->sourceName, $this->sourceNames);
            $this->sourceColumn = $out->sourceColumn;
 
            if ($sourceIndex === false) {
                $sourceIndex = null;
            }
            $this->sourceIndex = $sourceIndex;
        }
 
        switch ($child[0]) {
            case Type::T_SCSSPHP_IMPORT_ONCE:
                $rawPath = $this->reduce($child[1]);
 
                $this->compileImport($rawPath, $out, true);
                break;
 
            case Type::T_IMPORT:
                $rawPath = $this->reduce($child[1]);
 
                $this->compileImport($rawPath, $out);
                break;
 
            case Type::T_DIRECTIVE:
                $this->compileDirective($child[1], $out);
                break;
 
            case Type::T_AT_ROOT:
                $this->compileAtRoot($child[1]);
                break;
 
            case Type::T_MEDIA:
                $this->compileMedia($child[1]);
                break;
 
            case Type::T_BLOCK:
                $this->compileBlock($child[1]);
                break;
 
            case Type::T_CHARSET:
                break;
     *
     * @return void
     *
     * @throws \Exception
     */
    protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '')
    {
        $this->pushCallStack($traceName);
 
        foreach ($stms as $stm) {
            if ($selfParent && isset($stm[1]) && \is_object($stm[1]) && $stm[1] instanceof Block) {
                $oldSelfParent = $stm[1]->selfParent;
                $stm[1]->selfParent = $selfParent;
                $ret = $this->compileChild($stm, $out);
                $stm[1]->selfParent = $oldSelfParent;
            } elseif ($selfParent && \in_array($stm[0], [Type::T_INCLUDE, Type::T_EXTEND])) {
                $stm['selfParent'] = $selfParent;
                $ret = $this->compileChild($stm, $out);
            } else {
                $ret = $this->compileChild($stm, $out);
            }
 
            if (isset($ret)) {
                throw $this->error('@return may only be used within a function');
            }
        }
 
        $this->popCallStack();
    }
 
 
    /**
     * evaluate media query : compile internal value keeping the structure unchanged
     *
     * @param array $queryList
     *
     * @return array
     */
    protected function evaluateMediaQuery($queryList)
    {
            $out->sourceName = isset($this->sourceNames[$this->sourceIndex]) ? $this->sourceNames[$this->sourceIndex] : '(stdin)';
            $out->sourceLine = $this->sourceLine;
            $out->sourceColumn = $this->sourceColumn;
        }
 
        return $out;
    }
 
    /**
     * Compile root
     *
     * @param \ScssPhp\ScssPhp\Block $rootBlock
     *
     * @return void
     */
    protected function compileRoot(Block $rootBlock)
    {
        $this->rootBlock = $this->scope = $this->makeOutputBlock(Type::T_ROOT);
 
        $this->compileChildrenNoReturn($rootBlock->children, $this->scope);
        assert($this->scope !== null);
        $this->flattenSelectors($this->scope);
        $this->missingSelectors();
    }
 
    /**
     * Report missing selectors
     *
     * @return void
     */
    protected function missingSelectors()
    {
        foreach ($this->extends as $extend) {
            if (isset($extend[3])) {
                continue;
            }
 
            list($target, $origin, $block) = $extend;
 
            // ignore if !optional
            $this->rootDirectory = getcwd();
        }
 
        try {
            $this->parser = $this->parserFactory($path);
            $tree         = $this->parser->parse($source);
            $this->parser = null;
 
            $this->formatter = new $this->configuredFormatter();
            $this->rootBlock = null;
            $this->rootEnv   = $this->pushEnv($tree);
 
            $warnCallback = function ($message, $deprecation) {
                $this->logger->warn($message, $deprecation);
            };
            $previousWarnCallback = Warn::setCallback($warnCallback);
 
            try {
                $this->injectVariables($this->registeredVars);
                $this->compileRoot($tree);
                $this->popEnv();
            } finally {
                Warn::setCallback($previousWarnCallback);
            }
 
            $sourceMapGenerator = null;
 
            if ($this->sourceMap) {
                if (\is_object($this->sourceMap) && $this->sourceMap instanceof SourceMapGenerator) {
                    $sourceMapGenerator = $this->sourceMap;
                    $this->sourceMap = self::SOURCE_MAP_FILE;
                } elseif ($this->sourceMap !== self::SOURCE_MAP_NONE) {
                    $sourceMapGenerator = new SourceMapGenerator($this->sourceMapOptions);
                }
            }
            assert($this->scope !== null);
 
            $out = $this->formatter->format($this->scope, $sourceMapGenerator);
 
            $prefix = '';
        if ($file->locked() === false) {
            // File was already locked by another process, lets avoid compiling the same file twice.
            return false;
        }
 
        $logfile = fopen('php://memory', 'rb+');
        $logger = new StreamLogger($logfile, true);
 
        $compiler = $this->getCompiler();
        $compiler->setLogger($logger);
 
        // Set the lookup paths.
        $this->functions->setBasePath($path);
        $compiler->setImportPaths([[$this, 'findImport']]);
 
        // Run the compiler.
        $compiler->addVariables($this->getVariables(true));
        $scss = '$output-bourbon-deprecation-warnings: false;' . "\n" . '@import "' . $in . '.scss"';
        try {
            $this->result = $compiler->compileString($scss);
            $css = $this->result->getCss();
        } catch (CompilerException $e) {
            if (version_compare(static::$options['compatibility'], '5.5', '<')) {
                static::$options['legacy'][$in] = true;
                $this->warnings['__TITLE__'] = 'Please update your theme!';
                $this->warnings[$in] = ['WARNING: ' . $e->getMessage()];
 
                return $this->compileLegacyFile($in);
            }
 
            throw new \RuntimeException("ERROR: CSS Compilation on file '{$in}.scss' failed on error: {$e->getMessage()}", 500, $e);
        } catch (\Exception $e) {
            throw new \RuntimeException("ERROR: CSS Compilation on file '{$in}.scss' failed on fatal error: {$e->getMessage()}", 500, $e);
        }
        if (strpos($css, $scss) === 0) {
            $css = '/* ' . $scss . ' */';
        }
 
        // Extract map from css and save it as separate file.
        $pos = strrpos($css, '/*# sourceMappingURL=');
    /**
     * Returns URL to CSS file.
     *
     * If file does not exist, it will be created by using CSS compiler.
     *
     * @param string $name
     * @return string
     */
    public function css($name)
    {
        if (!isset($this->cssCache[$name])) {
            $compiler = $this->compiler();
 
            if ($compiler->needsCompile($name, [$this, 'getCssVariables'])) {
                if (\GANTRY_DEBUGGER) {
                    Debugger::startTimer("css-{$name}", "Compiling CSS: {$name}");
                    Debugger::addMessage("Compiling CSS: {$name}");
                }
 
                $compiler->compileFile($name);
 
                if (\GANTRY_DEBUGGER) {
                    Debugger::stopTimer("css-{$name}");
                }
            }
 
            $this->cssCache[$name] = $compiler->getCssUrl($name);
        }
 
        return $this->cssCache[$name];
    }
 
    /**
     * @return array
     */
    public function getCssVariables()
    {
        if ($this->preset) {
            $variables = $this->presets()->flatten($this->preset . '.styles', '-');
        } else {
        $styles = $this->getAssetsInLocation('styles', $location);
 
        if (!$styles) {
            return [];
        }
 
        $gantry = Gantry::instance();
 
        /** @var Theme|null $theme */
        $theme = isset($gantry['theme']) ? $gantry['theme'] : null;
 
        /** @var Document $document */
        $document = $gantry['document'];
 
        foreach ($styles as $key => $style) {
            if (isset($style['href'])) {
                $url = $style['href'];
                if ($theme && preg_match('|\.scss$|', $url)) {
                    // Compile SCSS files.
                    $url = $theme->css(Gantry::basename($url, '.scss'));
                }
                // Deal with streams and relative paths.
                $url = $document::url($url, null, null, false);
 
                $styles[$key]['href'] = $url;
            }
        }
 
        return $styles;
    }
 
    /**
     * @param string $location
     * @return array
     * @since 5.4.3
     */
    public function getScripts($location = 'head')
    {
        $scripts = $this->getAssetsInLocation('scripts', $location);
 
        static $error = false;
 
        if (isset($new)) {
            $error = (bool) $new;
        }
 
        return $error;
    }
 
    protected static function registerStyles()
    {
        if (static::errorPage()) {
            return;
        }
 
        /** @var CMSApplication $application */
        $application = Factory::getApplication();
        $doc = $application->getDocument();
 
        $styles = static::$stack[0]->getStyles();
 
        foreach ($styles as $style) {
            switch ($style[':type']) {
                case 'file':
                    $attribs = array_replace(['type' => $style['type'], 'media' => $style['media']], $style['element']);
                    $attribs = array_filter($attribs, static function($arg) { return null !== $arg; });
                    $doc->addStyleSheet($style['href'], [], $attribs);
                    break;
                case 'inline':
                    $doc->addStyleDeclaration($style['content'], $style['type']);
                    break;
            }
        }
    }
 
    protected static function registerScripts()
    {
        if (static::errorPage()) {
            return;
        }
        if (
            $framework === 'bootstrap'
            || ($framework === 'bootstrap.2' && JVersion::MAJOR_VERSION === 3)
            || ($framework === 'bootstrap.5' && JVersion::MAJOR_VERSION >= 4)
        ) {
            /** @var Theme $theme */
            $theme = Gantry::instance()['theme'];
            $theme->joomla = true;
        }
 
        return true;
    }
 
    /**
     *
     */
    public static function registerAssets()
    {
        static::registerFrameworks();
        static::registerStyles();
        static::registerScripts();
    }
 
    /**
     * NOTE: In PHP this function can be called either from Gantry DI container or statically.
     *
     * @param bool|null $addDomain
     * @return string
     */
    public static function domain($addDomain = null)
    {
        if (!$addDomain) {
            return '';
        }
 
        $absolute = Uri::root(false);
        $relative = Uri::root(true);
 
        return substr($absolute, 0, -strlen($relative));
    }
    {
        return null;
    }
 
    /**
     * @param string $text
     * @return string
     */
    public function filter($text)
    {
        return $text;
    }
 
    public function finalize()
    {
        $gantry = Gantry::instance();
        /** @var Document $document */
        $document = $gantry['document'];
 
        $document::registerAssets();
    }
 
    /**
     * @return mixed|null
     */
    public function call()
    {
        $args = func_get_args();
        $callable = array_shift($args);
        return is_callable($callable) ? call_user_func_array($callable, $args) : null;
    }
 
    /**
     * @param string $action
     * @param int|string|null $id
     * @return bool
     */
    public function authorize($action, $id = null)
    {
        return true;
            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
                return;
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
    // line 60
    public function block_body_bottom($context, array $blocks = [])
    {
        // line 61
        echo "    ";
    }
 
    // line 70
    public function block_page_head($context, array $blocks = [])
    {
        // line 71
        $this->loadTemplate("partials/page_head.html.twig", "@nucleus/page.html.twig", 71)->display($context);
    }
 
    // line 76
    public function block_page_footer($context, array $blocks = [])
    {
        // line 77
        echo "        ";
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "platform", []), "finalize", [], "method");
        // line 78
        echo twig_join_filter($this->getAttribute(($context["gantry"] ?? null), "scripts", [0 => "footer"], "method"), "
    ");
    }
 
    // line 84
    public function block_page($context, array $blocks = [])
    {
        // line 85
        echo "<!DOCTYPE ";
        echo (($this->getAttribute($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "config", [], "any", false, true), "page", [], "any", false, true), "doctype", [], "any", true, true)) ? (_twig_default_filter($this->getAttribute($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "config", [], "any", false, true), "page", [], "any", false, true), "doctype", []), "html")) : ("html"));
        echo ">
<html";
        // line 86
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "page", []), "htmlAttributes", []);
        echo ">
    ";
        // line 87
        echo ($context["page_head"] ?? null);
        echo "
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
    }
 
    /**
     * Displays a parent block.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name    The block name to display from the parent
     * @param array  $context The context
     * @param array  $blocks  The current set of blocks
     */
    public function displayParentBlock($name, array $context, array $blocks = [])
    {
        $name = (string) $name;
 
        if (isset($this->traits[$name])) {
            $this->traits[$name][0]->displayBlock($name, $context, $blocks, false);
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, $blocks, false);
        } else {
            throw new RuntimeError(sprintf('The template has no parent and no traits defining the "%s" block.', $name), -1, $this->getSourceContext());
        }
    }
 
    /**
     * Displays a block.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @param string $name      The block name to display
     * @param array  $context   The context
     * @param array  $blocks    The current set of blocks
     * @param bool   $useBlocks Whether to use the current set of blocks
     */
    public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true)
    {
        $name = (string) $name;
 
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
    }
 
    public function getDebugInfo()
    {
        return array (  42 => 4,  39 => 3,  29 => 1,);
    }
 
 
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
        // line 62
        echo "    ";
        echo twig_join_filter($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "document", []), "getHtml", [0 => "body_bottom"], "method"), "
    ");
        echo "
";
        $context["body_bottom"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 65
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "document", []), "addScript", [0 => $this->env->getExtension('Gantry\Component\Twig\TwigExtension')->urlFunc("gantry-assets://js/main.js"), 1 => 11, 2 => "footer"], "method");
        // line 69
        ob_start(function () { return ''; });
        // line 70
        echo "    ";
        $this->displayBlock('page_head', $context, $blocks);
        $context["page_head"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 75
        ob_start(function () { return ''; });
        // line 76
        echo "    ";
        $this->displayBlock('page_footer', $context, $blocks);
        // line 80
        echo "
    ";
        // line 81
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "debugger", []), "render", [], "method");
        echo "
";
        $context["page_footer"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 84
        $this->displayBlock('page', $context, $blocks);
    }
 
    // line 8
    public function block_content($context, array $blocks = [])
    {
        // line 9
        echo "        ";
    }
 
    // line 21
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'page_footer' => [$this, 'block_page_footer'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'content' => [$this, 'block_content'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "partials/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("partials/page.html.twig", "offline.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_content($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        echo ($context["message"] ?? null);
        echo "
";
    }
 
    public function getTemplateName()
    {
        return "offline.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
 
            $this->renderer = $this->extendTwig($twig, $loader);
        }
 
        return $this->renderer;
    }
 
    /**
     * Render a template file by using given context.
     *
     * @param string $file
     * @param array $context
     * @return string
     */
    public function render($file, array $context = [])
    {
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $this->renderer()->render($file, $context);
    }
 
    /**
     * Compile and render twig string.
     *
     * @param string $string
     * @param array $context
     * @return string
     */
    public function compile($string, array $context = [])
    {
        $renderer = $this->renderer();
        $template = $renderer->createTemplate($string);
 
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $template->render($context);
    }
 
/** @var Theme $theme */
$theme = $gantry['theme'];
 
ob_start();
include JPATH_THEMES . '/system/offline.php';
$html = ob_get_clean();
$start = strpos($html, '<body>') + 6;
$end = strpos($html, '</body>', $start);
 
$context = array(
    'message' => substr($html, $start, $end - $start)
);
 
// Reset used outline configuration.
unset($gantry['configuration']);
 
// Render the page.
echo $theme
    ->setLayout('_offline', true)
    ->render('offline.html.twig', $context);
 
     * @param   string  $directory  The name of the template
     * @param   string  $filename   The actual filename
     *
     * @return  string  The contents of the template
     *
     * @since   1.7.0
     */
    protected function _loadTemplate($directory, $filename)
    {
        $contents = '';
 
        // Check to see if we have a valid template file
        if (file_exists($directory . '/' . $filename))
        {
            // Store the file path
            $this->_file = $directory . '/' . $filename;
 
            // Get the file content
            ob_start();
            require $directory . '/' . $filename;
            $contents = ob_get_contents();
            ob_end_clean();
        }
 
        // Try to find a favicon by checking the template and root folder
        $icon = '/favicon.ico';
 
        foreach (array($directory, JPATH_BASE) as $dir)
        {
            if (file_exists($dir . $icon))
            {
                $path = str_replace(JPATH_BASE, '', $dir);
                $path = str_replace('\\', '/', $path);
                $this->addFavicon(Uri::base(true) . $path . $icon);
                break;
            }
        }
 
        return $contents;
    }
 
        if (!file_exists($directory . '/' . $template . '/' . $file))
        {
            $file = 'index.php';
        }
 
        // Load the language file for the template
        $lang = \JFactory::getLanguage();
 
        // 1.5 or core then 1.6
        $lang->load('tpl_' . $template, JPATH_BASE, null, false, true)
        || $lang->load('tpl_' . $template, $directory . '/' . $template, null, false, true);
 
        // Assign the variables
        $this->template = $template;
        $this->baseurl = Uri::base(true);
        $this->params = isset($params['params']) ? $params['params'] : new Registry;
 
        // Load
        $this->_template = $this->_loadTemplate($directory . '/' . $template, $file);
 
        return $this;
    }
 
    /**
     * Parse a document template
     *
     * @return  HtmlDocument  instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    protected function _parseTemplate()
    {
        $matches = array();
 
        if (preg_match_all('#<jdoc:include\ type="([^"]+)"(.*)\/>#iU', $this->_template, $matches))
        {
            $template_tags_first = array();
            $template_tags_last = array();
 
            $options['title'] = (isset($args[3])) ? $args[3] : null;
        }
 
        parent::$_buffer[$options['type']][$options['name']][$options['title']] = $content;
 
        return $this;
    }
 
    /**
     * Parses the template and populates the buffer
     *
     * @param   array  $params  Parameters for fetching the template
     *
     * @return  HtmlDocument instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    public function parse($params = array())
    {
        return $this->_fetchTemplate($params)->_parseTemplate();
    }
 
    /**
     * Outputs the template to the browser.
     *
     * @param   boolean  $caching  If true, cache the output
     * @param   array    $params   Associative array of attributes
     *
     * @return  string The rendered data
     *
     * @since   1.7.0
     */
    public function render($caching = false, $params = array())
    {
        $this->_caching = $caching;
 
        if (empty($this->_template))
        {
            $this->parse($params);
        }
     */
    protected function render()
    {
        // Setup the document options.
        $this->docOptions['template'] = $this->get('theme');
        $this->docOptions['file']     = $this->get('themeFile', 'index.php');
        $this->docOptions['params']   = $this->get('themeParams');
 
        if ($this->get('themes.base'))
        {
            $this->docOptions['directory'] = $this->get('themes.base');
        }
        // Fall back to constants.
        else
        {
            $this->docOptions['directory'] = defined('JPATH_THEMES') ? JPATH_THEMES : (defined('JPATH_BASE') ? JPATH_BASE : __DIR__) . '/themes';
        }
 
        // Parse the document.
        $this->document->parse($this->docOptions);
 
        // Trigger the onBeforeRender event.
        \JPluginHelper::importPlugin('system');
        $this->triggerEvent('onBeforeRender');
 
        $caching = false;
 
        if ($this->isClient('site') && $this->get('caching') && $this->get('caching', 2) == 2 && !\JFactory::getUser()->get('id'))
        {
            $caching = true;
        }
 
        // Render the document.
        $data = $this->document->render($caching, $this->docOptions);
 
        // Set the application output data.
        $this->setBody($data);
 
        // Trigger the onAfterRender event.
        $this->triggerEvent('onAfterRender');
                    $this->setUserState('users.login.form.data', array('return' => \JUri::getInstance()->toString()));
                    $this->set('themeFile', 'offline.php');
                    $this->setHeader('Status', '503 Service Temporarily Unavailable', 'true');
                }
 
                if (!is_dir(JPATH_THEMES . '/' . $template->template) && !$this->get('offline'))
                {
                    $this->set('themeFile', 'component.php');
                }
 
                // Ensure themeFile is set by now
                if ($this->get('themeFile') == '')
                {
                    $this->set('themeFile', $file . '.php');
                }
 
                break;
        }
 
        parent::render();
    }
 
    /**
     * Route the application.
     *
     * Routing is the process of examining the request environment to determine which
     * component should receive the request. The component optional parameters
     * are then set in the request object to be processed when the application is being
     * dispatched.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function route()
    {
        // Execute the parent method
        parent::route();
 
        $Itemid = $this->input->getInt('Itemid', null);
        // Unset invalid system variables
        foreach ($invalidInputVariables as $systemVariable)
        {
            $input->set($systemVariable, null);
        }
 
        // Abort when there are invalid variables
        if ($invalidInputVariables)
        {
            throw new \RuntimeException('Invalid input, aborting application.');
        }
 
        // Perform application routines.
        $this->doExecute();
 
        // If we have an application document object, render it.
        if ($this->document instanceof \JDocument)
        {
            // Render the application output.
            $this->render();
        }
 
        // If gzip compression is enabled in configuration and the server is compliant, compress the output.
        if ($this->get('gzip') && !ini_get('zlib.output_compression') && ini_get('output_handler') !== 'ob_gzhandler')
        {
            $this->compress();
 
            // Trigger the onAfterCompress event.
            $this->triggerEvent('onAfterCompress');
        }
 
        // Send the application response.
        $this->respond();
 
        // Trigger the onAfterRespond event.
        $this->triggerEvent('onAfterRespond');
    }
 
    /**
     * Check if the user is required to reset their password.
{
    include_once __DIR__ . '/defines.php';
}
 
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
 
require_once JPATH_BASE . '/includes/framework.php';
 
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
 
// Instantiate the application.
$app = JFactory::getApplication('site');
 
// Execute the application.
$app->execute();
 

Environment & details:

empty
empty
empty
empty
empty
Key Value
PHP_FCGI_CHILDREN 0
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHLVL 0
PHP_FCGI_MAX_REQUESTS 1000
ORIG_SCRIPT_NAME /14af156b89d84504c26e7114fa839789/php7.1-fcgi-wrapper
ORIG_PATH_TRANSLATED /var/www/web420/html/cp-homepage18/index.php
ORIG_PATH_INFO /index.php
ORIG_SCRIPT_FILENAME /var/www/php-starter/web420/php7.1-fcgi-wrapper
CONTENT_LENGTH 0
HTTP_CONNECTION close
SCRIPT_NAME /index.php
REQUEST_URI /impressum-erlaeuterung
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/1.1
GATEWAY_INTERFACE CGI/1.1
REDIRECT_URL /index.php
REMOTE_PORT 52750
SCRIPT_FILENAME /var/www/web420/html/cp-homepage18/index.php
SERVER_ADMIN [no address given]
CONTEXT_DOCUMENT_ROOT /var/www/php-starter/web420/
CONTEXT_PREFIX /14af156b89d84504c26e7114fa839789/
REQUEST_SCHEME http
DOCUMENT_ROOT /var/www/web420/html/cp-homepage18
REMOTE_ADDR 3.236.139.73
SERVER_PORT 80
SERVER_ADDR 109.237.134.28
SERVER_NAME relaunch18.cp-homepage.de
SERVER_SOFTWARE Apache
SERVER_SIGNATURE <address>Apache Server at relaunch18.cp-homepage.de Port 80</address>
HTTP_HOST relaunch18.cp-homepage.de
HTTP_USER_AGENT claudebot
HTTP_ACCEPT */*
MAGICK_THREAD_LIMIT 1
OMP_NUM_THREADS 1
UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
REDIRECT_STATUS 200
REDIRECT_HANDLER x-httpd-php7.1
REDIRECT_HTTP_AUTHORIZATION
REDIRECT_MAGICK_THREAD_LIMIT 1
REDIRECT_OMP_NUM_THREADS 1
REDIRECT_UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
REDIRECT_REDIRECT_STATUS 200
REDIRECT_REDIRECT_HTTP_AUTHORIZATION
REDIRECT_REDIRECT_MAGICK_THREAD_LIMIT 1
REDIRECT_REDIRECT_OMP_NUM_THREADS 1
REDIRECT_REDIRECT_UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1711667061.14
REQUEST_TIME 1711667061
argv Array ( )
argc 0
Key Value
PHP_FCGI_CHILDREN 0
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHLVL 0
PHP_FCGI_MAX_REQUESTS 1000
ORIG_SCRIPT_NAME /14af156b89d84504c26e7114fa839789/php7.1-fcgi-wrapper
ORIG_PATH_TRANSLATED /var/www/web420/html/cp-homepage18/index.php
ORIG_PATH_INFO /index.php
ORIG_SCRIPT_FILENAME /var/www/php-starter/web420/php7.1-fcgi-wrapper
CONTENT_LENGTH 0
HTTP_CONNECTION close
SCRIPT_NAME /index.php
REQUEST_URI /impressum-erlaeuterung
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/1.1
GATEWAY_INTERFACE CGI/1.1
REDIRECT_URL /index.php
REMOTE_PORT 52750
SCRIPT_FILENAME /var/www/web420/html/cp-homepage18/index.php
SERVER_ADMIN [no address given]
CONTEXT_DOCUMENT_ROOT /var/www/php-starter/web420/
CONTEXT_PREFIX /14af156b89d84504c26e7114fa839789/
REQUEST_SCHEME http
DOCUMENT_ROOT /var/www/web420/html/cp-homepage18
REMOTE_ADDR 3.236.139.73
SERVER_PORT 80
SERVER_ADDR 109.237.134.28
SERVER_NAME relaunch18.cp-homepage.de
SERVER_SOFTWARE Apache
SERVER_SIGNATURE <address>Apache Server at relaunch18.cp-homepage.de Port 80</address>
HTTP_HOST relaunch18.cp-homepage.de
HTTP_USER_AGENT claudebot
HTTP_ACCEPT */*
MAGICK_THREAD_LIMIT 1
OMP_NUM_THREADS 1
UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
REDIRECT_STATUS 200
REDIRECT_HANDLER x-httpd-php7.1
REDIRECT_HTTP_AUTHORIZATION
REDIRECT_MAGICK_THREAD_LIMIT 1
REDIRECT_OMP_NUM_THREADS 1
REDIRECT_UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
REDIRECT_REDIRECT_STATUS 200
REDIRECT_REDIRECT_HTTP_AUTHORIZATION
REDIRECT_REDIRECT_MAGICK_THREAD_LIMIT 1
REDIRECT_REDIRECT_OMP_NUM_THREADS 1
REDIRECT_REDIRECT_UNIQUE_ID ZgX3dX8AAQEADwpmWJ4AAACu
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1711667061.14
REQUEST_TIME 1711667061
argv Array ( )
argc 0
0. Whoops\Handler\PrettyPageHandler