Index: imaps-frontend/node_modules/postcss/lib/at-rule.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/at-rule.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/at-rule.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -81,16 +81,4 @@
 declare class AtRule_ extends Container {
   /**
-   * The at-rule’s name immediately follows the `@`.
-   *
-   * ```js
-   * const root  = postcss.parse('@media print {}')
-   * const media = root.first
-   * media.name //=> 'media'
-   * ```
-   */
-  get name(): string
-  set name(value: string)
-
-  /**
    * An array containing the layer’s children.
    *
@@ -111,4 +99,27 @@
    */
   nodes: Container['nodes']
+  parent: ContainerWithChildren | undefined
+
+  raws: AtRule.AtRuleRaws
+  type: 'atrule'
+  constructor(defaults?: AtRule.AtRuleProps)
+  assign(overrides: AtRule.AtRuleProps | object): this
+
+  clone(overrides?: Partial<AtRule.AtRuleProps>): this
+
+  cloneAfter(overrides?: Partial<AtRule.AtRuleProps>): this
+
+  cloneBefore(overrides?: Partial<AtRule.AtRuleProps>): this
+  /**
+   * The at-rule’s name immediately follows the `@`.
+   *
+   * ```js
+   * const root  = postcss.parse('@media print {}')
+   * const media = root.first
+   * media.name //=> 'media'
+   * ```
+   */
+  get name(): string
+  set name(value: string)
   /**
    * The at-rule’s parameters, the values that follow the at-rule’s name
@@ -123,15 +134,4 @@
   get params(): string
   set params(value: string)
-  parent: ContainerWithChildren | undefined
-
-  raws: AtRule.AtRuleRaws
-
-  type: 'atrule'
-
-  constructor(defaults?: AtRule.AtRuleProps)
-  assign(overrides: AtRule.AtRuleProps | object): this
-  clone(overrides?: Partial<AtRule.AtRuleProps>): AtRule
-  cloneAfter(overrides?: Partial<AtRule.AtRuleProps>): AtRule
-  cloneBefore(overrides?: Partial<AtRule.AtRuleProps>): AtRule
 }
 
Index: imaps-frontend/node_modules/postcss/lib/comment.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/comment.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/comment.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -49,4 +49,12 @@
   parent: Container | undefined
   raws: Comment.CommentRaws
+  type: 'comment'
+  constructor(defaults?: Comment.CommentProps)
+
+  assign(overrides: Comment.CommentProps | object): this
+
+  clone(overrides?: Partial<Comment.CommentProps>): this
+  cloneAfter(overrides?: Partial<Comment.CommentProps>): this
+  cloneBefore(overrides?: Partial<Comment.CommentProps>): this
   /**
    * The comment's text.
@@ -54,12 +62,4 @@
   get text(): string
   set text(value: string)
-
-  type: 'comment'
-
-  constructor(defaults?: Comment.CommentProps)
-  assign(overrides: Comment.CommentProps | object): this
-  clone(overrides?: Partial<Comment.CommentProps>): Comment
-  cloneAfter(overrides?: Partial<Comment.CommentProps>): Comment
-  cloneBefore(overrides?: Partial<Comment.CommentProps>): Comment
 }
 
Index: imaps-frontend/node_modules/postcss/lib/container.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/container.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/container.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -21,10 +21,23 @@
      * An array of property names.
      */
-    props?: string[]
+    props?: readonly string[]
   }
 
   export interface ContainerProps extends NodeProps {
-    nodes?: (ChildNode | ChildProps)[]
+    nodes?: readonly (ChildProps | Node)[]
   }
+
+  /**
+   * All types that can be passed into container methods to create or add a new
+   * child node.
+   */
+  export type NewChild =
+    | ChildProps
+    | Node
+    | readonly ChildProps[]
+    | readonly Node[]
+    | readonly string[]
+    | string
+    | undefined
 
   // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -53,4 +66,24 @@
 
   /**
+   * An internal method that converts a {@link NewChild} into a list of actual
+   * child nodes that can then be added to this container.
+   *
+   * This ensures that the nodes' parent is set to this container, that they use
+   * the correct prototype chain, and that they're marked as dirty.
+   *
+   * @param mnodes The new node or nodes to add.
+   * @param sample A node from whose raws the new node's `before` raw should be
+   *               taken.
+   * @param type   This should be set to `'prepend'` if the new nodes will be
+   *               inserted at the beginning of the container.
+   * @hidden
+   */
+  protected normalize(
+    nodes: Container.NewChild,
+    sample: Node | undefined,
+    type?: 'prepend' | false
+  ): Child[]
+
+  /**
    * Inserts new nodes to the end of the container.
    *
@@ -72,20 +105,10 @@
    * @return This node for methods chain.
    */
