<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover">

<link rel="dns-prefetch" href="https://cloud.typography.com">
<link rel="dns-prefetch" href="https://pro.fontawesome.com">

<title>Page not found | Spatie</title>

<meta name="description" content="">
<meta property="og:title" content="Page not found"/>
<meta property="og:description" content=""/>
<meta property="og:image" content="https://spatie.be/images/og-image.jpg"/>
<meta property="og:url" content="https://spatie.be/rss"/>
<meta property="og:type" content="website" />



    <link rel="stylesheet" href="https://cloud.typography.com/6194432/6145752/css/fonts.css">
    <!-- Livewire Styles --><style >[wire\:loading][wire\:loading], [wire\:loading\.delay][wire\:loading\.delay], [wire\:loading\.inline-block][wire\:loading\.inline-block], [wire\:loading\.inline][wire\:loading\.inline], [wire\:loading\.block][wire\:loading\.block], [wire\:loading\.flex][wire\:loading\.flex], [wire\:loading\.table][wire\:loading\.table], [wire\:loading\.grid][wire\:loading\.grid], [wire\:loading\.inline-flex][wire\:loading\.inline-flex] {display: none;}[wire\:loading\.delay\.none][wire\:loading\.delay\.none], [wire\:loading\.delay\.shortest][wire\:loading\.delay\.shortest], [wire\:loading\.delay\.shorter][wire\:loading\.delay\.shorter], [wire\:loading\.delay\.short][wire\:loading\.delay\.short], [wire\:loading\.delay\.default][wire\:loading\.delay\.default], [wire\:loading\.delay\.long][wire\:loading\.delay\.long], [wire\:loading\.delay\.longer][wire\:loading\.delay\.longer], [wire\:loading\.delay\.longest][wire\:loading\.delay\.longest] {display: none;}[wire\:offline][wire\:offline] {display: none;}[wire\:dirty]:not(textarea):not(input):not(select) {display: none;}:root {--livewire-progress-bar-color: #2299dd;}[x-cloak] {display: none !important;}</style>

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#007593">
<meta name="theme-color" content="#ffffff">
    <link rel="alternate" type="application/atom+xml" href="https://spatie.be/feed" title="All blogposts of the Spatie team">

    <link rel="preload" as="style" href="https://spatie.be/build/assets/app-D7wo95Zp.css" /><link rel="modulepreload" href="https://spatie.be/build/assets/app-BejcjySE.js" /><link rel="modulepreload" href="https://spatie.be/build/assets/_commonjsHelpers-Cpj98o6Y.js" /><link rel="stylesheet" href="https://spatie.be/build/assets/app-D7wo95Zp.css" data-navigate-track="reload" /><script type="module" src="https://spatie.be/build/assets/app-BejcjySE.js" data-navigate-track="reload"></script>
    <script src="https://polyfill.io/v2/polyfill.min.js?features=IntersectionObserver,Promise,Array.from,Element.prototype.dataset" defer></script>

    <script src="https://cdn.usefathom.com/script.js" data-site="OMNDKUTR" defer></script>
    


<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer', 'GTM-WGCBMG');</script>


    <link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
    <script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
    
    <style>
    :root {
    --comments-spacing: 2.5rem;
    --comments-avatar-size: 1.5rem;
    --comments-avatar-margin: 0.35rem;
    --comments-border-radius: 0.3rem;
    --comments-z-modal: 2;

    /* colors */
    --comments-color-background: white;
    --comments-color-background-nested: white;
    --comments-color-background-paper: rgb(249, 250, 251);
    --comments-color-background-info: rgb(237, 235, 252);

    --comments-color-reaction: rgb(238, 239, 240);
    --comments-color-reaction-hover: rgb(229, 231, 235);
    --comments-color-reacted: rgba(67, 56, 202, 0.2);
    --comments-color-reacted-hover: rgba(67, 56, 202, 0.35);

    --comments-color-border: rgb(221, 221, 221);

    --comments-color-text:rgb(17, 24, 39);
    --comments-color-text-dimmed: rgb(156, 163, 175);
    --comments-color-text-inverse: white;

    --comments-color-accent: rgba(67, 56, 202);
    --comments-color-accent-hover: rgba(67, 56, 202, 0.8);

    --comments-color-danger: rgb(225, 29, 72);
    --comments-color-danger-hover: rgb(225, 29, 72, 0.8);

    --comments-color-success: rgb(10, 200, 134);
    --comments-color-success-hover: rgb(10, 200, 134, 0.8);

    --comments-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
}

@media (min-width: 768px) {
    :root {
        --comments-avatar-size: 2.5rem;
        --comments-avatar-margin: 0.75rem;
    }
}

.comments {
    color: var(--comments-color-text);
}

.comments-avatar {
    width: var(--comments-avatar-size);
    height: var(--comments-avatar-size);
    border-radius: var(--comments-avatar-size);
    margin-right: var(--comments-avatar-margin);
}

/** Added to win agains Tailwind CDN specificity */
.comments-button.comments-button {
    border-radius: var(--comments-border-radius);
    color: var(--comments-color-text-inverse);
    background-color: var(--comments-color-accent);
    padding: 0.25rem 0.75rem;
    font-weight: 500;
    line-height: 1.35;
    transition: background 150ms;
}

.comments-button:hover {
    background-color: var(--comments-color-accent-hover);
}

.comments-button.is-small {
    padding: 0.15rem 0.5rem;
    font-size: 0.8rem;
}

.comments-button.is-link {
    background-color: transparent;
    color: var(--comments-color-text-dimmed);
    text-decoration: underline;
}

.comments-button.is-danger {
    background-color: var(--comments-color-danger);
}

.comments-button.is-danger:hover {
    background-color: var(--comments-color-danger-hover);
}

.comments-button.is-success {
    background-color: var(--comments-color-success);
}

.comments-button.is-success:hover {
    background-color: var(--comments-color-success-hover);
}

.comments-button svg {
    stroke: var(--comments-color-text-inverse);
}

.comments-comment {
    display: flex;
}

.comments-nested .comments-comment{
    background-color: var(--comments-color-background-nested);
    padding: 0;
}

.comments-comment-inner {
    flex-grow: 1;
}

.comments-comment-header {
    position: relative;
    font-weight: 500;
    color: var(--comments-color-text);
    margin-bottom: 0.5rem;
}

@media (min-width: 768px) {
    .comments-comment-header {
        display: flex;
        align-items: baseline;
    }
}

.comments-comment-header-actions {
    display: flex;
    flex-wrap: wrap;
    color: var(--comments-color-text-dimmed);
    font-size: 0.8rem;
}

@media (min-width: 768px) {
    .comments-comment-header-actions {
        margin-left: 0.5rem;
    }
}

.comments-comment-header-actions li {
    display: flex;
    position: relative;
}

.comments-comment-header-actions li:not(:last-child):after {
    content: "•";
    margin: 0 0.25rem;
}

.comments-comment-header-actions li > a:hover,
.comments-comment-header-actions li > button:hover {
    text-decoration: underline;
}

.comments-comment-header-copied {
    position: absolute;
    left: 0;
    bottom: 100%;
    font-size: 0.65rem;
    white-space: nowrap;
    color: var(--comments-color-success);
}

.comments-error {
    margin-top: 0.5rem;
    font-size: 0.875rem;
    color: var(--comments-color-danger);
}

.comments-form {
    display: flex;
    position: relative;
}

.comments-form-inner {
    flex-grow: 1;
}

.comments-form-inner button {
    margin-top: 0.5rem;
}

.comments-form-editor-tip {
    color: var(--comments-color-text-dimmed);
    font-size: 0.8rem;
    padding: 0.25rem 0;
    text-align: right;
}

.comments-form-editor-tip a {
    text-decoration: underline;
}

.comments-newest-first > .comments-form {
    margin-bottom: var(--comments-spacing);
}

.comments-group {
    position: relative;
    padding-bottom: var(--comments-spacing);
    margin-bottom: var(--comments-spacing);
}

.comments-group:target {
    margin-top: calc(-1 * var(--comments-spacing));
    margin-left: calc(-0.5 * var(--comments-spacing));
    margin-right: calc(-0.5 * var(--comments-spacing));
    padding-top: var(--comments-spacing);
    padding-left: calc(0.5 * var(--comments-spacing));
    padding-right: calc(0.5 * var(--comments-spacing));
    animation: highlight 1.5s ease-in-out;
    border: solid 1px var(--comments-color-accent);
    border-radius: var(--comments-border-radius);
}

@keyframes highlight {
    0% {
        transform: scale(1);
    }
    5% {
        transform: scale(1);
    }
    15% {
        transform: scaleX(1.015);
    }
    50% {
        transform: scale(1);
    }
    100% {
        transform: scale(1);
    }
}

.comments-group:after {
    content: "";
    position: absolute;
    bottom: 0;
    right: 0;
    left: 0;
    border-bottom: 1px solid var(--comments-color-border);
}

.comments-group.comments-group-with-avatars:after {
    /* Offset the border to stay lined up with the avatar */
    left: calc(var(--comments-avatar-size) + var(--comments-avatar-margin));
}

.comments-group .comments-group {
    padding-bottom: 0;
    margin-top: calc(var(--comments-spacing) * 0.66);
    margin-bottom: 0;
}

.comments-group .comments-group:after {
    content: none;
}

.comments-header {
    display: flex;
    justify-content: space-between;
    margin-bottom: var(--comments-spacing);
}

.comments-header strong {
    font-size: 1.125rem;
    font-weight: 500;
}

.comments-icon {
    height: 1.25rem;
    width: 1.25rem;
    stroke: var(--comments-color-text);
}

.comments-approval {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 2rem;
    background-color: var( --comments-color-background-info);
    border-radius: var(--comments-border-radius);
    padding: 0.5rem;
    font-size: 0.8rem;
    margin-bottom: 0.5rem;
}

.comments-approval-buttons {
    display: flex;
    align-items: center;
    gap: 0.25rem;
}

.comments-modal {
    position: absolute;
    z-index: var(--comments-z-modal);
    color: var(--comments-color-text);
    font-size: 1rem;
    background-color: var( --comments-color-background);
    box-shadow: var( --comments-shadow);
    border-radius: var(--comments-border-radius);
    top: 0;
    right: 0;
    padding: 1rem;
}

.comments-modal.is-left {
    right: auto;
    left: 0;
}

.comments-modal.is-bottom {
    top: 100%;
}

.comments-modal.is-compact {
    padding: 0.5rem;
}

.comments-modal-title {
    font-weight: 500;
    white-space: nowrap;
}

.comments-modal-contents {
    font-weight: normal;
    line-height: 1.25;
}

.comments-modal-contents p {
    margin-bottom: 0.5rem;
    min-width: 8rem;
}

@media (min-width: 768px) {
    .comments-modal-contents p {
        min-width: 12rem;
    }
}

.comments-modal-contents .comments-button {
    float: right;
}

.comments-nested {
    margin-top: calc(var(--comments-spacing) * 0.66);
    padding-left: calc(var(--comments-avatar-size) + var(--comments-avatar-margin));
}

.comments-no-comment-yet {
    text-align: center;
    margin: 2rem 0 4rem 0;
    color: var(--comments-color-text-dimmed);
}

.comments-placeholder,
.comments-textarea {
    border: 1px solid var(--comments-color-border);
    border-radius: 4px;
    width: 100%;
    padding: 10px;
    height: var(--comments-avatar-size);
}

.comments-placeholder:focus {
    outline: none;
}

.comments-reactions {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin-top: 0.75rem;
}

.comments-reaction {
    display: flex;
    align-items: center;
    white-space: nowrap;
    border-radius: var(--comments-border-radius);
    cursor: pointer;
    background-color: var(--comments-color-reaction);
    padding: 0 0.5rem;
    height: 1.5rem;
    font-size: 0.8rem;
    transition: background 150ms;
}

.comments-reaction:hover {
    background-color: var(--comments-color-reaction-hover);
}

.comments-reaction.is-reacted {
    border: 1px solid var(--comments-color-accent);
    background-color: var(--comments-color-reacted);
}

.comments-reaction.is-reacted:hover {
    background-color: var(--comments-color-reacted-hover);
}

.comments-reaction-picker {
    position: relative;
}

/** Added to win agains Tailwind CDN specificity */
.comments-reaction-picker-trigger.comments-reaction-picker-trigger {
    display: flex;
    align-items: center;
    height: 1.5rem;
    padding: 0 0.5rem;
    cursor: pointer;
    border-radius: var(--comments-border-radius);
    background-color: var(--comments-color-reaction);
    transition: background 150ms;
}

.comments-reaction-picker-trigger:hover {
    background-color: var(--comments-color-reaction-hover);
}

.comments-reaction-picker-reactions {
    display: grid;
    gap: 0.25rem;
}

@media (min-width: 480px) {
    .comments-reaction-picker-reactions {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 768px) {
    .comments-reaction-picker-reactions {
        grid-template-columns: repeat(5, 1fr);
    }
}

.comments-reaction-picker-reaction {
    height: 1.75rem;
    padding: 0 0.25rem;
    border-radius: var(--comments-border-radius);
    cursor: pointer;
    transition: background 150ms;
}

.comments-reaction-picker-reaction:hover {
    background-color: var(--comments-color-reaction);
}

.comments-reaction-picker-reaction.is-reacted {
    background-color: var(--comments-color-reacted);
}

.comments-reaction-picker-reaction.is-reacted:hover {
    background-color: var(--comments-color-reacted-hover);
}

.comments-reply {
    margin-top: calc(var(--comments-spacing) * 0.66);
}

.comments-subscription {
    position: relative;
    margin-left: auto;
    font-size: 0.8rem;
}

.comments-subscription-trigger {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.25rem 0.5rem;
    border-radius: var(--comments-border-radius);
    background-color: var(--comments-color-reaction);
    font-weight: 600;
    transition: background 150ms;
}

.comments-subscription-trigger:hover {
    background-color: var(--comments-color-reaction-hover);
}

.comments-subscription-item {
    width: 100%;
    padding: 0.5rem 1rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    cursor: pointer;
    font-size: 0.8rem;
    font-weight: 500;
    text-align: left;
    white-space: nowrap;
    border-radius: var(--comments-border-radius);
    transition: background 150ms;
}

.comments-subscription-item:hover {
    background-color: var(--comments-color-reaction);
}

.comment-text {
    max-width: calc(100% - var(--comments-avatar-size));
}

.comment-text > *,
.comments-comment-inner {
    max-width: 100%;
}

.comment-text code {
    padding: 0.2rem 0.5rem;
    background-color: var(--comments-color-background-paper);
    border-radius: 0.3rem;
}

.comment-text .shiki {
    font-size: 0.85rem;
}

.comment-text .shiki code {
    padding: 0;
    background-color: transparent;
}

.comment-text .shiki {
    padding: 0.5rem;
    margin: 0.5rem 0;
    border-radius: 0.2rem;
    background-color: var(--comments-color-background-paper) !important;
    overflow: hidden;
    overflow-x: scroll;
}

.comment-text a {
    color: var(--comments-color-accent);
    text-decoration: underline;
}

.comment-text > *:not(:first-child),
.comment-text blockquote > *:not(:first-child),
.comment-text ul > *:not(:first-child):not(li),
.comment-text ol > *:not(:first-child):not(li) {
    margin-top: 0.5rem;
}

.comment-text h1 {
    font-size: 2rem;
    font-weight: bold;
}

.comment-text h2 {
    font-size: 1.7rem;
    font-weight: bold;
}

.comment-text h3 {
    font-size: 1.5rem;
    font-weight: bold;
}

.comment-text h4 {
    font-size: 1.3rem;
    font-weight: bold;
}

.comment-text h5 {
    font-size: 1.1rem;
    font-weight: bold;
}

.comment-text h6 {
    font-size: 1rem;
    font-weight: bold;
}

.comment-text blockquote {
    background-color: var(--comments-color-background-paper);
    padding: 1rem;
    border-left: solid 3px var(--comments-color-border);
}

.comment-text ul, .comment-text ol {
    padding-left: 1rem;
}

.comment-text ul li {
    list-style: circle;
}

.comment-text ol li {
    list-style: decimal;
}

.comments-textarea {
    min-height: 10rem;
}

/* Override the styles set by Filament for EasyMDE */
.EasyMDEContainer .editor-toolbar button:before {
    -webkit-mask-image: none !important;
    mask-image: none !important;
    display: none;
    content: '';
}

/* EasyMDE buttons */
.comments .CodeMirror {
    border-color: var(--comments-color-border);
}

.comments .CodeMirror-scroll, .CodeMirror{
    min-height: 10rem !important;
}

.comments .editor-toolbar {
    border-color: var(--comments-color-border);
    padding: 0.35rem;
}

.comments .editor-toolbar .separator {
    border-left-color: var(--comments-color-border);
}

.comments .editor-toolbar button {
    border: none;
    transition: background 150ms;
}
.comments .editor-toolbar button:hover {
    background-color: var(--comments-color-reaction);
}

.comments .editor-toolbar button.active {
    background-color: var(--comments-color-reaction-hover);
}

</style>
</head>

<body class="flex flex-col min-h-screen leading-normal ">
    <script>/* Empty script tag because Firefox has a FOUC */</script>
    <noscript>
        <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WGCBMG"
                  height="0" width="0" style="display:none;visibility:hidden"></iframe>
    </noscript>

    
    <div class="wallpaper opacity-50 | md:opacity-100">
        
        <img srcset="/images/medialibrary/639/responsive-images/error___media_library_original_2400_1675.jpg 2400w, /images/medialibrary/639/responsive-images/error___media_library_original_2007_1400.jpg 2007w, /images/medialibrary/639/responsive-images/error___media_library_original_1679_1171.jpg 1679w, /images/medialibrary/639/responsive-images/error___media_library_original_1405_980.jpg 1405w, /images/medialibrary/639/responsive-images/error___media_library_original_1176_820.jpg 1176w, /images/medialibrary/639/responsive-images/error___media_library_original_983_686.jpg 983w, /images/medialibrary/639/responsive-images/error___media_library_original_823_574.jpg 823w, data:image/svg+xml;base64,PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHg9IjAiCiB5PSIwIiB2aWV3Qm94PSIwIDAgMjQwMCAxNjc1Ij4KCTxpbWFnZSB3aWR0aD0iMjQwMCIgaGVpZ2h0PSIxNjc1IiB4bGluazpocmVmPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUVBWUFCZ0FBRC8vZ0E3UTFKRlFWUlBVam9nWjJRdGFuQmxaeUIyTVM0d0lDaDFjMmx1WnlCSlNrY2dTbEJGUnlCMk9EQXBMQ0J4ZFdGc2FYUjVJRDBnT1RBSy85c0FRd0FEQWdJREFnSURBd01EQkFNREJBVUlCUVVFQkFVS0J3Y0dDQXdLREF3TENnc0xEUTRTRUEwT0VRNExDeEFXRUJFVEZCVVZGUXdQRnhnV0ZCZ1NGQlVVLzlzQVF3RURCQVFGQkFVSkJRVUpGQTBMRFJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVUvOEFBRVFnQUZnQWdBd0VSQUFJUkFRTVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0VBTFVRQUFJQkF3TUNCQU1GQlFRRUFBQUJmUUVDQXdBRUVRVVNJVEZCQmhOUllRY2ljUlF5Z1pHaENDTkNzY0VWVXRId0pETmljb0lKQ2hZWEdCa2FKU1luS0NrcU5EVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnNFNGaG9lSWlZcVNrNVNWbHBlWW1acWlvNlNscHFlb3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXljclMwOVRWMXRmWTJkcmg0dVBrNWVibjZPbnE4Zkx6OVBYMjkvajUrdi9FQUI4QkFBTUJBUUVCQVFFQkFRRUFBQUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0VBTFVSQUFJQkFnUUVBd1FIQlFRRUFBRUNkd0FCQWdNUkJBVWhNUVlTUVZFSFlYRVRJaktCQ0JSQ2thR3h3UWtqTTFMd0ZXSnkwUW9XSkRUaEpmRVhHQmthSmljb0tTbzFOamM0T1RwRFJFVkdSMGhKU2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhWMmQzaDVlb0tEaElXR2g0aUppcEtUbEpXV2w1aVptcUtqcEtXbXA2aXBxckt6dExXMnQ3aTV1c0xEeE1YR3g4akp5dExUMU5YVzE5aloydUxqNU9YbTUranA2dkx6OVBYMjkvajUrdi9hQUF3REFRQUNFUU1SQUQ4QSt3N253ak1KaDhwTmUyNW5qUVZpMWErRHBacEJsVGlvY3phOWtiSzZOSnBVWVZCbW81eWZacWVyS2sraHkzTTRrS25OSnpOb3hVVlk5VWZRNHovQ0s0K2RtdnMwTEhwQ1JMd3ZQMHBPYkg3TXJTNk9KWHlWbzVpdVd4TkRvVWZkYU9jYWlidmwxamMwRTJDa093dmxqMEZBaFFtS0NqLy8yUT09Ij4KCTwvaW1hZ2U+Cjwvc3ZnPg== 32w" src="/images/medialibrary/639/error.jpg" width="2400" sizes="100vw" alt="">
    </div>


    

    
    <div class="px-3 sm:px-12 font-pt antialiased font-medium">
    <header
        x-data="{ open: window.innerWidth >= 720 }"
        x-on:click.outside="() => {
            if (window.innerWidth >= 720) return;
            open = false
        }"
        x-on:resize.window="open = window.innerWidth >= 720"
        class="w-full max-w-screen-xl mx-auto p-5 sm:px-[40px] sm:py-[30px] sm:flex z-10 my-5 rounded | bg-white shadow-light | print:bg-transparent print:shadow-none"
    >
         <div class="flex justify-between leading-loose | sm:leading-none sm:block">
             <a class="shrink-0 logo h-8 w-20 block | sm:mb-0 sm:w-48" href="/" title="Home">
                 <span class="absolute h-8 sm:h-14 ">
                 <svg class="w-auto h-full" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 595.28 255.12"><defs><style>.fill-current text-blue{fill:#197593;}.fill-current text-white{fill:#FFFFFF;}</style></defs><title>SPATIE</title> <g><path class="fill-current text-blue" d="M0,9.77A10,10,0,0,1,10.26,0H585a10,10,0,0,1,10.28,9.77V245.36A10,10,0,0,1,585,255.12H10.26A10,10,0,0,1,0,245.36V9.77Z"></path></g><g><path d="M95.6,156.66l10.87-14.84c6.46,5.32,13.82,8.95,21.52,8.95,5.44,0,8.27-2.38,8.27-5.78v-0.11c0-3.17-2.38-5.1-11.67-8.38-14.95-5.1-25.48-10.53-25.48-24.92v-0.34c0-14.38,11-24.46,28.31-24.46,10.65,0,20,2.94,28.31,9.63l-10.31,15.17c-5.44-4.19-12-7.25-18.46-7.25-4.64,0-7.25,2.27-7.25,5.21v0.11c0,3.51,2.49,5.32,12.57,9.06,15.06,4.87,24.46,11,24.46,24.46v0.23c0,15.4-11.89,24.92-28.88,24.92A48.26,48.26,0,0,1,95.6,156.66Z" class="fill-current text-white"></path><path d="M175.67,87.92H204c18.69,0,30.92,9.74,30.92,27.52v0.45c0,19-13.82,28.09-31.14,28.31h-7.81v23H175.67V87.92Zm27.41,39.64c7.13,0,11.44-4.19,11.44-10.87v-0.34c0-7.25-4.19-11-11.55-11h-7v22.2h7.13Z" class="fill-current text-white"></path><path d="M267.17,87.47h20.61l28,79.73h-21.4l-4.64-14.27H264.8l-4.53,14.27h-21Zm17.44,49.15-7.36-23.22-7.36,23.22h14.72Z" class="fill-current text-white"></path><path d="M338.64,106.27H319V87.92h59.57v18.35H359V167.2H338.64V106.27Z" class="fill-current text-white"></path><path d="M396.17,87.92h20.39V167.2H396.17V87.92Z" class="fill-current text-white"></path><path d="M444.64,87.92h54.59v17.89H464.8v13h31v16.88h-31V149.3h34.88V167.2h-55V87.92Z" class="fill-current text-white"></path></g></svg>
                 </span>
             </a>

             <button x-on:click="open = !open" class="flex items-center gap-x-2 text-black sm:hidden">
                 <svg x-cloak x-show="!open" class="w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 12"><path fill="#172A3D" d="M0 0h14v2H0V0Zm0 5h14v2H0V5Zm14 5v2H0v-2h14Z"/></svg>
                 <svg x-cloak x-show="open" class="w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14"><path fill="#172A3D" d="M2.148.718 1.433 0 0 1.433l.715.715L5.567 7 .718 11.852 0 12.567 1.433 14l.715-.715L7 8.433l4.852 4.849.715.718L14 12.567l-.715-.715L8.433 7l4.849-4.852.718-.715L12.567 0l-.715.718L7 5.568 2.148.717Z"/></svg>
                 <span class="text-[14px]">Menu</span>
             </button>
        </div>
         <div x-show.important="open" x-cloak x-transition class="mt-4 sm:mt-0 sm:h-14 grid items-start gap-x-8 | sm:gap-y-4 sm:justify-end sm:justify-items-end sm:ml-auto">
             <hr class="h-px bg-oss-gray sm:hidden -mx-5 mb-5" />
             <nav class="flex | sm:row-start-2 mb-5 sm:mb-0 text-oss-royal-blue">
                 <ul class=" grid sm:grid-flow-col gap-3 sm:gap-4 md:gap-6 sm:justify-between md:text-lg | print:hidden"><li><a href="https://spatie.be/products">Products</a></li><li><a href="https://spatie.be/open-source">Open Source</a></li><li><a href="https://spatie.be/courses">Courses</a></li><li><a href="https://spatie.be/web-development">Web Development</a></li></ul>

             </nav>
             <nav class="grid text-base | sm:opacity-75 sm:row-start-1 sm:grid-flow-col sm:items-center gap-4 sm:text-sm | print:hidden">
                 <a href="https://spatie.be/vacancies" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Vacancies</a><a href="https://spatie.be/about-us" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">About</a><a href="https://spatie.be/blog" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Blog</a><a href="https://spatie.be/docs" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Docs</a><a href="https://spatie.be/guidelines" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Guidelines</a><a href="https://spatie.be/login">
    <span class="icon fill-current text-oss-royal-blue" title="Log in">
        <span class="mr-2 md:hidden">Log in</span>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"/></svg>
    </span>
</a>

             </nav>
         </div>
    </header>
</div>
    
    <div class="flex-grow" role="main">
        <section id="banner" class="banner" role="banner">
        <div class="wrap">
            <h1 class="banner-slogan">
                This page <br>seems missing
            </h1>
            <p class="banner-intro">
                Could be a typo in your URL or a deprecated hyperlink… <br>
                We're here to help!
            </p>
        </div>
    </section>

    <div class="section section-group pt-0">
        <section id="resources" class="section">
    <div class="wrap">
        <div class="card gradient gradient-green text-white">
            <div class="grid-rows gap-8 | md:grid-cols md:items-center" style="--cols: 1fr 1fr">
                <h2 class="title-xl">
                    A few <br>suggestions
                </h2>
                <ul class="text-2xl links-white links-underline bullets bullets-white">
                    <li><span class="icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M187.8 264.5L41 412.5c-4.7 4.7-12.3 4.7-17 0L4.2 392.7c-4.7-4.7-4.7-12.3 0-17L122.7 256 4.2 136.3c-4.7-4.7-4.7-12.3 0-17L24 99.5c4.7-4.7 12.3-4.7 17 0l146.8 148c4.7 4.7 4.7 12.3 0 17z"/></svg>
<!--
Font Awesome Pro 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Commercial License)
--></span> <a href="https://spatie.be">Homepage</a>
                    </li>
                    <li><span class="icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M187.8 264.5L41 412.5c-4.7 4.7-12.3 4.7-17 0L4.2 392.7c-4.7-4.7-4.7-12.3 0-17L122.7 256 4.2 136.3c-4.7-4.7-4.7-12.3 0-17L24 99.5c4.7-4.7 12.3-4.7 17 0l146.8 148c4.7 4.7 4.7 12.3 0 17z"/></svg>
