« 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. »
1ScssPhp\ScssPhp\Exception\CompilerException {#8305 #message: "Undefined mixin atelier-page-hero-root: line: 190, column: 3" #code: 0 #file: "/app/vendor/scssphp/scssphp/src/Compiler.php" #line: 6179: { {ScssPhp\ScssPhp\Compiler->error($msg, ...$args) … › ›return new CompilerException($msg);›}} {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) … ›if (! $mixin) {›throw $this->error("Undefined mixin $name");›}} {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') … ›} else {›$ret = $this->compileChild($stm, $out);›}} {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) … › ›$this->compileChildrenNoReturn($block->children, $out, $block->selfParent);› } {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) … ›case Type::T_BLOCK:›$this->compileBlock($child[1]);›break;} {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') … ›} else {›$ret = $this->compileChild($stm, $out);›}} {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) … › ›$this->compileChildrenNoReturn($block->children, $out, $block->selfParent);› } {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) … ›case Type::T_BLOCK:›$this->compileBlock($child[1]);›break;} {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') … ›} else {›$ret = $this->compileChild($stm, $out);›}} {ScssPhp\ScssPhp\Compiler->compileRoot(Block $rootBlock) … › ›$this->compileChildrenNoReturn($rootBlock->children, $this->scope);›assert($this->scope !== null);} {ScssPhp\ScssPhp\Compiler->compileString($source, $path = null) … ›$this->injectVariables($this->registeredVars);›$this->compileRoot($tree);›$this->popEnv();} {App\Twig\TwigExtension->App\Twig\Traits\{closure} … › ›$css = $compiler->compileString($scss)->getCss();›$entityName = $entity?->__toString();} {App\Service\Cache\MemoryCacheService::App\Service\Cache\{closure} … ›$item->tag($tags);›return $function($item);›});} {Symfony\Component\Cache\LockRegistry::compute(callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, ?Closure $setMetadata = null, ?LoggerInterface $logger = null): mixed … › ›$value = $callback($item, $save);› } {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);} {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) {} {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} {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\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\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\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\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) {} {__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 "} {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable … ›try {›yield from $template->$block($context, $blocks);›} catch (Error $e) {} {__TwigTemplate_de3f5a5383dba55f0089769a14095e32->doDisplay(array $context, array $blocks = []): iterable … ›// line 13›yield from $this->unwrap()->yieldBlock('bloc_styles', $context, $blocks);›// line 44} {Twig\Template->yield(array $context, array $blocks = []): iterable … ›try {›yield from $this->doDisplay($context, $blocks);›} catch (Error $e) {} {__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));›}} {Twig\Template->yield(array $context, array $blocks = []): iterable … ›try {›yield from $this->doDisplay($context, $blocks);›} catch (Error $e) {} {__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));›}} {Twig\Template->yield(array $context, array $blocks = []): iterable … ›try {›yield from $this->doDisplay($context, $blocks);›} catch (Error $e) {} {__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} {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable … ›try {›yield from $template->$block($context, $blocks);›} catch (Error $e) {} {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_blocPages(array $context, array $blocks = []): iterable … ›yield " ";›yield from $this->unwrap()->yieldBlock('include_bloc', $context, $blocks);›// line 59} {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable … ›try {›yield from $template->$block($context, $blocks);›} catch (Error $e) {} {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_body(array $context, array $blocks = []): iterable … ›// line 54›yield from $this->unwrap()->yieldBlock('blocPages', $context, $blocks);›// line 61} {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable … ›try {›yield from $template->$block($context, $blocks);›} catch (Error $e) {} {__TwigTemplate_f7de9678832f434a6f354facfb4e9091->{closure} … ›yield " ";›yield from $this->unwrap()->yieldBlock('body', $context, $blocks);›// line 131} {Twig\Extension\CoreExtension::captureOutput(iterable $body): string … ›try {›foreach ($body as $data) {›echo $data;} {__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} {Twig\Template->yield(array $context, array $blocks = []): iterable … ›try {›yield from $this->doDisplay($context, $blocks);›} catch (Error $e) {} {__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));›}} {Twig\Template->yield(array $context, array $blocks = []): iterable … ›try {›yield from $this->doDisplay($context, $blocks);›} catch (Error $e) {} {Twig\Template->display(array $context, array $blocks = []): void … ›{›foreach ($this->yield($context, $blocks) as $data) {›echo $data;} {Twig\Template->render(array $context): string … ›try {›$this->display($context);›} catch (\Throwable $e) {} {Twig\TemplateWrapper->render(array $context = []): string … ›{›return $this->template->render($context);›}} {Twig\Environment->render($name, array $context = []): string … ›{›return $this->load($name)->render($context);›}} {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRenderView(string $view, ?string $block, array $parameters, string $method): string … › ›return $this->container->get('twig')->render($view, $parameters);›}} {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();} {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->render(string $view, array $parameters = [], ?Response $response = null): Response … ›{›return $this->doRender($view, null, $parameters, $response, __FUNCTION__);›}} {App\Controller\Base\WebsiteController->renderPage(?string $slug = null): Response … › ›return $this->render('blocs/' . TwigExtension::filter_class($page) . '.html.twig', [›'bloc' => $page,} {Symfony\Component\HttpKernel\HttpKernel->handleRaw(Request $request, int $type = self::MAIN_REQUEST): Response … ›// call controller›$response = $controller(...$arguments);› } {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) {} {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 {} {Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run(): int … ›{›$response = $this->kernel->handle($this->request);› } {require_once … ›->getRunner($app)›->run()›);} { › ›require_once dirname(__DIR__).'/vendor/autoload_runtime.php';› : { "/app/vendor/autoload_runtime.php" } } } }
2 """ .efebat-page-hero-v1 {\n @include atelier-page-hero-root;\n\n .efebat-page-hero-v1__bg {\n position: absolute !important;\n inset: 0 !important;\n background-size: cover !important;\n background-position: center !important;\n filter: saturate(0.82) contrast(1.04);\n }\n\n .efebat-page-hero-v1__overlay {\n position: absolute !important;\n inset: 0 !important;\n @include atelier-page-hero-overlay;\n }\n\n .efebat-page-hero-v1__inner {\n position: relative !important;\n z-index: 2 !important;\n max-width: 860px !important;\n margin: 0 auto !important;\n padding: 0 24px !important;\n text-align: center !important;\n }\n\n .efebat-page-hero-v1__title {\n margin-bottom: 20px !important;\n @include atelier-page-hero-title;\n }\n\n .efebat-page-hero-v1__description {\n max-width: 720px !important;\n margin: 0 auto !important;\n @include atelier-section-description(rgba(244, 241, 234, 0.86));\n }\n}\n """bloc_37685129-6372-4c2d-9b48-3f740ef5d848 *{color: red !important} #bloc_37685129-6372-4c2d-9b48-3f740ef5d848 .shape-divider-top path { fill: #6174d1 !important; } #bloc_37685129-6372-4c2d-9b48-3f740ef5d848 .shape-divider-bottom path { fill: #6174d1 !important; }
À propos
Atelier Structure Architectes conçoit des lieux sobres, précis et durables, en reliant usages, contraintes, budget et qualité du chantier.

Notre approche
Une architecture dessinée à partir des usages
L'agence part du lieu, des besoins et des contraintes réelles pour construire une réponse claire. Chaque décision doit pouvoir être expliquée, chiffrée et suivie.Cette méthode permet de garder une trajectoire lisible depuis l'esquisse jusqu'à la réception du chantier.
Chiffres clés
Des repères simples pour comprendre la méthode de l'agence et le suivi apporté à chaque projet.
18projets livrés
4phases cadrées
100%suivi documenté
1interlocuteur projet
Avis clients
Ce que disent nos clients.
★★★★★
★★★★★
« Nous recommandons sans hésiter l'entreprise HM Bat pour des travaux de qualité. »
★★★★★
« Homme à tout faire, excellent travail. »
Aller plus loin
Un projet commence souvent par une question de faisabilité, de budget ou de calendrier. L'agence vous aide à poser les bons arbitrages.