-  append(
-    ...nodes: (
-      | ChildProps
-      | ChildProps[]
-      | Node
-      | Node[]
-      | string
-      | string[]
-      | undefined
-    )[]
-  ): this
-
+  append(...nodes: Container.NewChild[]): this
   assign(overrides: Container.ContainerProps | object): this
-  clone(overrides?: Partial<Container.ContainerProps>): Container<Child>
-  cloneAfter(overrides?: Partial<Container.ContainerProps>): Container<Child>
-  cloneBefore(overrides?: Partial<Container.ContainerProps>): Container<Child>
+  clone(overrides?: Partial<Container.ContainerProps>): this
+  cloneAfter(overrides?: Partial<Container.ContainerProps>): this
+
+  cloneBefore(overrides?: Partial<Container.ContainerProps>): this
 
   /**
@@ -125,5 +148,4 @@
     callback: (node: Child, index: number) => false | void
   ): false | undefined
-
   /**
    * Returns `true` if callback returns `true`
@@ -140,4 +162,5 @@
     condition: (node: Child, index: number, nodes: Child[]) => boolean
   ): boolean
+
   /**
    * Returns a `child`’s index within the `Container#nodes` array.
@@ -151,5 +174,4 @@
    */
   index(child: Child | number): number
-
   /**
    * Insert new node after old node within the container.
@@ -159,15 +181,6 @@
    * @return This node for methods chain.
    */
-  insertAfter(
-    oldNode: Child | number,
-    newNode:
-      | Child
-      | Child[]
-      | ChildProps
-      | ChildProps[]
-      | string
-      | string[]
-      | undefined
-  ): this
+  insertAfter(oldNode: Child | number, newNode: Container.NewChild): this
+
   /**
    * Insert new node before old node within the container.
@@ -181,15 +194,5 @@
    * @return This node for methods chain.
    */
-  insertBefore(
-    oldNode: Child | number,
-    newNode:
-      | Child
-      | Child[]
-      | ChildProps
-      | ChildProps[]
-      | string
-      | string[]
-      | undefined
-  ): this
+  insertBefore(oldNode: Child | number, newNode: Container.NewChild): this
 
   /**
@@ -230,15 +233,5 @@
    * @return This node for methods chain.
    */