<!--
Font Awesome Pro 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Commercial License)
--></span> <a
                                href="https://spatie.be/open-source/packages">Open source packages</a></li>
                    <li><span class="icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M187.8 264.5L41 412.5c-4.7 4.7-12.3 4.7-17 0L4.2 392.7c-4.7-4.7-4.7-12.3 0-17L122.7 256 4.2 136.3c-4.7-4.7-4.7-12.3 0-17L24 99.5c4.7-4.7 12.3-4.7 17 0l146.8 148c4.7 4.7 4.7 12.3 0 17z"/></svg>
<!--
Font Awesome Pro 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Commercial License)
--></span> <a href="https://spatie.be/about-us">About
                            us</a></li>
                </ul>
            </div>
        </div>
    </div>
</section>

        <section class=section>
            <div class="wrap">
                <p class="text-2xl">
                    If you have a burning question at this point, <br>just contact us so we can help you out.
                </p>

                <p class="text-2xl mt-12 grid gap-x-16 gap-y-4 | md:mt-16 md:grid-flow-col justify-start items-start">
    <span>
        <a class="link link-black" href="mailto:info@spatie.be">info@spatie.be</a>
        <br>
        <a class="link link-black" href="https://twitter.com/intent/tweet?text=Dear+@spatie_be+…" target="_blank"
           rel="noreferrer noopener">@spatie_be</a>
        <br>
        <a class="link link-black" href="#tel">+32 3 292 56 79</a>
    </span>
    <a class="group block link link-black" href="https://goo.gl/maps/A2zoLK3nVF9V8jydA" target="_blank"
       rel="noreferrer noopener">
        Kruikstraat 22, Box 12
        <br>
        2018 Antwerp
        <br>
        Belgium
        <span class="icon px-2 fill-current text-pink group-hover:opacity-75 transition-fill transition-100">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"/></svg>
