diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for shakespeare
 
+### 2.0.26
+
+* Support `@supports` [#263](https://github.com/yesodweb/shakespeare/pull/263)
+
 ### 2.0.25.1
 
 * Support for GHC 9.2 and aeson 2 [#260](https://github.com/yesodweb/shakespeare/pull/260)
diff --git a/Text/Lucius.hs b/Text/Lucius.hs
--- a/Text/Lucius.hs
+++ b/Text/Lucius.hs
@@ -238,7 +238,7 @@
             ignore = many (whiteSpace1 <|> string' "<!--" <|> string' "-->")
                         >> return ()
         ignore
-        tl <- ((charset <|> media <|> impor <|> topAtBlock <|> var <|> fmap TopBlock parseBlock) >>= \x -> go (front . (:) x))
+        tl <- ((charset <|> media <|> impor <|> supports <|> topAtBlock <|> var <|> fmap TopBlock parseBlock) >>= \x -> go (front . (:) x))
             <|> (return $ map compressTopLevel $ front [])
         ignore
         return tl
@@ -258,6 +258,12 @@
         val <- parseContents ";"
         _ <- char ';'
         return $ TopAtDecl "import" val
+    supports = do
+        try $ stringCI "@supports "
+        selector <- parseContents "{"
+        _ <- char '{'
+        b <- parseBlocks id
+        return $ TopAtBlock "supports" selector b
     var = try $ do
         _ <- char '@'
         isPage <- (try $ string "page " >> return True) <|>
diff --git a/shakespeare.cabal b/shakespeare.cabal
--- a/shakespeare.cabal
+++ b/shakespeare.cabal
@@ -1,5 +1,5 @@
 name:            shakespeare
-version:         2.0.25.1
+version:         2.0.26
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
diff --git a/test/Text/CssSpec.hs b/test/Text/CssSpec.hs
--- a/test/Text/CssSpec.hs
+++ b/test/Text/CssSpec.hs
@@ -288,6 +288,17 @@
         }
         |]
 
+    it "lucius supports" $ do
+      celper "@supports only screen{hana dul{set:net}}" $(luciusFile "test/cassiuses/external-supports.lucius")
+      celper "@supports only screen {\n    hana dul {\n        set: net;\n    }\n}\n" $(luciusFileDebug "test/cassiuses/external-supports.lucius")
+      celper "@supports only screen    {hana,dul{set:net;dasut:yeosut}}" [lucius|
+        @supports only screen    {
+            hana, dul {
+                set: net;
+                dasut: yeosut;
+            }
+        }
+        |]
 
     {-
     it "cassius removes whitespace" $ do
@@ -366,6 +377,21 @@
         celper "@media (max-width: 400px){foo{color:red}}" [lucius|
 @mobileWidth: 400px;
 @media (max-width: #{mobileWidth}){ foo { color: red; } }
+|]
+    -- note: this file format is window (CR;NL)
+    it "variables in supports selector" $
+        celper "@supports ((perspective: 1px)\r\n           and (not (-webkit-overflow-scrolling: touch))) {html,body{overflow:hidden;height:100%}body{transform:translateZ(0px)}}" [lucius|
+@perspectiveTestValue: 1px;
+@supports ((perspective: #{perspectiveTestValue})
+           and (not (-webkit-overflow-scrolling: touch))) {
+    html, body {
+        overflow: hidden;
+        height:100%;
+    }
+    body {
+        transform: translateZ(0px);
+    }
+}
 |]
     it "URLs in import" $ celper
         "@import url(\"suburl\");" [lucius|
diff --git a/test/cassiuses/external-supports.lucius b/test/cassiuses/external-supports.lucius
new file mode 100644
--- /dev/null
+++ b/test/cassiuses/external-supports.lucius
@@ -0,0 +1,7 @@
+@supports only screen{
+    hana {
+        dul {
+            set: net;
+        }
+    }
+}