-  prepend(
-    ...nodes: (
-      | ChildProps
-      | ChildProps[]
-      | Node
-      | Node[]
-      | string
-      | string[]
-      | undefined
-    )[]
-  ): this
+  prepend(...nodes: Container.NewChild[]): this
   /**
    * Add child to the end of the node.
@@ -302,6 +295,6 @@
    *
    * @param pattern      Replace pattern.
-   * @param {object} opts                Options to speed up the search.
-   * @param callback   String to replace pattern or callback
+   * @param {object} options             Options to speed up the search.
+   * @param replaced   String to replace pattern or callback
    *                                     that returns a new value. The callback
    *                                     will receive the same arguments
Index: imaps-frontend/node_modules/postcss/lib/container.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/container.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/container.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,10 +1,10 @@
 'use strict'
 
+let Comment = require('./comment')
+let Declaration = require('./declaration')
+let Node = require('./node')
 let { isClean, my } = require('./symbols')
-let Declaration = require('./declaration')
-let Comment = require('./comment')
-let Node = require('./node')
-
-let parse, Rule, AtRule, Root
+
+let AtRule, parse, Root, Rule
 
 function cleanSource(nodes) {
@@ -199,5 +199,5 @@
       }
       nodes = [new Declaration(nodes)]
-    } else if (nodes.selector) {
+    } else if (nodes.selector || nodes.selectors) {
       nodes = [new Rule(nodes)]
     } else if (nodes.name) {
@@ -215,4 +215,6 @@
       if (i.parent) i.parent.removeChild(i)
       if (i[isClean]) markTreeDirty(i)
+
+      if (!i.raws) i.raws = {}
       if (typeof i.raws.before === 'undefined') {
         if (sample && typeof sample.raws.before !== 'undefined') {
Index: imaps-frontend/node_modules/postcss/lib/css-syntax-error.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/css-syntax-error.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/css-syntax-error.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -53,6 +53,15 @@
     let css = this.source
     if (color == null) color = pico.isColorSupported
-    if (terminalHighlight) {
-      if (color) css = terminalHighlight(css)
+
+    let aside = text => text
+    let mark = text => text
+    let highlight = text => text
+    if (color) {
+      let { bold, gray, red } = pico.createColors(true)
+      mark = text => bold(red(text))
+      aside = text => gray(text)
+      if (terminalHighlight) {
+        highlight = text => terminalHighlight(text)
+      }
     }
 
@@ -60,15 +69,5 @@
     let start = Math.max(this.line - 3, 0)
     let end = Math.min(this.line + 2, lines.length)
-
     let maxWidth = String(end).length
-
-    let mark, aside
-    if (color) {
-      let { bold, gray, red } = pico.createColors(true)
-      mark = text => bold(red(text))
-      aside = text => gray(text)
-    } else {
-      mark = aside = str => str
-    }
 
     return lines
@@ -78,10 +77,44 @@
         let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '
         if (number === this.line) {
+          if (line.length > 160) {
+            let padding = 20
+            let subLineStart = Math.max(0, this.column - padding)
+            let subLineEnd = Math.max(
+              this.column + padding,
+              this.endColumn + padding
+            )
+            let subLine = line.slice(subLineStart, subLineEnd)
+
+            let spacing =
+              aside(gutter.replace(/\d/g, ' ')) +
+              line
+                .slice(0, Math.min(this.column - 1, padding - 1))
+                .replace(/[^\t]/g, ' ')
+
+            return (
+              mark('>') +
+              aside(gutter) +
+              highlight(subLine) +
+              '\n ' +
+              spacing +
+              mark('^')
+            )
+          }
+
           let spacing =
             aside(gutter.replace(/\d/g, ' ')) +
             line.slice(0, this.column - 1).replace(/[^\t]/g, ' ')
-          return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^')
+
+          return (
+            mark('>') +
+            aside(gutter) +
+            highlight(line) +
+            '\n ' +
+            spacing +
+            mark('^')
+          )
         }
-        return ' ' + aside(gutter) + line
+
+        return ' ' + aside(gutter) + highlight(line)
       })
       .join('\n')
Index: imaps-frontend/node_modules/postcss/lib/declaration.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/declaration.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/declaration.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -64,4 +64,17 @@
  */
 declare class Declaration_ extends Node {
+  parent: ContainerWithChildren | undefined
+  raws: Declaration.DeclarationRaws
+
+  type: 'decl'
+
+  constructor(defaults?: Declaration.DeclarationProps)
+  assign(overrides: Declaration.DeclarationProps | object): this
+
+  clone(overrides?: Partial<Declaration.DeclarationProps>): this
+
+  cloneAfter(overrides?: Partial<Declaration.DeclarationProps>): this
+
+  cloneBefore(overrides?: Partial<Declaration.DeclarationProps>): this
   /**
    * It represents a specificity of the declaration.
@@ -79,8 +92,6 @@
    */
   get important(): boolean
+
   set important(value: boolean)
-
-  parent: ContainerWithChildren | undefined
-
   /**
    * The property name for a CSS declaration.
@@ -94,10 +105,6 @@
    */
   get prop(): string
+
   set prop(value: string)
-
-  raws: Declaration.DeclarationRaws
-
-  type: 'decl'
-
   /**
    * The property value for a CSS declaration.
@@ -119,5 +126,4 @@
   get value(): string
   set value(value: string)
-
   /**
    * It represents a getter that returns `true` if a declaration starts with
@@ -139,11 +145,4 @@
    */
   get variable(): boolean
-  set varaible(value: string)
-
-  constructor(defaults?: Declaration.DeclarationProps)
-  assign(overrides: Declaration.DeclarationProps | object): this
-  clone(overrides?: Partial<Declaration.DeclarationProps>): Declaration
-  cloneAfter(overrides?: Partial<Declaration.DeclarationProps>): Declaration
-  cloneBefore(overrides?: Partial<Declaration.DeclarationProps>): Declaration
 }
 