<!--
Font Awesome Pro 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Commercial License)
-->

            </span>
        </span>
    </a>
    </p>
            </div>
        </section>
    </div>
    </div>

    <footer
            class="bg-white text-oss-royal-blue border-t border-oss-gray | print:bg-transparent"
    >
    <div class="flex-none pt-16 pb-8 | print:pb-2" role="navigation">
        <div class="wrap links  links-gray text-gray  leading-loose | md:leading-normal">
            <div class="grid grid-cols-2 items-start text-sm | md:flex md:justify-between">
                <ul class=" grid sm:grid-flow-col gap-3 sm:gap-4 md:gap-6 sm:justify-between md:text-lg | print:hidden"><li><a href="https://spatie.be/products">Products</a></li><li><a href="https://spatie.be/open-source">Open Source</a></li><li><a href="https://spatie.be/courses">Courses</a></li><li><a href="https://spatie.be/web-development">Web Development</a></li></ul>


                <div class="grid | md:grid-flow-col ml:items-center md:ml-12 md:gap-12">
                    <a href="https://spatie.be/vacancies" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Vacancies</a><a href="https://spatie.be/about-us" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">About</a><a href="https://spatie.be/blog" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Blog</a><a href="https://spatie.be/docs" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Docs</a><a href="https://spatie.be/guidelines" class="first:-m-1 first:p-1 rounded-sm text-oss-royal-blue-light sm:text-oss-royal-blue">Guidelines</a><a href="https://spatie.be/login">
    <span class="icon fill-current text-oss-royal-blue" title="Log in">
        <span class="mr-2 md:hidden">Log in</span>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"/></svg>
    </span>
