1ScssPhp\ScssPhp\Exception\CompilerException {#7941
  #message: "Undefined mixin atelier-kicker: line: 229, column: 5"
  #code: 0
  #file: "/app/vendor/scssphp/scssphp/src/Compiler.php"
  #line: 6179trace: {/app/vendor/scssphp/scssphp/src/Compiler.php:6179 {ScssPhp\ScssPhp\Compiler->error($msg, ...$args) …
      › 
      ›     return new CompilerException($msg);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:3323 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › if (! $mixin) {    throw $this->error("Undefined mixin $name");}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:1970 {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) …
      › 
      › $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2980 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › case Type::T_BLOCK:    $this->compileBlock($child[1]);    break;}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:1970 {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) …
      › 
      › $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2980 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › case Type::T_BLOCK:    $this->compileBlock($child[1]);    break;}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:1970 {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) …
      › 
      › $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2980 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › case Type::T_BLOCK:    $this->compileBlock($child[1]);    break;}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:782 {ScssPhp\ScssPhp\Compiler->compileRoot(Block $rootBlock) …
      › 
      › $this->compileChildrenNoReturn($rootBlock->children, $this->scope);assert($this->scope !== null);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:560 {ScssPhp\ScssPhp\Compiler->compileString($source, $path = null) …
      › $this->injectVariables($this->registeredVars);$this->compileRoot($tree);$this->popEnv();}
    /app/src/Twig/Traits/ScssExtensionTrait.php:190 {App\Twig\TwigExtension->App\Twig\Traits\{closure} …
      › 
      › $css = $compiler->compileString($scss)->getCss();$entityName = $entity?->__toString();}
    /app/src/Service/Cache/MemoryCacheService.php:31 {App\Service\Cache\MemoryCacheService::App\Service\Cache\{closure} …
      ›     $item->tag($tags);    return $function($item);});}
    /app/vendor/symfony/cache/LockRegistry.php:111 {Symfony\Component\Cache\LockRegistry::compute(callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, ?Closure $setMetadata = null, ?LoggerInterface $logger = null): mixed …
      › 
      › $value = $callback($item, $save);}
    /app/vendor/symfony/cache/Traits/ContractsTrait.php:102 {Symfony\Component\Cache\Adapter\TagAwareAdapter->Symfony\Component\Cache\Traits\{closure} …
      › try {    $value = ($this->callbackWrapper)($callback, $item, $save, $pool, function (CacheItem $item) use ($setMetadata, $startTime, &$metadata) {        $setMetadata($item, $startTime, $metadata);}
    /app/vendor/symfony/cache-contracts/CacheTrait.php:64 {Symfony\Component\Cache\Adapter\TagAwareAdapter->contractsGet(CacheItemPoolInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null, ?LoggerInterface $logger = null): mixed …
      › $save = true;$item->set($callback($item, $save));if ($save) {}
    /app/vendor/symfony/cache/Traits/ContractsTrait.php:85 {Symfony\Component\Cache\Adapter\TagAwareAdapter->doGet(AdapterInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null): mixed …
      › 
      › return $this->contractsGet($pool, $key, function (CacheItem $item, bool &$save) use ($pool, $callback, $setMetadata, &$metadata, $key) {    // don't wrap nor save recursive calls}
    /app/vendor/symfony/cache-contracts/CacheTrait.php:30 {Symfony\Component\Cache\Adapter\TagAwareAdapter->get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed …
      › {    return $this->doGet($this, $key, $callback, $beta, $metadata);}}
    /app/src/Service/Cache/MemoryCacheService.php:29 {App\Service\Cache\MemoryCacheService::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › 
      › return $cache->get($name, function (CacheItem $item) use ($function, $tags) {    $item->tag($tags);}
    /app/src/Service/Cache/Strategy/MemoryAndHttpCacheStrategy.php:14 {App\Service\Cache\Strategy\MemoryAndHttpCacheStrategy::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › {    return MemoryCacheService::getValue($name, $function, $tags, $ignoreLanguage, $ignoreMediaType, $ignoreRole, $suffixes);}}
    /app/src/Service/Cache/CacheManager.php:16 {App\Service\Cache\CacheManager::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › {    return (self::getCacheStrategyClass())::getValue($name, $function, $tags, $ignoreLanguage, $ignoreMediaType, $ignoreRole, $suffixes);}}
    /app/src/Twig/Traits/ScssExtensionTrait.php:74 {App\Twig\TwigExtension->filter_scss(?string $scss, ?string $randomBlockId = null, ?AbstractEvolutEntity $entity = null): ?string …
      › $mediaType = SessionContextService::getContext(SessionContextEnum::MANUAL_MEDIA_TYPE) ?? SessionContextService::getContext(SessionContextEnum::ACTUAL_MEDIA_TYPE);return CacheManager::getValue(sprintf('scss_rendering_for_%s_%s_%s_%s', $randomBlockId, md5($scss), $language, $mediaType),    function () use ($scss, $randomBlockId, $entity) {}
    /app/var/cache/prod/twig/40/40d274654847ebb44e105d8301adbd44.php:118 {__TwigTemplate_de3f5a5383dba55f0089769a14095e32->block_bloc_styles(array $context, array $blocks = []): iterable …
      › yield "            ";yield $this->extensions['App\Twig\TwigExtension']->filter_decode_html($this->extensions['App\Twig\TwigExtension']->filter_scss(CoreExtension::getAttribute($this->env, $this->source, ($context["bloc"] ?? null), "scss", [], "any", false, false, false, 17), CoreExtension::getAttribute($this->env, $this->source, ($context["bloc"] ?? null), "blocId", [], "any", false, false, false, 17), ($context["bloc"] ?? null)));yield "}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/40/40d274654847ebb44e105d8301adbd44.php:75 {__TwigTemplate_de3f5a5383dba55f0089769a14095e32->doDisplay(array $context, array $blocks = []): iterable …
      › // line 13yield from $this->unwrap()->yieldBlock('bloc_styles', $context, $blocks);// line 44}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/cc/cc7aa6d18d1c40bd6452c433b77a82c0.php:53 {__TwigTemplate_3dac8488c739450518b10b9760b9254b->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("blocs/Bloc.html.twig", "blocs/global/bloc_with_header.html.twig", 3);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/8e/8ed5391774d269ffe313b0559cfd8382.php:47 {__TwigTemplate_6b57b105b45e51a70cfc162472edc3fd->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("blocs/global/bloc_with_header.html.twig", "blocs/ContentBloc.html.twig", 2);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:425 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_include_bloc(array $context, array $blocks = []): iterable …
      › yield "                ";yield from         $this->loadTemplate((("blocs/" . $this->extensions['App\Twig\TwigExtension']->filter_class(CoreExtension::getAttribute($this->env, $this->source, ($context["blocPage"] ?? null), "bloc", [], "any", false, false, false, 57))) . ".html.twig"), "blocs/Page.html.twig", 57)->unwrap()->yield(CoreExtension::merge($context, ["bloc" => CoreExtension::getAttribute($this->env, $this->source, ($context["blocPage"] ?? null), "bloc", [], "any", false, false, false, 57), "nodump" => true, "form" => $this->extensions['App\Twig\TwigExtension']->function_accessor(($context["form"] ?? null), "[blocPages]", (("[" . CoreExtension::getAttribute($this->env, $this->source, ($context["loop"] ?? null), "index0", [], "any", false, false, false, 57)) . "]"))]));// line 58}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:396 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_blocPages(array $context, array $blocks = []): iterable …
      › yield "            ";yield from $this->unwrap()->yieldBlock('include_bloc', $context, $blocks);// line 59}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:227 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_body(array $context, array $blocks = []): iterable …
      › // line 54yield from $this->unwrap()->yieldBlock('blocPages', $context, $blocks);// line 61}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/f3/f3ea7129739c5ba87d4de6e044961f47.php:304 {__TwigTemplate_f7de9678832f434a6f354facfb4e9091->{closure} …
      › yield "            ";yield from $this->unwrap()->yieldBlock('body', $context, $blocks);// line 131}
    /app/vendor/twig/twig/src/Extension/CoreExtension.php:1919 {Twig\Extension\CoreExtension::captureOutput(iterable $body): string …
      › try {    foreach ($body as $data) {        echo $data;}
    /app/var/cache/prod/twig/f3/f3ea7129739c5ba87d4de6e044961f47.php:301 {__TwigTemplate_f7de9678832f434a6f354facfb4e9091->doDisplay(array $context, array $blocks = []): iterable …
      › // line 123$___internal_parse_0_ = ('' === $tmp = \Twig\Extension\CoreExtension::captureOutput((function () use (&$context, $macros, $blocks) {    // line 124}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:70 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("base.html.twig", "blocs/Page.html.twig", 2);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/vendor/twig/twig/src/Template.php:349 {Twig\Template->display(array $context, array $blocks = []): void …
      › {    foreach ($this->yield($context, $blocks) as $data) {        echo $data;}
    /app/vendor/twig/twig/src/Template.php:364 {Twig\Template->render(array $context): string …
      › try {    $this->display($context);} catch (\Throwable $e) {}
    /app/vendor/twig/twig/src/TemplateWrapper.php:35 {Twig\TemplateWrapper->render(array $context = []): string …
      › {    return $this->template->render($context);}}
    /app/vendor/twig/twig/src/Environment.php:306 {Twig\Environment->render($name, array $context = []): string …
      › {    return $this->load($name)->render($context);}}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:448 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRenderView(string $view, ?string $block, array $parameters, string $method): string …
      › 
      ›     return $this->container->get('twig')->render($view, $parameters);}}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:453 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response …
      › {    $content = $this->doRenderView($view, $block, $parameters, $method);    $response ??= new Response();}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:253 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->render(string $view, array $parameters = [], ?Response $response = null): Response …
      › {    return $this->doRender($view, null, $parameters, $response, __FUNCTION__);}}
    /app/src/Controller/Base/WebsiteController.php:164 {App\Controller\Base\WebsiteController->renderPage(?string $slug = null): Response …
      › 
      › return $this->render('blocs/' . TwigExtension::filter_class($page) . '.html.twig', [    'bloc' => $page,}
    /app/vendor/symfony/http-kernel/HttpKernel.php:181 {Symfony\Component\HttpKernel\HttpKernel->handleRaw(Request $request, int $type = self::MAIN_REQUEST): Response …
      › // call controller$response = $controller(...$arguments);}
    /app/vendor/symfony/http-kernel/HttpKernel.php:76 {Symfony\Component\HttpKernel\HttpKernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true): Response …
      › try {    return $response = $this->handleRaw($request, $type);} catch (\Throwable $e) {}
    /app/vendor/symfony/http-kernel/Kernel.php:197 {Symfony\Component\HttpKernel\Kernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true): Response …
      › try {    return $this->getHttpKernel()->handle($request, $type, $catch);} finally {}
    /app/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35 {Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run(): int …
      › {    $response = $this->kernel->handle($this->request);}
    /app/vendor/autoload_runtime.php:29 {require_once …
      ›         ->getRunner($app)        ->run());}
    /app/public/index.php:5 {
      › 
      › require_once dirname(__DIR__).'/vendor/autoload_runtime.php';arguments: {
        "/app/vendor/autoload_runtime.php"
      }
    }
  }
}
2 """
.efebat-hero-v1 {\n  position: relative;\n  height: 84vh;\n  max-height: 820px;\n  display: flex;\n  align-items: center;\n  overflow: hidden;\n  padding-top: 96px;\n  padding-bottom: 56px;\n  background: var(--color1);\n\n  .efebat-hero-v1__bg {\n    position: absolute;\n    inset: 0;\n    background-position: center center;\n    background-size: cover;\n    background-repeat: no-repeat;\n    transform: scale(1.01);\n    filter: saturate(0.82) contrast(1.04);\n  }\n\n  .efebat-hero-v1__overlay {\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(34, 36, 38, 0.86) 0%, rgba(34, 36, 38, 0.68) 50%, rgba(34, 36, 38, 0.22) 100%);\n  }\n\n  .efebat-hero-v1__inner {\n    position: relative;\n    z-index: 2;\n    width: 100%;\n  }\n\n  .efebat-hero-v1__content {\n    max-width: 820px;\n    text-align: left;\n  }\n\n  .efebat-hero-v1__label {\n    margin-bottom: 22px;\n    @include atelier-kicker(var(--color4));\n  }\n\n  .efebat-hero-v1__title {\n    max-width: 780px;\n    margin-bottom: 24px !important;\n    @include atelier-page-hero-title;\n    font-size: clamp(44px, 5.6vw, 72px) !important;\n  }\n\n  .efebat-hero-v1__description {\n    max-width: 620px;\n    margin-bottom: 34px;\n    @include atelier-section-description(rgba(244, 241, 234, 0.9));\n  }\n\n  .efebat-hero-v1__actions .buttons {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 14px;\n    text-align: left !important;\n  }\n\n  .efebat-hero-v1__actions .evolut-btn-outline,\n  .efebat-hero-v1__actions .btn-outline {\n    color: var(--color4) !important;\n    border-color: rgba(244, 241, 234, 0.78) !important;\n    background: transparent !important;\n  }\n}\n
"""
bloc_60662221-5356-4a21-aed6-032782934a8e *{color: red !important} #bloc_60662221-5356-4a21-aed6-032782934a8e .shape-divider-top path { fill: #6174d1 !important; } #bloc_60662221-5356-4a21-aed6-032782934a8e .shape-divider-bottom path { fill: #6174d1 !important; }
Atelier d'architecture à Montpellier

Architecture précise pour lieux durables

Atelier Structure accompagne les particuliers et les professionnels dans la conception, la rénovation et le suivi de chantier, avec une méthode claire du premier croquis à la réception.

Une méthode claire pour décider sans flou

Plans et documents de conception sur une table de travail

Des espaces dessinés à partir des usages

Chaque projet commence par l'écoute du lieu, des contraintes et des usages. L'agence traduit ces données en scénarios concrets pour arbitrer les volumes, les matières, le budget et le calendrier.Du dossier administratif au suivi de chantier, les décisions sont documentées pour garder une trajectoire lisible et limiter les surprises.
18
projets livrés
4
phases cadrées
1
interlocuteur projet
100%
suivi documenté

Partenaires de projet

Bureaux d'études, économistes, paysagistes et artisans spécialisés interviennent selon les besoins de chaque projet.
Structure
Thermique
Economie
Paysage
Artisans
Urbanisme

Repères de travail

Des engagements simples pour garder le projet compréhensible, maîtrisé et fidèle à son intention initiale.

Analyse du lieu

Relevés, usages, contraintes réglementaires et potentiel architectural sont cadrés avant de dessiner.

Conception lisible

Les choix de volumes, matières et lumière sont expliqués avec des supports clairs.

Budget suivi

Les arbitrages sont posés tôt pour garder une cohérence entre ambition, coûts et planning.

Démarches cadrées

Permis, déclarations et échanges administratifs sont préparés avec méthode.

Chantier documenté

Les comptes rendus et validations gardent le chantier lisible jusqu'à la réception.

Retours de clients

Des projets menés avec une exigence de clarté, de dialogue et de précision jusqu'à la réception.
Homme à tout faire, excellent travail.
A
Ali
Bricolage et petits travaux
Très satisfaite des travaux de rénovation complète réalisés. Ma maison est désormais plus belle et c’est exactement ce que je voulais. Des professionnels toujours à l’écoute.
I
Irna Fontes
Rénovation complète
Nous recommandons sans hésiter l’entreprise HM Bat pour des travaux de qualité.
S
Sylvain L.
Travaux de rénovation

Vous avez un lieu à transformer ?

Décrivez brièvement votre projet. L'agence vous recontacte pour qualifier les contraintes, les délais et la prochaine étape utile.