Index: imaps-frontend/node_modules/postcss/lib/document.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/document.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/document.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -6,5 +6,5 @@
 declare namespace Document {
   export interface DocumentProps extends ContainerProps {
-    nodes?: Root[]
+    nodes?: readonly Root[]
 
     /**
@@ -43,7 +43,7 @@
 
   assign(overrides: Document.DocumentProps | object): this
-  clone(overrides?: Partial<Document.DocumentProps>): Document
-  cloneAfter(overrides?: Partial<Document.DocumentProps>): Document
-  cloneBefore(overrides?: Partial<Document.DocumentProps>): Document
+  clone(overrides?: Partial<Document.DocumentProps>): this
+  cloneAfter(overrides?: Partial<Document.DocumentProps>): this
+  cloneBefore(overrides?: Partial<Document.DocumentProps>): this
 
   /**
Index: imaps-frontend/node_modules/postcss/lib/fromJSON.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/fromJSON.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/fromJSON.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,9 +1,9 @@
 'use strict'
 
+let AtRule = require('./at-rule')
+let Comment = require('./comment')
 let Declaration = require('./declaration')
+let Input = require('./input')
 let PreviousMap = require('./previous-map')
-let Comment = require('./comment')
-let AtRule = require('./at-rule')
-let Input = require('./input')
 let Root = require('./root')
 let Rule = require('./rule')
Index: imaps-frontend/node_modules/postcss/lib/input.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/input.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/input.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -175,4 +175,7 @@
     endColumn?: number
   ): false | Input.FilePosition
+  /** Converts this to a JSON-friendly object representation. */
+  toJSON(): object
+
   /**
    * The CSS source identifier. Contains `Input#file` if the user
Index: imaps-frontend/node_modules/postcss/lib/input.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/input.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/input.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,12 +1,12 @@
 'use strict'
 
+let { nanoid } = require('nanoid/non-secure')
+let { isAbsolute, resolve } = require('path')
 let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
 let { fileURLToPath, pathToFileURL } = require('url')
-let { isAbsolute, resolve } = require('path')
-let { nanoid } = require('nanoid/non-secure')
-
-let terminalHighlight = require('./terminal-highlight')
+
 let CssSyntaxError = require('./css-syntax-error')
 let PreviousMap = require('./previous-map')
+let terminalHighlight = require('./terminal-highlight')
 
 let fromOffsetCache = Symbol('fromOffsetCache')
@@ -62,5 +62,5 @@
 
   error(message, line, column, opts = {}) {
-    let result, endLine, endColumn
+    let endColumn, endLine, result
 
     if (line && typeof line === 'object') {
Index: imaps-frontend/node_modules/postcss/lib/lazy-result.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/lazy-result.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/lazy-result.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,13 +1,13 @@
 'use strict'
 
-let { isClean, my } = require('./symbols')
-let MapGenerator = require('./map-generator')
-let stringify = require('./stringify')
 let Container = require('./container')
 let Document = require('./document')
+let MapGenerator = require('./map-generator')
+let parse = require('./parse')
+let Result = require('./result')
+let Root = require('./root')
+let stringify = require('./stringify')
+let { isClean, my } = require('./symbols')
 let warnOnce = require('./warn-once')
-let Result = require('./result')
-let parse = require('./parse')
-let Root = require('./root')
 
 const TYPE_TO_CLASS_NAME = {
Index: imaps-frontend/node_modules/postcss/lib/list.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/list.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/list.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -48,9 +48,12 @@
      * @return Split values.
      */
-    split(string: string, separators: string[], last: boolean): string[]
+    split(
+      string: string,
+      separators: readonly string[],
+      last: boolean
+    ): string[]
   }
 }
 
-// eslint-disable-next-line @typescript-eslint/no-redeclare
 declare const list: list.List
 
Index: imaps-frontend/node_modules/postcss/lib/map-generator.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/map-generator.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/map-generator.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,6 +1,6 @@
 'use strict'
 
+let { dirname, relative, resolve, sep } = require('path')
 let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
-let { dirname, relative, resolve, sep } = require('path')
 let { pathToFileURL } = require('url')
 
@@ -71,10 +71,10 @@
         node = this.root.nodes[i]
         if (node.type !== 'comment') continue
-        if (node.text.indexOf('# sourceMappingURL=') === 0) {
+        if (node.text.startsWith('# sourceMappingURL=')) {
           this.root.removeChild(i)
         }
       }
     } else if (this.css) {
-      this.css = this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm, '')
+      this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, '')
     }
   }
@@ -144,5 +144,5 @@
     }
 