</a>

                </div>
            </div>
            <hr class="my-8 h-2px text-gray opacity-25 rounded | print:text-black" style="page-break-after: avoid;">
            <div class="grid gap-4 text-sm | sm:grid-cols-2 sm:gap-8 | md:flex flex-row-reverse justify-between">
                <address class="grid gap-4 | sm:gap-0 | md:grid-flow-col md:gap-8 md:text-right">
                    <div>
                        <a class="group flex items-end | md:flex-row-reverse"
                           href="https://goo.gl/maps/A2zoLK3nVF9V8jydA" target="_blank"
                           rel="nofollow noreferrer noopener">
                            <span>
                                Kruikstraat 22, Box 12
                                <br>
                                2018 Antwerp, Belgium
                            </span>
                            <span class="icon mb-px px-1 fill-current text-gray-lighter group-hover:text-pink transition-all transition-100 | print:hidden">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"/></svg>
<!--
Font Awesome Pro 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Commercial License)
-->

                            </span>
                        </a>
                    </div>
                    <div>
                        <a href="mailto:info@spatie.be">info@spatie.be</a>
                        <br>
                        <a href="#tel">+32 3 292 56 79</a>
                    </div>
                </address>
                <ul class="hidden | md:grid md:grid-flow-col md:gap-6 | print:hidden">
                    <li>
                        <a href="https://github.com/spatie" target="_blank" rel="nofollow noreferrer noopener">
                            GitHub
                        </a>
                    </li>
                    <li>
                        <a href="https://www.instagram.com/spatie_be" target="_blank"
                           rel="nofollow noreferrer noopener">
                            Instagram
                        </a>
                    </li>
                    <li>
                        <a href="https://be.linkedin.com/company/spatie" rel="me" target="_blank"
                           rel="nofollow noreferrer noopener">
                            LinkedIn
                        </a>
                    </li>
                    <li>
                        <a href="https://twitter.com/spatie_be" target="_blank" rel="nofollow noreferrer noopener">
                            Twitter
                        </a>
                    </li>
                    <li>
                        <a href="https://phpc.social/@spatie" rel="me" target="_blank"
                           rel="nofollow noreferrer noopener">
                            Mastodon
                        </a>
                    </li>
                    <li>
                        <a href="https://www.youtube.com/channel/UCoBbei3S9JLTcS2VeEOWDeQ" target="_blank"
                           rel="nofollow noreferrer noopener">
                            YouTube
                        </a>
                    </li>
                </ul>
            </div>
        </div>
    </div>

    <div class="wrap">
        <ul class="grid md:grid-flow-col justify-start  links links-gray opacity-50  text-xs py-4 | md:justify-end md:gap-6 | print:hidden">
            <li><a href="https://spatie.be/privacy">Privacy</a></li>
            <li><a href="https://spatie.be/disclaimer">Disclaimer</a></li>
        </ul>
    </div>
