Improves compact output for @page at-rule

Also adds test cases to verify compact output of other at-rules is optimal.
diff --git a/lib/src/css_printer.dart b/lib/src/css_printer.dart
index c434caf..c2f0af0 100644
--- a/lib/src/css_printer.dart
+++ b/lib/src/css_printer.dart
@@ -170,7 +170,7 @@
 
     var declsMargin = node._declsMargin;
     var declsMarginLength = declsMargin.length;
-    emit(' {$_newLine');
+    emit('$_sp{$_newLine');
     for (var i = 0; i < declsMarginLength; i++) {
       declsMargin[i].visit(this);
     }
@@ -303,7 +303,7 @@
     var margin_sym_name =
         TokenKind.idToValue(TokenKind.MARGIN_DIRECTIVES, node.margin_sym);
 
-    emit("@$margin_sym_name {$_newLine");
+    emit("@$margin_sym_name$_sp{$_newLine");
 
     visitDeclarationGroup(node);
 
diff --git a/test/declaration_test.dart b/test/declaration_test.dart
index 56473cc..220e816 100644
--- a/test/declaration_test.dart
+++ b/test/declaration_test.dart
@@ -857,10 +857,32 @@
 .foo p[bar] {
   color: blue;
 }
+@page {
+  @top-left {
+    color: red;
+  }
+}
+@page : first{}
+@page foo : first {}
+@media screen AND (max-width: 800px) {
+  div {
+    font-size: 24px;
+  }
+}
+@keyframes foo {
+  0% {
+    transform: scaleX(0);
+  }
+}
 ''';
   final String generated =
       'div{color:green!important;background:red blue green;}'
-      '.foo p[bar]{color:blue;}';
+      '.foo p[bar]{color:blue;}'
+      '@page{@top-left{color:red;}}'
+      '@page:first{}'
+      '@page foo:first{}'
+      '@media screen AND (max-width:800px){div{font-size:24px;}}'
+      '@keyframes foo{0%{transform:scaleX(0);}}';
 
   var stylesheet = parseCss(input, errors: errors);