-    let lines, last
+    let last, lines
     this.stringify(this.root, (str, node, type) => {
       this.css += str
Index: imaps-frontend/node_modules/postcss/lib/no-work-result.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/no-work-result.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/no-work-result.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -2,8 +2,8 @@
 
 let MapGenerator = require('./map-generator')
+let parse = require('./parse')
+const Result = require('./result')
 let stringify = require('./stringify')
 let warnOnce = require('./warn-once')
-let parse = require('./parse')
-const Result = require('./result')
 
 class NoWorkResult {
Index: imaps-frontend/node_modules/postcss/lib/node.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/node.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/node.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -3,5 +3,5 @@
 import { AtRuleProps } from './at-rule.js'
 import Comment, { CommentProps } from './comment.js'
-import Container from './container.js'
+import Container, { NewChild } from './container.js'
 import CssSyntaxError from './css-syntax-error.js'
 import Declaration, { DeclarationProps } from './declaration.js'
@@ -236,4 +236,12 @@
 
   /**
+   * If this node isn't already dirty, marks it and its ancestors as such. This
+   * indicates to the LazyResult processor that the {@link Root} has been
+   * modified by the current plugin and may need to be processed again by other
+   * plugins.
+   */
+  protected markDirty(): void
+
+  /**
    * Insert new node after current node to current node’s parent.
    *
@@ -247,5 +255,7 @@
    * @return This node for methods chain.
    */
-  after(newNode: Node | Node.ChildProps | Node[] | string | undefined): this
+  after(
+    newNode: Node | Node.ChildProps | readonly Node[] | string | undefined
+  ): this
 
   /**
@@ -274,5 +284,7 @@
    * @return This node for methods chain.
    */
-  before(newNode: Node | Node.ChildProps | Node[] | string | undefined): this
+  before(
+    newNode: Node | Node.ChildProps | readonly Node[] | string | undefined
+  ): this
 
   /**
@@ -304,5 +316,5 @@
    * @return Duplicate of the node instance.
    */
-  clone(overrides?: object): Node
+  clone(overrides?: object): this
 
   /**
@@ -313,5 +325,5 @@
    * @return New node.
    */
-  cloneAfter(overrides?: object): Node
+  cloneAfter(overrides?: object): this
 
   /**
@@ -327,5 +339,5 @@
    * @return New node
    */
-  cloneBefore(overrides?: object): Node
+  cloneBefore(overrides?: object): this
 
   /**
@@ -471,12 +483,5 @@
    * @return Current node to methods chain.
    */
-  replaceWith(
-    ...nodes: (
-      | Node.ChildNode
-      | Node.ChildNode[]
-      | Node.ChildProps
-      | Node.ChildProps[]
-    )[]
-  ): this
+  replaceWith(...nodes: NewChild[]): this
 
   /**
Index: imaps-frontend/node_modules/postcss/lib/node.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/node.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/node.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,8 +1,8 @@
 'use strict'
 
-let { isClean, my } = require('./symbols')
 let CssSyntaxError = require('./css-syntax-error')
 let Stringifier = require('./stringifier')
 let stringify = require('./stringify')
+let { isClean, my } = require('./symbols')
 
 function cloneNode(obj, parent) {
@@ -31,4 +31,34 @@
 
   return cloned
+}
+
+function sourceOffset(inputCSS, position) {
+  // Not all custom syntaxes support `offset` in `source.start` and `source.end`
+  if (
+    position &&
+    typeof position.offset !== 'undefined'
+  ) {
+    return position.offset;
+  }
+
+  let column = 1
+  let line = 1
+  let offset = 0
+
+  for (let i = 0; i < inputCSS.length; i++) {
+    if (line === position.line && column === position.column) {
+      offset = i
+      break
+    }
+
+    if (inputCSS[i] === '\n') {
+      column = 1
+      line += 1
+    } else {
+      column += 1
+    }
+  }
+
+  return offset
 }
 
@@ -154,4 +184,9 @@
   }
 
+  /* c8 ignore next 3 */
+  markClean() {
+    this[isClean] = true
+  }
+
   markDirty() {
     if (this[isClean]) {
@@ -170,23 +205,27 @@
   }
 
-  positionBy(opts, stringRepresentation) {
+  positionBy(opts) {
     let pos = this.source.start
     if (opts.index) {
-      pos = this.positionInside(opts.index, stringRepresentation)
+      pos = this.positionInside(opts.index)
     } else if (opts.word) {
-      stringRepresentation = this.toString()
+      let stringRepresentation = this.source.input.css.slice(
+        sourceOffset(this.source.input.css, this.source.start),
+        sourceOffset(this.source.input.css, this.source.end)
+      )
       let index = stringRepresentation.indexOf(opts.word)
-      if (index !== -1) pos = this.positionInside(index, stringRepresentation)
+      if (index !== -1) pos = this.positionInside(index)
     }
     return pos
   }
 
-  positionInside(index, stringRepresentation) {
-    let string = stringRepresentation || this.toString()
+  positionInside(index) {
     let column = this.source.start.column
     let line = this.source.start.line
-
-    for (let i = 0; i < index; i++) {
-      if (string[i] === '\n') {
+    let offset = sourceOffset(this.source.input.css, this.source.start)
+    let end = offset + index
+
+    for (let i = offset; i < end; i++) {
+      if (this.source.input.css[i] === '\n') {
         column = 1
         line += 1
@@ -212,18 +251,23 @@
     let end = this.source.end
       ? {
-        column: this.source.end.column + 1,
-        line: this.source.end.line
-      }
+          column: this.source.end.column + 1,
+          line: this.source.end.line
+        }
       : {
-        column: start.column + 1,
-        line: start.line
-      }
+          column: start.column + 1,
+          line: start.line
+        }
 
     if (opts.word) {
-      let stringRepresentation = this.toString()
+      let stringRepresentation = this.source.input.css.slice(
+        sourceOffset(this.source.input.css, this.source.start),
+        sourceOffset(this.source.input.css, this.source.end)
+      )
       let index = stringRepresentation.indexOf(opts.word)
       if (index !== -1) {
-        start = this.positionInside(index, stringRepresentation)
-        end = this.positionInside(index + opts.word.length, stringRepresentation)
+        start = this.positionInside(index)
+        end = this.positionInside(
+          index + opts.word.length,
+        )
       }
     } else {
Index: imaps-frontend/node_modules/postcss/lib/parse.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/parse.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/parse.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -2,6 +2,6 @@
 
 let Container = require('./container')
+let Input = require('./input')
 let Parser = require('./parser')
-let Input = require('./input')
 
 function parse(css, opts) {
Index: imaps-frontend/node_modules/postcss/lib/parser.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/parser.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/parser.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,10 +1,10 @@
 'use strict'
 
+let AtRule = require('./at-rule')
+let Comment = require('./comment')
 let Declaration = require('./declaration')
-let tokenizer = require('./tokenize')
-let Comment = require('./comment')
-let AtRule = require('./at-rule')
 let Root = require('./root')
 let Rule = require('./rule')
+let tokenizer = require('./tokenize')
 
 const SAFE_COMMENT_NEIGHBOR = {
@@ -144,5 +144,5 @@
   colon(tokens) {
     let brackets = 0
-    let token, type, prev
+    let prev, token, type
     for (let [i, element] of tokens.entries()) {
       token = element
@@ -268,10 +268,10 @@
         for (let j = i; j > 0; j--) {
           let type = cache[j][0]
-          if (str.trim().indexOf('!') === 0 && type !== 'space') {
+          if (str.trim().startsWith('!') && type !== 'space') {
             break
           }
           str = cache.pop()[1] + str
         }
-        if (str.trim().indexOf('!') === 0) {
+        if (str.trim().startsWith('!')) {
           node.important = true
           node.raws.important = str
Index: imaps-frontend/node_modules/postcss/lib/postcss.d.mts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/postcss.d.mts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/postcss.d.mts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -10,5 +10,4 @@
   parse,
   list,
-
   document,
   comment,
@@ -17,5 +16,4 @@
   decl,
   root,
-
   CssSyntaxError,
   Declaration,
@@ -68,5 +66,4 @@
 
   // This is a class, but it’s not re-exported. That’s why it’s exported as type-only here.
-  type LazyResult,
-
+  type LazyResult
 } from './postcss.js'
Index: imaps-frontend/node_modules/postcss/lib/postcss.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/postcss.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/postcss.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -3,5 +3,5 @@
 import AtRule, { AtRuleProps } from './at-rule.js'
 import Comment, { CommentProps } from './comment.js'
-import Container, { ContainerProps } from './container.js'
+import Container, { ContainerProps, NewChild } from './container.js'
 import CssSyntaxError from './css-syntax-error.js'
 import Declaration, { DeclarationProps } from './declaration.js'
@@ -29,11 +29,20 @@
   helper: postcss.Helpers
 ) => Promise<void> | void
-type RootProcessor = (root: Root, helper: postcss.Helpers) => Promise<void> | void
+type RootProcessor = (
+  root: Root,
+  helper: postcss.Helpers
+) => Promise<void> | void
 type DeclarationProcessor = (
   decl: Declaration,
   helper: postcss.Helpers
 ) => Promise<void> | void
-type RuleProcessor = (rule: Rule, helper: postcss.Helpers) => Promise<void> | void
-type AtRuleProcessor = (atRule: AtRule, helper: postcss.Helpers) => Promise<void> | void
+type RuleProcessor = (
+  rule: Rule,
+  helper: postcss.Helpers
+) => Promise<void> | void
+type AtRuleProcessor = (
+  atRule: AtRule,
+  helper: postcss.Helpers
+) => Promise<void> | void
 type CommentProcessor = (
   comment: Comment,
@@ -162,4 +171,5 @@
     list,
     Message,
+    NewChild,
     Node,
     NodeErrorOptions,
@@ -177,7 +187,7 @@
   }
 
-  export type SourceMap = SourceMapGenerator & {
+  export type SourceMap = {
     toJSON(): RawSourceMap
-  }
+  } & SourceMapGenerator
 
   export type Helpers = { postcss: Postcss; result: Result } & Postcss
@@ -436,5 +446,7 @@
  * @return Processor to process multiple CSS.
  */
-declare function postcss(plugins?: postcss.AcceptedPlugin[]): Processor
+declare function postcss(
+  plugins?: readonly postcss.AcceptedPlugin[]
+): Processor
 declare function postcss(...plugins: postcss.AcceptedPlugin[]): Processor
 
Index: imaps-frontend/node_modules/postcss/lib/postcss.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/postcss.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/postcss.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,22 +1,22 @@
 'use strict'
 
+let AtRule = require('./at-rule')
+let Comment = require('./comment')
+let Container = require('./container')
 let CssSyntaxError = require('./css-syntax-error')
 let Declaration = require('./declaration')
+let Document = require('./document')
+let fromJSON = require('./fromJSON')
+let Input = require('./input')
 let LazyResult = require('./lazy-result')
-let Container = require('./container')
+let list = require('./list')
+let Node = require('./node')
+let parse = require('./parse')
 let Processor = require('./processor')
+let Result = require('./result.js')
+let Root = require('./root')
+let Rule = require('./rule')
 let stringify = require('./stringify')
-let fromJSON = require('./fromJSON')
-let Document = require('./document')
 let Warning = require('./warning')
-let Comment = require('./comment')
-let AtRule = require('./at-rule')
-let Result = require('./result.js')
-let Input = require('./input')
-let parse = require('./parse')
-let list = require('./list')
-let Rule = require('./rule')
-let Root = require('./root')
-let Node = require('./node')
 
 function postcss(...plugins) {
Index: imaps-frontend/node_modules/postcss/lib/previous-map.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/previous-map.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/previous-map.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,7 +1,7 @@
 'use strict'
 
-let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
 let { existsSync, readFileSync } = require('fs')
 let { dirname, join } = require('path')
+let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
 
 function fromBase64(str) {
@@ -42,10 +42,12 @@
     let uri = /^data:application\/json,/
 
-    if (charsetUri.test(text) || uri.test(text)) {
-      return decodeURIComponent(text.substr(RegExp.lastMatch.length))
+    let uriMatch = text.match(charsetUri) || text.match(uri)
+    if (uriMatch) {
+      return decodeURIComponent(text.substr(uriMatch[0].length))
     }
 
-    if (baseCharsetUri.test(text) || baseUri.test(text)) {
-      return fromBase64(text.substr(RegExp.lastMatch.length))
+    let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri)
+    if (baseUriMatch) {
+      return fromBase64(text.substr(baseUriMatch[0].length))
     }
 
@@ -68,5 +70,5 @@
 
   loadAnnotation(css) {
-    let comments = css.match(/\/\*\s*# sourceMappingURL=/gm)
+    let comments = css.match(/\/\*\s*# sourceMappingURL=/g)
     if (!comments) return
 
Index: imaps-frontend/node_modules/postcss/lib/processor.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/processor.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/processor.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -52,5 +52,5 @@
    * @param plugins PostCSS plugins
    */
-  constructor(plugins?: AcceptedPlugin[])
+  constructor(plugins?: readonly AcceptedPlugin[])
 
   /**
Index: imaps-frontend/node_modules/postcss/lib/processor.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/processor.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/processor.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,12 +1,12 @@
 'use strict'
 
+let Document = require('./document')
+let LazyResult = require('./lazy-result')
 let NoWorkResult = require('./no-work-result')
-let LazyResult = require('./lazy-result')
-let Document = require('./document')
 let Root = require('./root')
 
 class Processor {
   constructor(plugins = []) {
-    this.version = '8.4.40'
+    this.version = '8.4.49'
     this.plugins = this.normalize(plugins)
   }
Index: imaps-frontend/node_modules/postcss/lib/result.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/result.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/result.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -39,5 +39,4 @@
     plugin?: string
   }
-
 
   // eslint-disable-next-line @typescript-eslint/no-use-before-define
Index: imaps-frontend/node_modules/postcss/lib/root.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/root.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/root.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -63,7 +63,7 @@
 
   assign(overrides: object | Root.RootProps): this
-  clone(overrides?: Partial<Root.RootProps>): Root
-  cloneAfter(overrides?: Partial<Root.RootProps>): Root
-  cloneBefore(overrides?: Partial<Root.RootProps>): Root
+  clone(overrides?: Partial<Root.RootProps>): this
+  cloneAfter(overrides?: Partial<Root.RootProps>): this
+  cloneBefore(overrides?: Partial<Root.RootProps>): this
 
   /**
@@ -77,5 +77,5 @@
    * ```
    *
-   * @param opts Options.
+   * @param options Options.
    * @return Result with current root’s CSS.
    */
Index: imaps-frontend/node_modules/postcss/lib/rule.d.ts
===================================================================
--- imaps-frontend/node_modules/postcss/lib/rule.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/rule.d.ts	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -41,12 +41,19 @@
   }
 
-  export interface RuleProps extends ContainerProps {
+  export type RuleProps = {
     /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
     raws?: RuleRaws
-    /** Selector or selectors of the rule. */
-    selector?: string
-    /** Selectors of the rule represented as an array of strings. */
-    selectors?: string[]
-  }
+  } & (
+      | {
+          /** Selector or selectors of the rule. */
+          selector: string
+          selectors?: never
+        }
+      | {
+          selector?: never
+          /** Selectors of the rule represented as an array of strings. */
+          selectors: readonly string[]
+        }
+    ) & ContainerProps
 
   // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -76,4 +83,13 @@
   parent: ContainerWithChildren | undefined
   raws: Rule.RuleRaws
+  type: 'rule'
+  constructor(defaults?: Rule.RuleProps)
+
+  assign(overrides: object | Rule.RuleProps): this
+  clone(overrides?: Partial<Rule.RuleProps>): this
+
+  cloneAfter(overrides?: Partial<Rule.RuleProps>): this
+
+  cloneBefore(overrides?: Partial<Rule.RuleProps>): this
   /**
    * The rule’s full selector represented as a string.
@@ -86,6 +102,5 @@
    */
   get selector(): string
-  set selector(value: string);
-
+  set selector(value: string)
   /**
    * An array containing the rule’s individual selectors.
@@ -104,13 +119,5 @@
    */
   get selectors(): string[]
-  set selectors(values: string[]);
-
-  type: 'rule'
-
-  constructor(defaults?: Rule.RuleProps)
-  assign(overrides: object | Rule.RuleProps): this
-  clone(overrides?: Partial<Rule.RuleProps>): Rule
-  cloneAfter(overrides?: Partial<Rule.RuleProps>): Rule
-  cloneBefore(overrides?: Partial<Rule.RuleProps>): Rule
+  set selectors(values: string[])
 }
 
Index: imaps-frontend/node_modules/postcss/lib/tokenize.js
===================================================================
--- imaps-frontend/node_modules/postcss/lib/tokenize.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/lib/tokenize.js	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -30,6 +30,6 @@
   let ignore = options.ignoreErrors
 
-  let code, next, quote, content, escape
-  let escaped, escapePos, prev, n, currentToken
+  let code, content, escape, next, quote
+  let currentToken, escaped, escapePos, n, prev
 
   let length = css.length
Index: imaps-frontend/node_modules/postcss/package.json
===================================================================
--- imaps-frontend/node_modules/postcss/package.json	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
+++ imaps-frontend/node_modules/postcss/package.json	(revision 0c6b92add4cfaedcb91bcd37b45849f142f7d152)
@@ -1,5 +1,5 @@
 {
   "name": "postcss",
-  "version": "8.4.40",
+  "version": "8.4.49",
   "description": "Tool for transforming styles with JS plugins",
   "engines": {
@@ -76,6 +76,6 @@
   "dependencies": {
     "nanoid": "^3.3.7",
-    "picocolors": "^1.0.1",
-    "source-map-js": "^1.2.0"
+    "picocolors": "^1.1.1",
+    "source-map-js": "^1.2.1"
   },
   "browser": {