</footer>

<div id="tel" class="modal" onclick="history.back()">
    <div class="m-8 text-center bg-white p-8 z-20 shadow-lg | md:p-16">
        <a href="tel:+3232925679">
            <p class="font-sans-bold whitespace-nowrap" style="font-size: 9vw;">+32 3 292 56 79</p>
        </a>
        <p class="md:absolute left-0 right-0 bottom-0 md:text-lg md:p-8">
                            <span class="text-green links-underline links-green"><a href="tel:+3232925679">Click to call us</a></span>
                    </p>
    </div>
</div>

    
    <script src="/livewire/livewire.min.js?id=44144c23"   data-csrf="psR7KgKedwz4RsuxfTjKJUHzXftmbC1wCwLQqR1F" data-update-uri="/livewire/update" data-navigate-once="true"></script>
        <script>
        document.addEventListener('alpine:init', () => {
            Alpine.store('modals', {
                openModals: [],
                onConfirm: null,
                init() {
                    if (window.location.hash) {
                        this.openModals.push(window.location.hash.replace('#', ''));
                    }
                },
                isOpen(id) {
                    return this.openModals.includes(id);
                },
                open(id) {
                    this.openModals.push(id);
                    window.location.hash = id;
                    Alpine.nextTick(() => {
                        const input = document.querySelector(`#modal-${id} input:not([type=hidden])`);
                        if (input) {
                            input.focus();
                            return;
                        }

                        const button = document.querySelector(`#modal-${id} [data-confirm]`);
                        if (button) button.focus();
                    });
                },
                close(id) {
                    this.openModals = this.openModals.filter(modal => modal !== id);
                    history.pushState('', document.title, window.location.pathname + window.location.search);
                },
            });

            Alpine.data('compose', ({ text, defer = false } = {}) => {
                // Store the editor as a non-reactive instance property
                let editor;

                return {
                    text,

                    init() {
                        if (! defer) {
                            this.load();
                        }
                    },

                    load() {
                        if (editor) {
                            return;
                        }

                        const textarea = this.$el.querySelector('textarea');

                        if (! textarea) {
                            return;
                        }

                        editor = new SimpleMDE({
                            element: textarea,
                            hideIcons: ['heading', 'image', 'preview', 'side-by-side', 'fullscreen', 'guide'],
                            spellChecker: false,
                            status: false,
                        });

                        editor.codemirror.on("change", () => {
                            this.text = editor.value();
                        });
                    },

                    clear() {
                        editor.value('');
                    },
                };
            });
        });
    </script>
    <script defer src="https://unpkg.com/@alpinejs/focus@3.10.5/dist/cdn.min.js"></script>

    <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"LocalBusiness","name":"Spatie","email":"info@spatie.be","telephone":"+32 3 292 56 79","vatID":"BE0809.387.596","url":["https:\/\/spatie.be","https:\/\/twitter.com\/spatie_be"],"image":"https:\/\/spatie.be\/images\/og-image.jpg","address":{"@type":"PostalAddress","addressLocality":"Antwerp","addressRegion":"Antwerp","postalCode":"2060","streetAddress":"Kruikstraat 22 bus 12","addressCountry":"Belgium"},"founders":[{"@type":"Person","name":"Freek Van der Herten","jobTitle":"Backend developer","url":["https:\/\/freek.dev","https:\/\/twitter.com\/freekmurze"]},{"@type":"Person","name":"Jef Van der Voort","jobTitle":"Account manager","url":["https:\/\/twitter.com\/vdv_jef"],"email":"jef@spatie.be"}],"employees":[{"@type":"Person","name":"Alex Vanderbist","jobTitle":"Backend developer","url":["https:\/\/alexvanderbist.com","https:\/\/twitter.com\/alex_"]},{"@type":"Person","name":"Sebastian De Deyne","jobTitle":"Full stack developer","url":["https:\/\/sebastiandedeyne.com","https:\/\/twitter.com\/sebdedeyne"]},{"@type":"Person","name":"Wouter Brouwers","jobTitle":"Project Manager","url":["https:\/\/twitter.com\/brouwerswouter"],"email":"wouter@spatie.be"},{"@type":"Person","name":"Ruben Van Assche","jobTitle":"Backend developer","url":["https:\/\/rubenvanassche.com","https:\/\/twitter.com\/rubenvanassche"]},{"@type":"Person","name":"Rias Van der Veken","jobTitle":"Backend developer","url":["https:\/\/rias.be","https:\/\/twitter.com\/riasvdv"]},{"@type":"Person","name":"Niels Vanpachtenbeke","jobTitle":"Backend developer","url":["https:\/\/vanpachtenbeke.com","https:\/\/twitter.com\/NielsVanpach"]},{"@type":"Person","name":"Tim Van Dijck","jobTitle":"Full stack developer","url":["https:\/\/timvandijck.be","https:\/\/twitter.com\/timvandijck"]},{"@type":"Person","name":"Jimi Robaer","jobTitle":"Designer","url":["https:\/\/twitter.com\/jimirobaer"]},{"@type":"Person","name":"Sébastien Heneau","jobTitle":"Frontend developer","url":["https:\/\/sebastienhenau.com"]}]}</script>

    </body>
</html>
