Bug 1489962 - Add snippets targeting, Pocket tagging and bug fixes to Activity Stream r=Mardak
authorUrsula Sarracini <ursulasarracini@gmail.com>
Thu, 20 Sep 2018 18:36:20 +0000
changeset 495922 581019e9ea70485b36554cf7fef0a9cb47fde50d
parent 495921 948e96f2b7d98208739ba6c8b3120d18ba0f5fa5
child 495923 ce05cf6d5e1990c93c5c0220ea9354b4b646786f
push id1864
push userffxbld-merge
push dateMon, 03 Dec 2018 15:51:40 +0000
treeherdermozilla-release@f040763d99ad [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMardak
bugs1489962
milestone64.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1489962 - Add snippets targeting, Pocket tagging and bug fixes to Activity Stream r=Mardak Differential Revision: https://phabricator.services.mozilla.com/D5914
browser/components/newtab/.eslintrc.js
browser/components/newtab/.travis.yml
browser/components/newtab/aboutNewTabService.js
browser/components/newtab/bin/locales.js
browser/components/newtab/bin/render-activity-stream-html.js
browser/components/newtab/bin/test-merges.js
browser/components/newtab/common/Actions.jsm
browser/components/newtab/common/PerfService.jsm
browser/components/newtab/common/PrerenderData.jsm
browser/components/newtab/common/Reducers.jsm
browser/components/newtab/content-src/activity-stream-prerender.jsx
browser/components/newtab/content-src/asrouter/asrouter-content.jsx
browser/components/newtab/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx
browser/components/newtab/content-src/asrouter/components/SnippetBase/_SnippetBase.scss
browser/components/newtab/content-src/asrouter/schemas/message-format.md
browser/components/newtab/content-src/asrouter/schemas/provider-response.schema.json
browser/components/newtab/content-src/asrouter/template-utils.js
browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json
browser/components/newtab/content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx
browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx
browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.schema.json
browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
browser/components/newtab/content-src/components/Base/Base.jsx
browser/components/newtab/content-src/components/Base/_Base.scss
browser/components/newtab/content-src/components/Card/Card.jsx
browser/components/newtab/content-src/components/Card/types.js
browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
browser/components/newtab/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx
browser/components/newtab/content-src/components/LinkMenu/LinkMenu.jsx
browser/components/newtab/content-src/components/SectionMenu/SectionMenu.jsx
browser/components/newtab/content-src/components/Sections/Sections.jsx
browser/components/newtab/content-src/components/Sections/_Sections.scss
browser/components/newtab/content-src/components/StartupOverlay/StartupOverlay.jsx
browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx
browser/components/newtab/content-src/components/TopSites/TopSite.jsx
browser/components/newtab/content-src/components/TopSites/TopSiteForm.jsx
browser/components/newtab/content-src/components/TopSites/TopSiteFormInput.jsx
browser/components/newtab/content-src/components/TopSites/TopSites.jsx
browser/components/newtab/content-src/lib/asroutercontent.js
browser/components/newtab/content-src/lib/detect-user-session-start.js
browser/components/newtab/content-src/lib/link-menu-options.js
browser/components/newtab/content-src/lib/screenshot-utils.js
browser/components/newtab/content-src/lib/section-menu-options.js
browser/components/newtab/content-src/lib/snippets.js
browser/components/newtab/content-src/styles/_variables.scss
browser/components/newtab/css/activity-stream-linux.css
browser/components/newtab/css/activity-stream-linux.css.map
browser/components/newtab/css/activity-stream-mac.css
browser/components/newtab/css/activity-stream-mac.css.map
browser/components/newtab/css/activity-stream-windows.css
browser/components/newtab/css/activity-stream-windows.css.map
browser/components/newtab/data/content/activity-stream.bundle.js
browser/components/newtab/data/content/activity-stream.bundle.js.map
browser/components/newtab/karma.mc.config.js
browser/components/newtab/lib/ASRouter.jsm
browser/components/newtab/lib/ASRouterFeed.jsm
browser/components/newtab/lib/ASRouterPreferences.jsm
browser/components/newtab/lib/ASRouterTargeting.jsm
browser/components/newtab/lib/ASRouterTriggerListeners.jsm
browser/components/newtab/lib/AboutPreferences.jsm
browser/components/newtab/lib/ActivityStream.jsm
browser/components/newtab/lib/ActivityStreamMessageChannel.jsm
browser/components/newtab/lib/ActivityStreamStorage.jsm
browser/components/newtab/lib/CFRMessageProvider.jsm
browser/components/newtab/lib/CFRPageActions.jsm
browser/components/newtab/lib/DownloadsManager.jsm
browser/components/newtab/lib/FaviconFeed.jsm
browser/components/newtab/lib/FilterAdult.jsm
browser/components/newtab/lib/HighlightsFeed.jsm
browser/components/newtab/lib/ManualMigration.jsm
browser/components/newtab/lib/NaiveBayesTextTagger.jsm
browser/components/newtab/lib/NmfTextTagger.jsm
browser/components/newtab/lib/OnboardingMessageProvider.jsm
browser/components/newtab/lib/PlacesFeed.jsm
browser/components/newtab/lib/PrefsFeed.jsm
browser/components/newtab/lib/RecipeExecutor.jsm
browser/components/newtab/lib/Screenshots.jsm
browser/components/newtab/lib/SearchShortcuts.jsm
browser/components/newtab/lib/SectionsManager.jsm
browser/components/newtab/lib/SnippetsFeed.jsm
browser/components/newtab/lib/Store.jsm
browser/components/newtab/lib/SystemTickFeed.jsm
browser/components/newtab/lib/TelemetryFeed.jsm
browser/components/newtab/lib/Tokenize.jsm
browser/components/newtab/lib/TopSitesFeed.jsm
browser/components/newtab/lib/TopStoriesFeed.jsm
browser/components/newtab/lib/UserDomainAffinityProvider.jsm
browser/components/newtab/locales/ach/strings.properties
browser/components/newtab/locales/ar/strings.properties
browser/components/newtab/locales/az/strings.properties
browser/components/newtab/locales/be/strings.properties
browser/components/newtab/locales/cak/strings.properties
browser/components/newtab/locales/cs/strings.properties
browser/components/newtab/locales/cy/strings.properties
browser/components/newtab/locales/dsb/strings.properties
browser/components/newtab/locales/el/strings.properties
browser/components/newtab/locales/en-CA/strings.properties
browser/components/newtab/locales/es-AR/strings.properties
browser/components/newtab/locales/es-CL/strings.properties
browser/components/newtab/locales/es-MX/strings.properties
browser/components/newtab/locales/eu/strings.properties
browser/components/newtab/locales/fi/strings.properties
browser/components/newtab/locales/fr/strings.properties
browser/components/newtab/locales/fy-NL/strings.properties
browser/components/newtab/locales/gu-IN/strings.properties
browser/components/newtab/locales/he/strings.properties
browser/components/newtab/locales/hi-IN/strings.properties
browser/components/newtab/locales/hsb/strings.properties
browser/components/newtab/locales/hu/strings.properties
browser/components/newtab/locales/ia/strings.properties
browser/components/newtab/locales/id/strings.properties
browser/components/newtab/locales/it/strings.properties
browser/components/newtab/locales/ja-JP-mac/strings.properties
browser/components/newtab/locales/ja/strings.properties
browser/components/newtab/locales/ka/strings.properties
browser/components/newtab/locales/kab/strings.properties
browser/components/newtab/locales/km/strings.properties
browser/components/newtab/locales/ko/strings.properties
browser/components/newtab/locales/lo/strings.properties
browser/components/newtab/locales/mr/strings.properties
browser/components/newtab/locales/ms/strings.properties
browser/components/newtab/locales/nl/strings.properties
browser/components/newtab/locales/nn-NO/strings.properties
browser/components/newtab/locales/pt-PT/strings.properties
browser/components/newtab/locales/rm/strings.properties
browser/components/newtab/locales/ro/strings.properties
browser/components/newtab/locales/ru/strings.properties
browser/components/newtab/locales/sk/strings.properties
browser/components/newtab/locales/sl/strings.properties
browser/components/newtab/locales/sr/strings.properties
browser/components/newtab/locales/sv-SE/strings.properties
browser/components/newtab/locales/te/strings.properties
browser/components/newtab/locales/th/strings.properties
browser/components/newtab/locales/tr/strings.properties
browser/components/newtab/locales/uk/strings.properties
browser/components/newtab/locales/ur/strings.properties
browser/components/newtab/locales/vi/strings.properties
browser/components/newtab/locales/zh-CN/strings.properties
browser/components/newtab/locales/zh-TW/strings.properties
browser/components/newtab/mochitest.sh
browser/components/newtab/package-lock.json
browser/components/newtab/package.json
browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ach/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ach/activity-stream-strings.js
browser/components/newtab/prerendered/locales/an/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/an/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ar/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ar/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ast/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/az/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/az/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/az/activity-stream-strings.js
browser/components/newtab/prerendered/locales/be/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/be/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/be/activity-stream-strings.js
browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/bg/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/bn-BD/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/bn-BD/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/bn-IN/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/bn-IN/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/br/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/br/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/bs/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ca/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/cak/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/cak/activity-stream-strings.js
browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/crh/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/cs/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/cs/activity-stream-strings.js
browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/cy/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/cy/activity-stream-strings.js
browser/components/newtab/prerendered/locales/da/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/da/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/de/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/de/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/dsb/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/dsb/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/dsb/activity-stream-strings.js
browser/components/newtab/prerendered/locales/el/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/el/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/el/activity-stream-strings.js
browser/components/newtab/prerendered/locales/en-CA/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/en-CA/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/en-GB/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/en-GB/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/en-US/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/en-US/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/eo/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/eo/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/es-AR/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/es-AR/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/es-AR/activity-stream-strings.js
browser/components/newtab/prerendered/locales/es-CL/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/es-CL/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/es-CL/activity-stream-strings.js
browser/components/newtab/prerendered/locales/es-ES/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/es-ES/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/es-ES/activity-stream-strings.js
browser/components/newtab/prerendered/locales/es-MX/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/es-MX/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/es-MX/activity-stream-strings.js
browser/components/newtab/prerendered/locales/et/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/et/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/eu/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/eu/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/eu/activity-stream-strings.js
browser/components/newtab/prerendered/locales/fa/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/fa/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ff/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ff/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/fi/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/fi/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/fi/activity-stream-strings.js
browser/components/newtab/prerendered/locales/fr/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/fr/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/fr/activity-stream-strings.js
browser/components/newtab/prerendered/locales/fy-NL/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/fy-NL/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/fy-NL/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ga-IE/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ga-IE/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/gd/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/gd/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/gl/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/gl/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/gn/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/gn/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/gu-IN/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/gu-IN/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/gu-IN/activity-stream-strings.js
browser/components/newtab/prerendered/locales/he/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/he/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/he/activity-stream-strings.js
browser/components/newtab/prerendered/locales/hi-IN/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/hi-IN/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/hi-IN/activity-stream-strings.js
browser/components/newtab/prerendered/locales/hr/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/hr/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/hsb/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/hsb/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/hsb/activity-stream-strings.js
browser/components/newtab/prerendered/locales/hu/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/hu/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/hu/activity-stream-strings.js
browser/components/newtab/prerendered/locales/hy-AM/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/hy-AM/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ia/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ia/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ia/activity-stream-strings.js
browser/components/newtab/prerendered/locales/id/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/id/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/id/activity-stream-strings.js
browser/components/newtab/prerendered/locales/it/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/it/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/it/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ja-JP-mac/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ja-JP-mac/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ja-JP-mac/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ja/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ja/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ja/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ka/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ka/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ka/activity-stream-strings.js
browser/components/newtab/prerendered/locales/kab/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/kab/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/kab/activity-stream-strings.js
browser/components/newtab/prerendered/locales/kk/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/kk/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/km/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/km/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/km/activity-stream-strings.js
browser/components/newtab/prerendered/locales/kn/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/kn/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ko/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ko/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ko/activity-stream-strings.js
browser/components/newtab/prerendered/locales/lij/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/lij/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/lo/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/lo/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/lo/activity-stream-strings.js
browser/components/newtab/prerendered/locales/lt/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/lt/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ltg/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ltg/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/lv/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/lv/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/mai/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/mai/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/mk/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/mk/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ml/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ml/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/mr/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ms/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ms/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ms/activity-stream-strings.js
browser/components/newtab/prerendered/locales/my/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/my/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/nb-NO/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/nb-NO/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ne-NP/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ne-NP/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/nl/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/nl/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/nl/activity-stream-strings.js
browser/components/newtab/prerendered/locales/nn-NO/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/nn-NO/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/nn-NO/activity-stream-strings.js
browser/components/newtab/prerendered/locales/oc/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/oc/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/pa-IN/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/pa-IN/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/pl/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/pl/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/pt-BR/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/pt-BR/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/pt-BR/activity-stream-strings.js
browser/components/newtab/prerendered/locales/pt-PT/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/pt-PT/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/pt-PT/activity-stream-strings.js
browser/components/newtab/prerendered/locales/rm/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/rm/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/rm/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ro/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ro/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ro/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ru/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ru/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ru/activity-stream-strings.js
browser/components/newtab/prerendered/locales/si/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/si/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sk/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/sk/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sk/activity-stream-strings.js
browser/components/newtab/prerendered/locales/sl/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/sl/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sl/activity-stream-strings.js
browser/components/newtab/prerendered/locales/sq/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/sq/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sr/activity-stream-strings.js
browser/components/newtab/prerendered/locales/sv-SE/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/sv-SE/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/sv-SE/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ta/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ta/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/te/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/te/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/te/activity-stream-strings.js
browser/components/newtab/prerendered/locales/th/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/th/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/th/activity-stream-strings.js
browser/components/newtab/prerendered/locales/tl/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/tl/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/tr/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/tr/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/tr/activity-stream-strings.js
browser/components/newtab/prerendered/locales/uk/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/uk/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/uk/activity-stream-strings.js
browser/components/newtab/prerendered/locales/ur/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/ur/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/ur/activity-stream-strings.js
browser/components/newtab/prerendered/locales/uz/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/uz/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/vi/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/vi/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/vi/activity-stream-strings.js
browser/components/newtab/prerendered/locales/zh-CN/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/zh-CN/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/zh-CN/activity-stream-strings.js
browser/components/newtab/prerendered/locales/zh-TW/activity-stream-prerendered-noscripts.html
browser/components/newtab/prerendered/locales/zh-TW/activity-stream-prerendered.html
browser/components/newtab/prerendered/locales/zh-TW/activity-stream-strings.js
browser/components/newtab/prerendered/static/activity-stream-initial-state.js
browser/components/newtab/prerendered/static/activity-stream-prerendered-debug-noscripts.html
browser/components/newtab/prerendered/static/activity-stream-prerendered-debug.html
browser/components/newtab/test/browser/browser.ini
browser/components/newtab/test/browser/browser_as_render.js
browser/components/newtab/test/browser/browser_asrouter_cfr.js
browser/components/newtab/test/browser/browser_asrouter_targeting.js
browser/components/newtab/test/browser/browser_enabled_newtabpage.js
browser/components/newtab/test/browser/browser_highlights_section.js
browser/components/newtab/test/browser/browser_newtab_overrides.js
browser/components/newtab/test/browser/browser_topsites_contextMenu_options.js
browser/components/newtab/test/browser/browser_topsites_section.js
browser/components/newtab/test/browser/head.js
browser/components/newtab/test/schemas/pings.js
browser/components/newtab/test/unit/activity-stream.test.jsx
browser/components/newtab/test/unit/asrouter/ASRouter.test.js
browser/components/newtab/test/unit/asrouter/ASRouterFeed.test.js
browser/components/newtab/test/unit/asrouter/ASRouterPreferences.test.js
browser/components/newtab/test/unit/asrouter/ASRouterTargeting.test.js
browser/components/newtab/test/unit/asrouter/CFRPageActions.test.js
browser/components/newtab/test/unit/asrouter/MessageLoaderUtils.test.js
browser/components/newtab/test/unit/asrouter/asrouter-content.test.jsx
browser/components/newtab/test/unit/asrouter/constants.js
browser/components/newtab/test/unit/asrouter/templates/ExtensionDoorhanger.test.jsx
browser/components/newtab/test/unit/asrouter/templates/SimpleSnippet.test.jsx
browser/components/newtab/test/unit/common/Actions.test.js
browser/components/newtab/test/unit/common/PrerenderData.test.js
browser/components/newtab/test/unit/common/Reducers.test.js
browser/components/newtab/test/unit/content-src/components/Base.test.jsx
browser/components/newtab/test/unit/content-src/components/Card.test.jsx
browser/components/newtab/test/unit/content-src/components/CollapsibleSection.test.jsx
browser/components/newtab/test/unit/content-src/components/ComponentPerfTimer.test.jsx
browser/components/newtab/test/unit/content-src/components/ConfirmDialog.test.jsx
browser/components/newtab/test/unit/content-src/components/ContextMenu.test.jsx
browser/components/newtab/test/unit/content-src/components/LinkMenu.test.jsx
browser/components/newtab/test/unit/content-src/components/PocketLoggedInCta.test.jsx
browser/components/newtab/test/unit/content-src/components/SectionMenu.test.jsx
browser/components/newtab/test/unit/content-src/components/Sections.test.jsx
browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx
browser/components/newtab/test/unit/content-src/lib/detect-user-session-start.test.js
browser/components/newtab/test/unit/content-src/lib/init-store.test.js
browser/components/newtab/test/unit/content-src/lib/screenshot-utils.test.js
browser/components/newtab/test/unit/content-src/lib/snippets.test.js
browser/components/newtab/test/unit/lib/AboutPreferences.test.js
browser/components/newtab/test/unit/lib/ActivityStream.test.js
browser/components/newtab/test/unit/lib/ActivityStreamMessageChannel.test.js
browser/components/newtab/test/unit/lib/ActivityStreamPrefs.test.js
browser/components/newtab/test/unit/lib/ActivityStreamStorage.test.js
browser/components/newtab/test/unit/lib/DownloadsManager.test.js
browser/components/newtab/test/unit/lib/FaviconFeed.test.js
browser/components/newtab/test/unit/lib/FilterAdult.test.js
browser/components/newtab/test/unit/lib/HighlightsFeed.test.js
browser/components/newtab/test/unit/lib/ManualMigration.test.js
browser/components/newtab/test/unit/lib/NaiveBayesTextTagger.test.js
browser/components/newtab/test/unit/lib/NewTabInit.test.js
browser/components/newtab/test/unit/lib/NmfTextTagger.test.js
browser/components/newtab/test/unit/lib/PersistentCache.test.js
browser/components/newtab/test/unit/lib/PlacesFeed.test.js
browser/components/newtab/test/unit/lib/PrefsFeed.test.js
browser/components/newtab/test/unit/lib/RecipeExecutor.test.js
browser/components/newtab/test/unit/lib/Screenshots.test.js
browser/components/newtab/test/unit/lib/SectionsManager.test.js
browser/components/newtab/test/unit/lib/SnippetsFeed.test.js
browser/components/newtab/test/unit/lib/Store.test.js
browser/components/newtab/test/unit/lib/TelemetryFeed.test.js
browser/components/newtab/test/unit/lib/TippyTopProvider.test.js
browser/components/newtab/test/unit/lib/Tokenize.test.js
browser/components/newtab/test/unit/lib/TopSitesFeed.test.js
browser/components/newtab/test/unit/lib/TopStoriesFeed.test.js
browser/components/newtab/test/unit/lib/UTEventReporting.test.js
browser/components/newtab/test/unit/lib/UserDomainAffinityProvider.test.js
browser/components/newtab/test/unit/unit-entry.js
browser/components/newtab/test/unit/utils.js
browser/components/newtab/webpack.prerender.config.js
browser/components/newtab/webpack.system-addon.config.js
--- a/browser/components/newtab/.eslintrc.js
+++ b/browser/components/newtab/.eslintrc.js
@@ -73,17 +73,16 @@ module.exports = {
     "array-element-newline": 0,
     "arrow-body-style": [2, "as-needed"],
     "arrow-parens": [2, "as-needed"],
     "block-scoped-var": 2,
     "callback-return": 0,
     "camelcase": 0,
     "capitalized-comments": 0,
     "class-methods-use-this": 0,
-    "comma-dangle": [2, "never"],
     "consistent-this": [2, "use-bind"],
     "curly": [2, "all"],
     "default-case": 0,
     "dot-location": [2, "property"],
     "eqeqeq": 2,
     "for-direction": 2,
     "func-name-matching": 2,
     "func-names": 0,
--- a/browser/components/newtab/.travis.yml
+++ b/browser/components/newtab/.travis.yml
@@ -1,13 +1,13 @@
 language: node_js
 
 node_js:
   # when changing this, be sure to edit .nvrmc and package.json too
-  - 7
+  - 8
 
 python:
   - "2.7"
 
 cache:
   directories:
     - node_modules
 
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -95,17 +95,17 @@ AboutNewTabService.prototype = {
   _activityStreamDebug: false,
   _privilegedContentProcess: false,
   _overridden: false,
   willNotifyUser: false,
 
   classID: Components.ID("{dfcd2adc-7867-4d3a-ba70-17501f208142}"),
   QueryInterface: ChromeUtils.generateQI([
     Ci.nsIAboutNewTabService,
-    Ci.nsIObserver
+    Ci.nsIObserver,
   ]),
 
   observe(subject, topic, data) {
     switch (topic) {
       case "nsPref:changed":
         if (data === PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS) {
           this._privilegedContentProcess = Services.prefs.getBoolPref(PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS);
         } else if (data === PREF_ACTIVITY_STREAM_PRERENDER_ENABLED) {
@@ -148,17 +148,17 @@ AboutNewTabService.prototype = {
             "chrome://browser/content/contentTheme.js",
             `${BASE_URL}vendor/react${debugString}.js`,
             `${BASE_URL}vendor/react-dom${debugString}.js`,
             `${BASE_URL}vendor/prop-types.js`,
             `${BASE_URL}vendor/react-intl.js`,
             `${BASE_URL}vendor/redux.js`,
             `${BASE_URL}vendor/react-redux.js`,
             `${BASE_URL}prerendered/${this.activityStreamLocale}/activity-stream-strings.js`,
-            `${BASE_URL}data/content/activity-stream.bundle.js`
+            `${BASE_URL}data/content/activity-stream.bundle.js`,
           ];
 
           if (this._activityStreamPrerender) {
             scripts.unshift(`${BASE_URL}prerendered/static/activity-stream-initial-state.js`);
           }
 
           for (let script of scripts) {
             Services.scriptloader.loadSubScript(script, win, "UTF-8"); // Synchronous call
@@ -246,17 +246,17 @@ AboutNewTabService.prototype = {
     // resource://activity-stream/prerendered/static/activity-stream-debug.html
     return [
       "resource://activity-stream/prerendered/",
       this._activityStreamPath,
       "activity-stream",
       this._activityStreamPrerender ? "-prerendered" : "",
       this._activityStreamDebug ? "-debug" : "",
       this._privilegedContentProcess ? "-noscripts" : "",
-      ".html"
+      ".html",
     ].join("");
   },
 
   /*
    * Returns the about:welcome URL
    *
    * This is calculated in the same way the default URL is, except that we don't
    * allow prerendering.
@@ -334,12 +334,12 @@ AboutNewTabService.prototype = {
     Services.obs.removeObserver(this, TOPIC_APP_QUIT);
     Services.obs.removeObserver(this, TOPIC_LOCALES_CHANGE);
     Services.prefs.removeObserver(PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS, this);
     Services.prefs.removeObserver(PREF_ACTIVITY_STREAM_PRERENDER_ENABLED, this);
     if (!IS_RELEASE_OR_BETA) {
       Services.prefs.removeObserver(PREF_ACTIVITY_STREAM_DEBUG, this);
     }
     this.initialized = false;
-  }
+  },
 };
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutNewTabService]);
--- a/browser/components/newtab/bin/locales.js
+++ b/browser/components/newtab/bin/locales.js
@@ -102,10 +102,10 @@ exports.CENTRAL_LOCALES = [
   "tr",
   "uk",
   "ur",
   "uz",
   "vi",
   "wo",
   "xh",
   "zh-CN",
-  "zh-TW"
+  "zh-TW",
 ];
--- a/browser/components/newtab/bin/render-activity-stream-html.js
+++ b/browser/components/newtab/bin/render-activity-stream-html.js
@@ -7,17 +7,17 @@ const path = require("path");
 const {prerender} = require("./prerender");
 
 const {CENTRAL_LOCALES, DEFAULT_LOCALE} = require("./locales");
 
 // Note: DEFAULT_OPTIONS.baseUrl should match BASE_URL in aboutNewTabService.js
 //       in mozilla-central.
 const DEFAULT_OPTIONS = {
   addonPath: "..",
-  baseUrl: "resource://activity-stream/"
+  baseUrl: "resource://activity-stream/",
 };
 
 // Locales that should be displayed RTL
 const RTL_LIST = ["ar", "he", "fa", "ur"];
 
 /**
  * Get the language part of the locale.
  */
@@ -71,17 +71,17 @@ function templateHTML(options, html) {
     "chrome://browser/content/contentTheme.js",
     `${options.baseUrl}vendor/react${debugString}.js`,
     `${options.baseUrl}vendor/react-dom${debugString}.js`,
     `${options.baseUrl}vendor/prop-types.js`,
     `${options.baseUrl}vendor/react-intl.js`,
     `${options.baseUrl}vendor/redux.js`,
     `${options.baseUrl}vendor/react-redux.js`,
     `${options.baseUrl}prerendered/${options.locale}/activity-stream-strings.js`,
-    `${options.baseUrl}data/content/activity-stream.bundle.js`
+    `${options.baseUrl}data/content/activity-stream.bundle.js`,
   ];
   if (isPrerendered) {
     scripts.unshift(`${options.baseUrl}prerendered/static/activity-stream-initial-state.js`);
   }
   const scriptTag = `
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
@@ -150,40 +150,40 @@ function writeFiles(name, destPath, file
   console.log("\x1b[32m", `✓ ${name}`, "\x1b[0m");
 }
 
 const STATIC_FILES = new Map([
   ["activity-stream-debug.html", ({options}) => templateHTML(options)],
   ["activity-stream-debug-noscripts.html", ({options}) => templateHTML(Object.assign({}, options, {noscripts: true}))],
   ["activity-stream-initial-state.js", ({state}) => templateJs("gActivityStreamPrerenderedState", "static", state)],
   ["activity-stream-prerendered-debug.html", ({html, options}) => templateHTML(options, html)],
-  ["activity-stream-prerendered-debug-noscripts.html", ({html, options}) => templateHTML(Object.assign({}, options, {noscripts: true}), html)]
+  ["activity-stream-prerendered-debug-noscripts.html", ({html, options}) => templateHTML(Object.assign({}, options, {noscripts: true}), html)],
 ]);
 
 const LOCALIZED_FILES = new Map([
   ["activity-stream-prerendered.html", ({html, options}) => templateHTML(options, html)],
   ["activity-stream-prerendered-noscripts.html", ({html, options}) => templateHTML(Object.assign({}, options, {noscripts: true}), html)],
   ["activity-stream-strings.js", ({options: {locale, strings}}) => templateJs("gActivityStreamStrings", locale, strings)],
   ["activity-stream.html", ({options}) => templateHTML(options)],
-  ["activity-stream-noscripts.html", ({options}) => templateHTML(Object.assign({}, options, {noscripts: true}))]
+  ["activity-stream-noscripts.html", ({options}) => templateHTML(Object.assign({}, options, {noscripts: true}))],
 ]);
 
 /**
  * main - Parses command line arguments, generates html and js with templates,
  *        and writes files to their specified locations.
  */
 function main() { // eslint-disable-line max-statements
   // This code parses command line arguments passed to this script.
   // Note: process.argv.slice(2) is necessary because the first two items in
   // process.argv are paths
   const args = require("minimist")(process.argv.slice(2), {
     alias: {
       addonPath: "a",
-      baseUrl: "b"
-    }
+      baseUrl: "b",
+    },
   });
 
   const baseOptions = Object.assign({debug: false}, DEFAULT_OPTIONS, args || {});
   const addonPath = path.resolve(__dirname, baseOptions.addonPath);
   const allStrings = require(`${baseOptions.addonPath}/data/locales.json`);
   const extraLocales = Object.keys(allStrings).filter(locale =>
     locale !== DEFAULT_LOCALE && !CENTRAL_LOCALES.includes(locale));
 
@@ -206,17 +206,17 @@ function main() { // eslint-disable-line
       skippedLocales.push(locale);
       continue;
     }
 
     const prerenderData  = prerender(locale, strings);
     const options = Object.assign({}, baseOptions, {
       direction: getTextDirection(locale),
       locale,
-      strings
+      strings,
     });
 
     // Put locale-specific files in their own directory
     const localePath = path.join(prerenderedPath, "locales", locale);
     mkdir("-p", localePath);
     writeFiles(locale, localePath, LOCALIZED_FILES, prerenderData, options);
 
     // Only write static files once for the default locale
--- a/browser/components/newtab/bin/test-merges.js
+++ b/browser/components/newtab/bin/test-merges.js
@@ -74,17 +74,17 @@ function findNewlyMergedPRs() {
     // don't try and mochitest old closed stuff, we don't want to kick off a
     // zillion test jobs
     `merged:>=${OLDEST_PR_DATE}`,
 
     // only look at merges to master
     "base:master",
 
     // if it's already been pushed to pine, don't do it again
-    `-label:${ALREADY_PUSHED_LABEL}`
+    `-label:${ALREADY_PUSHED_LABEL}`,
   ];
 
   console.log(`Searching ${AS_REPO} for newly merged PRs`);
   return github.search.issues({q: searchTerms.join("+")});
 }
 
 /**
  * Return the commitId when the given PR was merged.  This is the one
@@ -92,17 +92,17 @@ function findNewlyMergedPRs() {
  *
  * @param  {String} prNumber  The number of the PR to export.
  * @return {String}           The commitId associated with the merge of this PR.
  */
 function getPRMergeCommitId(prNumber) {
   return github.issues.getEvents({
     owner: AS_REPO_OWNER,
     repo: AS_REPO_NAME,
-    issue_number: prNumber
+    issue_number: prNumber,
   }).then(({data}) => {
     if (data.incomplete_results) {
       // XXX should handle this case theoretically, but since we'll be running
       // regularly from cron, it seems unlikely that we'll even hit 30 new
       // merges (default GitHub page size) in a single run.
       throw new Error("data.incomplete_results is true, aborting");
     }
 
@@ -185,17 +185,17 @@ function commitToHg([commitId, commitMsg
     // quote characters, things can go haywire in weird ways.
     console.log(`Committing exported ${commitId} to ${AS_REPO_NAME}...`);
     child_process.execFile(HG,
       [
         "commit",
         "--addremove",
         "-m",
         `${commitMsg}\n\nExport of ${commitId} from ${AS_REPO_OWNER}/${AS_REPO_NAME}`,
-        "."
+        ".",
       ],
       {cwd: TESTING_LOCAL_MC, env: process.env, timeout: 5 * 60 * 1000},
       (code, stdout, stderr) => {
         if (code) {
           reject(new Error(`${HG} commit failed, output: ${stderr}`));
           return;
         }
 
@@ -252,31 +252,31 @@ function annotateGithubPR(prNumber, anno
   console.log(`Annotating ${prNumber} with ${annotation}...`);
 
   // We use createComment from issues instead of pullRequests because we're
   // not commenting on a particular commit
   return github.issues.createComment({
     owner: AS_REPO_OWNER,
     repo: AS_REPO_NAME,
     number: prNumber,
-    body: annotation
+    body: annotation,
   }).catch(reason => console.log(reason));
 }
 
 /**
  * Labels a given github PR ${ALREADY_PUSHED_LABEL}.
  */
 function labelGithubPR(prNumber) {
   console.log(`Labeling PR ${prNumber} with ${ALREADY_PUSHED_LABEL}...`);
 
   return github.issues.addLabels({
     owner: AS_REPO_OWNER,
     repo: AS_REPO_NAME,
     number: prNumber,
-    labels: [ALREADY_PUSHED_LABEL]
+    labels: [ALREADY_PUSHED_LABEL],
   }).catch(reason => console.log(reason));
 }
 
 function pushPR(pr) {
   return getPRMergeCommitId(pr.number)
 
     // get the merged commit to test
     .then(checkoutGitCommit)
--- a/browser/components/newtab/common/Actions.jsm
+++ b/browser/components/newtab/common/Actions.jsm
@@ -23,16 +23,18 @@ this.globalImportContext = globalImportC
 //   INIT: "INIT",
 //   UNINIT: "UNINIT"
 // }
 const actionTypes = {};
 for (const type of [
   "ADDONS_INFO_REQUEST",
   "ADDONS_INFO_RESPONSE",
   "ARCHIVE_FROM_POCKET",
+  "AS_ROUTER_INITIALIZED",
+  "AS_ROUTER_PREF_CHANGED",
   "AS_ROUTER_TELEMETRY_USER_EVENT",
   "BLOCK_URL",
   "BOOKMARK_URL",
   "COPY_DOWNLOAD_LINK",
   "DELETE_BOOKMARK_BY_ID",
   "DELETE_FROM_POCKET",
   "DELETE_HISTORY_URL",
   "DIALOG_CANCEL",
@@ -88,16 +90,17 @@ for (const type of [
   "SETTINGS_OPEN",
   "SET_PREF",
   "SHOW_DOWNLOAD_FILE",
   "SHOW_FIREFOX_ACCOUNTS",
   "SKIPPED_SIGNIN",
   "SNIPPETS_BLOCKLIST_CLEARED",
   "SNIPPETS_BLOCKLIST_UPDATED",
   "SNIPPETS_DATA",
+  "SNIPPETS_PREVIEW_MODE",
   "SNIPPETS_RESET",
   "SNIPPET_BLOCKED",
   "SUBMIT_EMAIL",
   "SYSTEM_TICK",
   "TELEMETRY_IMPRESSION_STATS",
   "TELEMETRY_PERFORMANCE_EVENT",
   "TELEMETRY_UNDESIRED_EVENT",
   "TELEMETRY_USER_EVENT",
@@ -112,30 +115,30 @@ for (const type of [
   "TOP_SITES_UPDATED",
   "TOTAL_BOOKMARKS_REQUEST",
   "TOTAL_BOOKMARKS_RESPONSE",
   "UNINIT",
   "UPDATE_PINNED_SEARCH_SHORTCUTS",
   "UPDATE_SEARCH_SHORTCUTS",
   "UPDATE_SECTION_PREFS",
   "WEBEXT_CLICK",
-  "WEBEXT_DISMISS"
+  "WEBEXT_DISMISS",
 ]) {
   actionTypes[type] = type;
 }
 
 // These are acceptable actions for AS Router messages to have. They can show up
 // as call-to-action buttons in snippets, onboarding tour, etc.
 const ASRouterActions = {};
 for (const type of [
   "INSTALL_ADDON_FROM_URL",
   "OPEN_APPLICATIONS_MENU",
   "OPEN_PRIVATE_BROWSER_WINDOW",
   "OPEN_URL",
-  "OPEN_ABOUT_PAGE"
+  "OPEN_ABOUT_PAGE",
 ]) {
   ASRouterActions[type] = type;
 }
 
 // Helper function for creating routed actions between content and main
 // Not intended to be used by consumers
 function _RouteMessage(action, options) {
   const meta = action.meta ? {...action.meta} : {};
@@ -163,17 +166,17 @@ function _RouteMessage(action, options) 
  * @param  {string} fromTarget The id of the content port from which the action originated. (optional)
  * @return {object} An action with added .meta properties
  */
 function AlsoToMain(action, fromTarget, skipLocal) {
   return _RouteMessage(action, {
     from: CONTENT_MESSAGE_TYPE,
     to: MAIN_MESSAGE_TYPE,
     fromTarget,
-    skipLocal
+    skipLocal,
   });
 }
 
 /**
  * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.
  *
  * @param  {object} action Any redux action (required)
  * @param  {object} options
@@ -188,17 +191,17 @@ function OnlyToMain(action, fromTarget) 
  * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.
  *
  * @param  {object} action Any redux action (required)
  * @return {object} An action with added .meta properties
  */
 function BroadcastToContent(action) {
   return _RouteMessage(action, {
     from: MAIN_MESSAGE_TYPE,
-    to: CONTENT_MESSAGE_TYPE
+    to: CONTENT_MESSAGE_TYPE,
   });
 }
 
 /**
  * AlsoToOneContent - Creates a message that will be will be dispatched to the main store
  *                    and also sent to a particular Content process.
  *
  * @param  {object} action Any redux action (required)
@@ -209,17 +212,17 @@ function BroadcastToContent(action) {
 function AlsoToOneContent(action, target, skipMain) {
   if (!target) {
     throw new Error("You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent");
   }
   return _RouteMessage(action, {
     from: MAIN_MESSAGE_TYPE,
     to: CONTENT_MESSAGE_TYPE,
     toTarget: target,
-    skipMain
+    skipMain,
   });
 }
 
 /**
  * OnlyToOneContent - Creates a message that will be sent to a particular Content process
  *                    and skip the main reducer.
  *
  * @param  {object} action Any redux action (required)
@@ -234,89 +237,89 @@ function OnlyToOneContent(action, target
  * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.
  *
  * @param  {object} action Any redux action (required)
  * @return {object} An action with added .meta properties
  */
 function AlsoToPreloaded(action) {
   return _RouteMessage(action, {
     from: MAIN_MESSAGE_TYPE,
-    to: PRELOAD_MESSAGE_TYPE
+    to: PRELOAD_MESSAGE_TYPE,
   });
 }
 
 /**
  * UserEvent - A telemetry ping indicating a user action. This should only
  *                   be sent from the UI during a user session.
  *
  * @param  {object} data Fields to include in the ping (source, etc.)
  * @return {object} An AlsoToMain action
  */
 function UserEvent(data) {
   return AlsoToMain({
     type: actionTypes.TELEMETRY_USER_EVENT,
-    data
+    data,
   });
 }
 
 /**
  * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only
  *                     be sent from the UI during a user session.
  *
  * @param  {object} data Fields to include in the ping (source, etc.)
  * @return {object} An AlsoToMain action
  */
 function ASRouterUserEvent(data) {
   return AlsoToMain({
     type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,
-    data
+    data,
   });
 }
 
 /**
  * UndesiredEvent - A telemetry ping indicating an undesired state.
  *
  * @param  {object} data Fields to include in the ping (value, etc.)
  * @param  {int} importContext (For testing) Override the import context for testing.
  * @return {object} An action. For UI code, a AlsoToMain action.
  */
 function UndesiredEvent(data, importContext = globalImportContext) {
   const action = {
     type: actionTypes.TELEMETRY_UNDESIRED_EVENT,
-    data
+    data,
   };
   return importContext === UI_CODE ? AlsoToMain(action) : action;
 }
 
 /**
  * PerfEvent - A telemetry ping indicating a performance-related event.
  *
  * @param  {object} data Fields to include in the ping (value, etc.)
  * @param  {int} importContext (For testing) Override the import context for testing.
  * @return {object} An action. For UI code, a AlsoToMain action.
  */
 function PerfEvent(data, importContext = globalImportContext) {
   const action = {
     type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,
-    data
+    data,
   };
   return importContext === UI_CODE ? AlsoToMain(action) : action;
 }
 
 /**
  * ImpressionStats - A telemetry ping indicating an impression stats.
  *
  * @param  {object} data Fields to include in the ping
  * @param  {int} importContext (For testing) Override the import context for testing.
  * #return {object} An action. For UI code, a AlsoToMain action.
  */
 function ImpressionStats(data, importContext = globalImportContext) {
   const action = {
     type: actionTypes.TELEMETRY_IMPRESSION_STATS,
-    data
+    data,
   };
   return importContext === UI_CODE ? AlsoToMain(action) : action;
 }
 
 function SetPref(name, value, importContext = globalImportContext) {
   const action = {type: actionTypes.SET_PREF, data: {name, value}};
   return importContext === UI_CODE ? AlsoToMain(action) : action;
 }
@@ -340,17 +343,17 @@ this.actionCreators = {
   PerfEvent,
   ImpressionStats,
   AlsoToOneContent,
   OnlyToOneContent,
   AlsoToMain,
   OnlyToMain,
   AlsoToPreloaded,
   SetPref,
-  WebExtEvent
+  WebExtEvent,
 };
 
 // These are helpers to test for certain kinds of actions
 this.actionUtils = {
   isSendToMain(action) {
     if (!action.meta) {
       return false;
     }
@@ -386,23 +389,23 @@ this.actionUtils = {
       return false;
     }
     return action.meta.from === MAIN_MESSAGE_TYPE &&
       action.meta.to === CONTENT_MESSAGE_TYPE;
   },
   getPortIdOfSender(action) {
     return (action.meta && action.meta.fromTarget) || null;
   },
-  _RouteMessage
+  _RouteMessage,
 };
 
 const EXPORTED_SYMBOLS = [
   "actionTypes",
   "actionCreators",
   "actionUtils",
   "ASRouterActions",
   "globalImportContext",
   "UI_CODE",
   "BACKGROUND_PROCESS",
   "MAIN_MESSAGE_TYPE",
   "CONTENT_MESSAGE_TYPE",
-  "PRELOAD_MESSAGE_TYPE"
+  "PRELOAD_MESSAGE_TYPE",
 ];
--- a/browser/components/newtab/common/PerfService.jsm
+++ b/browser/components/newtab/common/PerfService.jsm
@@ -17,17 +17,17 @@ if (typeof Services !== "undefined") {
   // we must be running in content space
   // eslint-disable-next-line no-undef
   usablePerfObj = performance;
 } else {
   // This is a dummy object so this file doesn't crash in the node prerendering
   // task.
   usablePerfObj = {
     now() {},
-    mark() {}
+    mark() {},
   };
 }
 
 function _PerfService(options) {
   // For testing, so that we can use a fake Window.performance object with
   // known state.
   if (options && options.performanceObj) {
     this._perf = options.performanceObj;
@@ -113,13 +113,13 @@ function _PerfService(options) {
     let entries = this.getEntriesByName(name, "mark");
 
     if (!entries.length) {
       throw new Error(`No marks with the name ${name}`);
     }
 
     let mostRecentEntry = entries[entries.length - 1];
     return this._perf.timeOrigin + mostRecentEntry.startTime;
-  }
+  },
 };
 
 this.perfService = new _PerfService();
 const EXPORTED_SYMBOLS = ["_PerfService", "perfService"];
--- a/browser/components/newtab/common/PrerenderData.jsm
+++ b/browser/components/newtab/common/PrerenderData.jsm
@@ -58,17 +58,17 @@ this.PrerenderData = new _PrerenderData(
   initialPrefs: {
     "migrationExpired": true,
     "feeds.topsites": true,
     "showSearch": true,
     "topSitesRows": 1,
     "feeds.section.topstories": true,
     "feeds.section.highlights": true,
     "sectionOrder": "topsites,topstories,highlights",
-    "collapsed": false
+    "collapsed": false,
   },
   // Prefs listed as invalidating will prevent the prerendered version
   // of AS from being used if their value is something other than what is listed
   // here. This is required because some preferences cause the page layout to be
   // too different for the prerendered version to be used. Unfortunately, this
   // will result in users who have modified some of their preferences not being
   // able to get the benefits of prerendering.
   validation: [
@@ -76,30 +76,30 @@ this.PrerenderData = new _PrerenderData(
     "showSearch",
     "topSitesRows",
     "sectionOrder",
     // This means if either of these are set to their default values,
     // prerendering can be used.
     {oneOf: ["feeds.section.topstories", "feeds.section.highlights"]},
     // If any component has the following preference set to `true` it will
     // invalidate the prerendered version.
-    {indexedDB: ["collapsed"]}
+    {indexedDB: ["collapsed"]},
   ],
   initialSections: [
     {
       enabled: true,
       icon: "pocket",
       id: "topstories",
       order: 1,
-      title: {id: "header_recommended_by", values: {provider: "Pocket"}}
+      title: {id: "header_recommended_by", values: {provider: "Pocket"}},
     },
     {
       enabled: true,
       id: "highlights",
       icon: "highlights",
       order: 2,
-      title: {id: "header_highlights"}
-    }
-  ]
+      title: {id: "header_highlights"},
+    },
+  ],
 });
 
 this._PrerenderData = _PrerenderData;
 const EXPORTED_SYMBOLS = ["PrerenderData", "_PrerenderData"];
--- a/browser/components/newtab/common/Reducers.jsm
+++ b/browser/components/newtab/common/Reducers.jsm
@@ -9,56 +9,72 @@ const {Dedupe} = ChromeUtils.import("res
 const TOP_SITES_DEFAULT_ROWS = 1;
 const TOP_SITES_MAX_SITES_PER_ROW = 8;
 
 const dedupe = new Dedupe(site => site && site.url);
 
 const INITIAL_STATE = {
   App: {
     // Have we received real data from the app yet?
-    initialized: false
+    initialized: false,
+  },
+  ASRouter: {
+    initialized: false,
+    allowLegacyOnboarding: null,
+    allowLegacySnippets: null,
   },
   Snippets: {initialized: false},
   TopSites: {
     // Have we received real data from history yet?
     initialized: false,
     // The history (and possibly default) links
     rows: [],
     // Used in content only to dispatch action to TopSiteForm.
     editForm: null,
     // Used in content only to open the SearchShortcutsForm modal.
     showSearchShortcutsForm: false,
     // The list of available search shortcuts.
-    searchShortcuts: []
+    searchShortcuts: [],
   },
   Prefs: {
     initialized: false,
-    values: {}
+    values: {},
   },
   Dialog: {
     visible: false,
-    data: {}
+    data: {},
   },
   Sections: [],
   Pocket: {
-    isUserLoggedIn: false,
+    isUserLoggedIn: null,
     pocketCta: {},
-    waitingForSpoc: true
-  }
+    waitingForSpoc: true,
+  },
 };
 
 function App(prevState = INITIAL_STATE.App, action) {
   switch (action.type) {
     case at.INIT:
       return Object.assign({}, prevState, action.data || {}, {initialized: true});
     default:
       return prevState;
   }
 }
 
+function ASRouter(prevState = INITIAL_STATE.ASRouter, action) {
+  switch (action.type) {
+    case at.AS_ROUTER_INITIALIZED:
+      return {...action.data, initialized: true};
+    case at.AS_ROUTER_PREF_CHANGED:
+      return {...prevState, ...action.data};
+    default:
+      return prevState;
+  }
+}
+
 /**
  * insertPinned - Inserts pinned links in their specified slots
  *
  * @param {array} a list of links
  * @param {array} a list of pinned links
  * @return {array} resulting list of links with pinned links inserted
  */
 function insertPinned(links, pinned) {
@@ -97,56 +113,56 @@ function TopSites(prevState = INITIAL_ST
       }
       return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});
     case at.TOP_SITES_PREFS_UPDATED:
       return Object.assign({}, prevState, {pref: action.data.pref});
     case at.TOP_SITES_EDIT:
       return Object.assign({}, prevState, {
         editForm: {
           index: action.data.index,
-          previewResponse: null
-        }
+          previewResponse: null,
+        },
       });
     case at.TOP_SITES_CANCEL_EDIT:
       return Object.assign({}, prevState, {editForm: null});
     case at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:
       return Object.assign({}, prevState, {showSearchShortcutsForm: true});
     case at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:
       return Object.assign({}, prevState, {showSearchShortcutsForm: false});
     case at.PREVIEW_RESPONSE:
       if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {
         return prevState;
       }
       return Object.assign({}, prevState, {
         editForm: {
           index: prevState.editForm.index,
           previewResponse: action.data.preview,
-          previewUrl: action.data.url
-        }
+          previewUrl: action.data.url,
+        },
       });
     case at.PREVIEW_REQUEST:
       if (!prevState.editForm) {
         return prevState;
       }
       return Object.assign({}, prevState, {
         editForm: {
           index: prevState.editForm.index,
           previewResponse: null,
-          previewUrl: action.data.url
-        }
+          previewUrl: action.data.url,
+        },
       });
     case at.PREVIEW_REQUEST_CANCEL:
       if (!prevState.editForm) {
         return prevState;
       }
       return Object.assign({}, prevState, {
         editForm: {
           index: prevState.editForm.index,
-          previewResponse: null
-        }
+          previewResponse: null,
+        },
       });
     case at.SCREENSHOT_UPDATED:
       newRows = prevState.rows.map(row => {
         if (row && row.url === action.data.url) {
           hasMatch = true;
           return Object.assign({}, row, {screenshot: action.data.screenshot});
         }
         return row;
@@ -182,16 +198,18 @@ function TopSites(prevState = INITIAL_ST
     case at.PLACES_LINK_DELETED:
       if (!action.data) {
         return prevState;
       }
       newRows = prevState.rows.filter(site => action.data.url !== site.url);
       return Object.assign({}, prevState, {rows: newRows});
     case at.UPDATE_SEARCH_SHORTCUTS:
       return {...prevState, searchShortcuts: action.data.searchShortcuts};
+    case at.SNIPPETS_PREVIEW_MODE:
+      return {...prevState, rows: []};
     default:
       return prevState;
   }
 }
 
 function Dialog(prevState = INITIAL_STATE.Dialog, action) {
   switch (action.type) {
     case at.DIALOG_OPEN:
@@ -307,38 +325,38 @@ function Sections(prevState = INITIAL_ST
         rows: section.rows.map(item => {
           // find the item within the rows that is attempted to be bookmarked
           if (item.url === action.data.url) {
             const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;
             return Object.assign({}, item, {
               bookmarkGuid,
               bookmarkTitle,
               bookmarkDateCreated: dateAdded,
-              type: "bookmark"
+              type: "bookmark",
             });
           }
           return item;
-        })
+        }),
       }));
     case at.PLACES_SAVED_TO_POCKET:
       if (!action.data) {
         return prevState;
       }
       return prevState.map(section => Object.assign({}, section, {
         rows: section.rows.map(item => {
           if (item.url === action.data.url) {
             return Object.assign({}, item, {
               open_url: action.data.open_url,
               pocket_id: action.data.pocket_id,
               title: action.data.title,
-              type: "pocket"
+              type: "pocket",
             });
           }
           return item;
-        })
+        }),
       }));
     case at.PLACES_BOOKMARK_REMOVED:
       if (!action.data) {
         return prevState;
       }
       return prevState.map(section => Object.assign({}, section, {
         rows: section.rows.map(item => {
           // find the bookmark within the rows that is attempted to be removed
@@ -348,29 +366,31 @@ function Sections(prevState = INITIAL_ST
             delete newSite.bookmarkTitle;
             delete newSite.bookmarkDateCreated;
             if (!newSite.type || newSite.type === "bookmark") {
               newSite.type = "history";
             }
             return newSite;
           }
           return item;
-        })
+        }),
       }));
     case at.PLACES_LINK_DELETED:
     case at.PLACES_LINK_BLOCKED:
       if (!action.data) {
         return prevState;
       }
       return prevState.map(section =>
         Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));
     case at.DELETE_FROM_POCKET:
     case at.ARCHIVE_FROM_POCKET:
       return prevState.map(section =>
         Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));
+    case at.SNIPPETS_PREVIEW_MODE:
+      return prevState.map(section => ({...section, rows: []}));
     default:
       return prevState;
   }
 }
 
 function Snippets(prevState = INITIAL_STATE.Snippets, action) {
   switch (action.type) {
     case at.SNIPPETS_DATA:
@@ -394,23 +414,23 @@ function Pocket(prevState = INITIAL_STAT
       return {...prevState, isUserLoggedIn: !!action.data};
     case at.POCKET_CTA:
       return {
         ...prevState,
         pocketCta: {
           ctaButton: action.data.cta_button,
           ctaText: action.data.cta_text,
           ctaUrl: action.data.cta_url,
-          useCta: action.data.use_cta
-        }
+          useCta: action.data.use_cta,
+        },
       };
     default:
       return prevState;
   }
 }
 
 this.INITIAL_STATE = INITIAL_STATE;
 this.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;
 this.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;
 
-this.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections, Pocket};
+this.reducers = {TopSites, App, ASRouter, Snippets, Prefs, Dialog, Sections, Pocket};
 
 const EXPORTED_SYMBOLS = ["reducers", "INITIAL_STATE", "insertPinned", "TOP_SITES_DEFAULT_ROWS", "TOP_SITES_MAX_SITES_PER_ROW"];
--- a/browser/components/newtab/content-src/activity-stream-prerender.jsx
+++ b/browser/components/newtab/content-src/activity-stream-prerender.jsx
@@ -35,11 +35,11 @@ export function prerender(locale, string
   // need to sound the alarms:
   if (!html || !html.length) {
     throw new Error("no HTML returned");
   }
 
   return {
     html,
     state: store.getState(),
-    store
+    store,
   };
 }
--- a/browser/components/newtab/content-src/asrouter/asrouter-content.jsx
+++ b/browser/components/newtab/content-src/asrouter/asrouter-content.jsx
@@ -26,17 +26,17 @@ export const ASRouterUtils = {
     ASRouterUtils.sendMessage({type: "BLOCK_MESSAGE_BY_ID", data: {id}});
   },
   blockBundle(bundle) {
     ASRouterUtils.sendMessage({type: "BLOCK_BUNDLE", data: {bundle}});
   },
   executeAction(button_action) {
     ASRouterUtils.sendMessage({
       type: "USER_ACTION",
-      data: button_action
+      data: button_action,
     });
   },
   unblockById(id) {
     ASRouterUtils.sendMessage({type: "UNBLOCK_MESSAGE_BY_ID", data: {id}});
   },
   unblockBundle(bundle) {
     ASRouterUtils.sendMessage({type: "UNBLOCK_BUNDLE", data: {bundle}});
   },
@@ -52,23 +52,23 @@ export const ASRouterUtils = {
   },
   getEndpoint() {
     if (window.location.href.includes("endpoint")) {
       const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf("endpoint")));
       try {
         const endpoint = new URL(params.get("endpoint"));
         return {
           url: endpoint.href,
-          snippetId: params.get("snippetId")
+          snippetId: params.get("snippetId"),
         };
       } catch (e) {}
     }
 
     return null;
-  }
+  },
 };
 
 // Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />
 function shouldSendImpressionOnUpdate(nextProps, prevProps) {
   return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));
 }
 
 function generateMessages(content) {
@@ -79,17 +79,17 @@ function generateMessages(content) {
 
 // Elements allowed in snippet content
 const ALLOWED_TAGS = {
   b: <b />,
   i: <i />,
   u: <u />,
   strong: <strong />,
   em: <em />,
-  br: <br />
+  br: <br />,
 };
 
 /**
  * Transform an object (tag name: {url}) into (tag name: anchor) where the url
  * is used as href, in order to render links inside a Fluent.Localized component.
  */
 export function convertLinks(links, sendClick) {
   if (links) {
@@ -128,36 +128,39 @@ export class ASRouterUISurface extends R
     if (!message && !extraProps.message_id) {
       throw new Error(`You must provide a message_id for bundled messages`);
     }
     const eventType = `${message.provider || bundle.provider}_user_event`;
     ASRouterUtils.sendTelemetry({
       message_id: message.id || extraProps.message_id,
       source: extraProps.id,
       action: eventType,
-      ...extraProps
+      ...extraProps,
     });
   }
 
   sendImpression(extraProps) {
     ASRouterUtils.sendMessage({type: "IMPRESSION", data: this.state.message});
     this.sendUserActionTelemetry({event: "IMPRESSION", ...extraProps});
   }
 
   // If link has a `metric` data attribute send it as part of the `value`
   // telemetry field which can have arbitrary values.
   // Used for router messages with links as part of the content.
   sendClick(event) {
     const metric = {
       value: event.target.dataset.metric,
       // Used for the `source` of the event. Needed to differentiate
       // from other snippet or onboarding events that may occur.
-      id: "NEWTAB_FOOTER_BAR_CONTENT"
+      id: "NEWTAB_FOOTER_BAR_CONTENT",
     };
     this.sendUserActionTelemetry({event: "CLICK_BUTTON", ...metric});
+    if (!this.state.message.content.do_not_autoblock) {
+      ASRouterUtils.blockById(this.state.message.id);
+    }
   }
 
   onBlockById(id) {
     return () => ASRouterUtils.blockById(id);
   }
 
   clearBundle(bundle) {
     return () => ASRouterUtils.blockBundle(bundle);
@@ -237,21 +240,38 @@ export class ASRouterUISurface extends R
         {...this.state.bundle}
         UISurface="NEWTAB_OVERLAY"
         onAction={ASRouterUtils.executeAction}
         onDoneButton={this.clearBundle(this.state.bundle.bundle)}
         getNextMessage={ASRouterUtils.getNextMessage}
         sendUserActionTelemetry={this.sendUserActionTelemetry} />);
   }
 
+  renderPreviewBanner() {
+    if (this.state.message.provider !== "preview") {
+      return null;
+    }
+
+    return (
+      <div className="snippets-preview-banner">
+        <span className="icon icon-small-spacer icon-info" />
+        <span>Preview Purposes Only</span>
+      </div>
+    );
+  }
+
   render() {
     const {message, bundle} = this.state;
     if (!message.id && !bundle.template) { return null; }
-    if (bundle.template === "onboarding") { return this.renderOnboarding(); }
-    return this.renderSnippets();
+    return (
+      <div>
+        {this.renderPreviewBanner()}
+        {bundle.template === "onboarding" ? this.renderOnboarding() : this.renderSnippets()}
+      </div>
+    );
   }
 }
 
 ASRouterUISurface.defaultProps = {document: global.document};
 
 export class ASRouterContent {
   constructor() {
     this.initialized = false;
--- a/browser/components/newtab/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx
+++ b/browser/components/newtab/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx
@@ -51,10 +51,10 @@ export class ImpressionsWrapper extends 
 
   render() {
     return this.props.children;
   }
 }
 
 ImpressionsWrapper.defaultProps = {
   document: global.document,
-  sendOnMount: true
+  sendOnMount: true,
 };
--- a/browser/components/newtab/content-src/asrouter/components/SnippetBase/_SnippetBase.scss
+++ b/browser/components/newtab/content-src/asrouter/components/SnippetBase/_SnippetBase.scss
@@ -51,8 +51,23 @@
       inset-inline-end: 24px;
     }
   }
 
   &:hover .blockButton {
     display: block;
   }
 }
+
+.snippets-preview-banner {
+  font-size: 15px;
+  line-height: 42px;
+  color: $grey-60-70;
+  background: $grey-30-60;
+  text-align: center;
+  position: absolute;
+  top: 0;
+  width: 100%;
+
+  span {
+    vertical-align: middle;
+  }
+}
--- a/browser/components/newtab/content-src/asrouter/schemas/message-format.md
+++ b/browser/components/newtab/content-src/asrouter/schemas/message-format.md
@@ -18,17 +18,17 @@ Field name | Type     | Required | Descr
 ```javascript
 {
   id: "ONBOARDING_1",
   template: "simple_snippet",
   content: {
     title: "Find it faster",
     body: "Access all of your favorite search engines with a click. Search the whole Web or just one website from the search box."
   },
-  targeting: "hasFxAccount && !addonsInfo.addons['activity-stream@mozilla.org']",
+  targeting: "usesFirefoxSync && !addonsInfo.addons['activity-stream@mozilla.org']",
   frequency: {
     lifetime: 20,
     custom: [{period: "daily", cap: 5}, {period: 3600000, cap: 1}]
   }
 }
 ```
 
 ### A Bundled Message example
@@ -85,24 +85,28 @@ Grouping multiple allowed elements is no
 For a more in-depth explanation of JEXL syntax you can read the [Normady project docs](https://normandy.readthedocs.io/en/stable/user/filters.html#jexl-basics).
 
 Currently we expose the following targeting attributes that can be used by messages:
 
 Name | Type | Example value | Description
 ---  | ---  | ---           | ---
 `addonsInfo` | `Object` | [example below](#addonsinfo-example) | Information about the addons the user has installed
 `devToolsOpenedCount` | `Integer` | Number of usages of the web console or scratchpad
-`hasFxAccount` | `Boolean` | `true` | Does the user have a firefox account
+`usesFirefoxSync` | `Boolean` | `true` | Does the user have a firefox account
 `isDefaultBrowser` | `Boolean` or `null` | Is Firefox the user's default browser? If we could not determine the default browser, this value is `null`
 `profileAgeCreated` | Number | `1522843725924` | Profile creation timestamp
 `profileAgeReset` | `Number` or `undefined` | `1522843725924` | When (if) the profile was reset
 `currentDate` | `Date` | `Date 2018-08-22T15:48:04.100Z` | Date object of current time in UTC
 `searchEngines` | `Object` | [example below](#searchengines-example) | Information about the current and available search engines
 `browserSettings.attribution` | `Object` or `undefined` | [example below](#attribution-example) | Attribution for the source of of where the browser was downloaded.
 `providerCohorts` | `Object` | `{onboarding: "hello"}` | Cohorts defined for all providers
+`previousSessionEnd` | `Number` | `1536325802800` | Timestamp in milliseconds of previously closed session
+`totalBookmarksCount` | `Number` | `8` | Total number of bookmarks
+`firefoxVersion` | `Number` | `64` | The major Firefox version of the browser 
+`region` | `String` | `US` | Country code retrieved from `location.services.mozilla.com` can be `""` if request did not finish, encountered an error
 #### addonsInfo Example
 
 ```javascript
 {
   "addons": {
     ...
     "activity-stream@mozilla.org": {
       "version": "2018.07.06.1113-783442c0",
@@ -148,24 +152,24 @@ Note that `attribution` can be `undefine
 A message needs to contain the `targeting` property (JEXL string) which is evaluated against the provided attributes.
 Examples:
 
 ```javascript
 {
   "id": "7864",
   "content": {...},
   // simple equality check
-  "targeting": "hasFxAccount == true"
+  "targeting": "usesFirefoxSync == true"
 }
 
 {
   "id": "7865",
   "content": {...},
   // using JEXL transforms and combining two attributes
-  "targeting": "hasFxAccount == true && profileAgeCreated > '2018-01-07'|date"
+  "targeting": "usesFirefoxSync == true && profileAgeCreated > '2018-01-07'|date"
 }
 
 {
   "id": "7866",
   "content": {...},
   // targeting addon information
   "targeting": "addonsInfo.addons['activity-stream@mozilla.org'].name == 'Activity Stream'"
 }
--- a/browser/components/newtab/content-src/asrouter/schemas/provider-response.schema.json
+++ b/browser/components/newtab/content-src/asrouter/schemas/provider-response.schema.json
@@ -1,13 +1,13 @@
 {
   "title": "ProviderResponse",
   "description": "A response object for remote providers of AS Router",
   "type": "object",
-  "version": "0.1.0",
+  "version": "6.1.0",
   "properties": {
     "messages": {
       "type": "array",
       "description": "An array of router messages",
       "items": {
         "title": "RouterMessage",
         "description": "A definition of an individual message",
         "type": "object",
--- a/browser/components/newtab/content-src/asrouter/template-utils.js
+++ b/browser/components/newtab/content-src/asrouter/template-utils.js
@@ -3,15 +3,15 @@ export function safeURI(url) {
     return "";
   }
   const {protocol} = new URL(url);
   const isAllowed = [
     "http:",
     "https:",
     "data:",
     "resource:",
-    "chrome:"
+    "chrome:",
   ].includes(protocol);
   if (!isAllowed) {
     console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console
   }
   return isAllowed ? url : "";
 }
--- a/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json
+++ b/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json
@@ -39,18 +39,30 @@
       "description": "Id of localized string or message override."
     },
     "info_icon": {
       "type": "object",
       "properties": {
         "label": {
           "oneOf": [
             {
-              "type": "string",
-              "description": "Text for button tooltip used to provide information about the doorhanger."
+              "type": "object",
+              "properties": {
+                "attributes": {
+                  "type": "object",
+                  "properties": {
+                    "tooltiptext": {
+                      "type": "string",
+                      "description": "Text for button tooltip used to provide information about the doorhanger."
+                    }
+                  },
+                  "required": ["tooltiptext"]
+                }
+              },
+              "required": ["attributes"]
             },
             {
               "type": "object",
               "properties": {
                 "string_id": {
                   "type": "string",
                   "description": "Id of localized string used to provide information about the doorhanger."
                 }
--- a/browser/components/newtab/content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx
+++ b/browser/components/newtab/content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx
@@ -8,17 +8,17 @@ class OnboardingCard extends React.PureC
   }
 
   onClick() {
     const {props} = this;
     const ping = {
       event: "CLICK_BUTTON",
       message_id: props.id,
       id: props.UISurface,
-      includeClientID: true
+      includeClientID: true,
     };
     props.sendUserActionTelemetry(ping);
     props.onAction(props.content.button_action);
   }
 
   render() {
     const {content} = this.props;
     return (
--- a/browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx
+++ b/browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx
@@ -9,16 +9,19 @@ export class SimpleSnippet extends React
   constructor(props) {
     super(props);
     this.onButtonClick = this.onButtonClick.bind(this);
   }
 
   onButtonClick() {
     this.props.sendUserActionTelemetry({event: "CLICK_BUTTON", id: this.props.UISurface});
     this.props.onAction(this.props.content.button_action);
+    if (!this.props.content.do_not_autoblock) {
+      this.props.onBlock();
+    }
   }
 
   renderTitle() {
     const {title} = this.props.content;
     return title ? <h3 className="title">{title}</h3> : null;
   }
 
   renderTitleIcon() {
--- a/browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.schema.json
+++ b/browser/components/newtab/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.schema.json
@@ -70,16 +70,20 @@
     "button_background_color": {
       "type": "string",
       "description": "The background color of the button. Valid CSS color."
     },
     "tall": {
       "type": "boolean",
       "description": "To be used by fundraising only, increases height to roughly 120px. Defaults to false."
     },
+    "do_not_autoblock": {
+      "type": "boolean",
+      "description": "Used to prevent blocking the snippet after the CTA (link or button) has been clicked"
+    },
     "links": {
       "additionalProperties": {
         "url": {
           "allOf": [
             {"$ref": "#/definitions/link_url"},
             {"description": "The url where the link points to."}
           ]
         },
--- a/browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
+++ b/browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
@@ -77,28 +77,39 @@ export class ASRouterAdmin extends React
     if (!this.state.messages) {
       return null;
     }
     return (<table><tbody>
       {this.state.messages.map(msg => this.renderMessageItem(msg))}
     </tbody></table>);
   }
 
+  renderTableHead() {
+    return (<thead>
+      <tr className="message-item">
+        <td>id</td>
+        <td>source</td>
+        <td>last updated</td>
+      </tr>
+    </thead>);
+  }
+
   renderProviders() {
-    return (<table><tbody>
+    return (<table>{this.renderTableHead()}<tbody>
       {this.state.providers.map((provider, i) => {
         let label = "(local)";
         if (provider.type === "remote") {
           label = <a target="_blank" href={provider.url}>{provider.url}</a>;
         } else if (provider.type === "remote-settings") {
           label = `${provider.bucket} (Remote Settings)`;
         }
         return (<tr className="message-item" key={i}>
           <td>{provider.id}</td>
           <td>{label}</td>
+          <td>{provider.lastUpdated ? new Date(provider.lastUpdated).toString() : ""}</td>
         </tr>);
       })}
     </tbody></table>);
   }
 
   render() {
     return (<div className="asrouter-admin outer-wrapper">
       <h1>AS Router Admin</h1>
--- a/browser/components/newtab/content-src/components/Base/Base.jsx
+++ b/browser/components/newtab/content-src/components/Base/Base.jsx
@@ -35,18 +35,17 @@ function debounce(func, wait) {
 
     timer = setTimeout(wakeUp, wait);
     func.apply(this, args);
   };
 }
 
 export class _Base extends React.PureComponent {
   componentWillMount() {
-    const {App, locale} = this.props;
-    this.sendNewTabRehydrated(App);
+    const {locale} = this.props;
     addLocaleDataForReactIntl(locale);
     if (this.props.isFirstrun) {
       global.document.body.classList.add("welcome", "hide-main");
     }
   }
 
   componentDidMount() {
     // Request state AFTER the first render to ensure we don't cause the
@@ -57,87 +56,45 @@ export class _Base extends React.PureCom
       this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));
     }
   }
 
   componentWillUnmount() {
     this.updateTheme();
   }
 
-  hasTopStoriesSectionChanged(nextProps) {
-    const nPropsSections = nextProps.Sections.find(section => section.id === "topstories");
-    const tPropsSections = this.props.Sections.find(section => section.id === "topstories");
-    if (nPropsSections && nPropsSections.options) {
-      if (!tPropsSections || !tPropsSections.options) {
-        return true;
-      }
-      if (nPropsSections.options.show_spocs !== tPropsSections.options.show_spocs) {
-        return true;
-      }
-      if (nPropsSections.options.stories_endpoint !== tPropsSections.options.stories_endpoint) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  componentWillUpdate(nextProps) {
+  componentWillUpdate() {
     this.updateTheme();
-    if (this.hasTopStoriesSectionChanged(nextProps)) {
-      this.renderNotified = false;
-    }
-    this.sendNewTabRehydrated(nextProps.App);
   }
 
   updateTheme() {
     const bodyClassName = [
       "activity-stream",
       // If we skipped the about:welcome overlay and removed the CSS classes
       // we don't want to add them back to the Activity Stream view
       document.body.classList.contains("welcome") ? "welcome" : "",
-      document.body.classList.contains("hide-main") ? "hide-main" : ""
+      document.body.classList.contains("hide-main") ? "hide-main" : "",
     ].filter(v => v).join(" ");
     global.document.body.className = bodyClassName;
   }
 
-  // The NEW_TAB_REHYDRATED event is used to inform feeds that their
-  // data has been consumed e.g. for counting the number of tabs that
-  // have rendered that data.
-  sendNewTabRehydrated(App) {
-    if (App && App.initialized && !this.renderNotified) {
-      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));
-      this.renderNotified = true;
-    }
-  }
-
   render() {
     const {props} = this;
     const {App, locale, strings} = props;
     const {initialized} = App;
 
     const prefs = props.Prefs.values;
-    if (prefs.asrouterExperimentEnabled && window.location.hash === "#asrouter") {
+    if (prefs["asrouter.devtoolsEnabled"] && window.location.hash === "#asrouter") {
       return (<ASRouterAdmin />);
     }
 
     if (!props.isPrerendered && !initialized) {
       return null;
     }
 
-    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in
-    // the new simplified onboarding experiment. CSS hacks ftw
-    let isOnboardingEnabled = false;
-    try {
-      isOnboardingEnabled = JSON.parse(prefs["asrouter.messageProviders"]).find(i => i.id === "onboarding").enabled;
-    } catch (e) {}
-
-    if (isOnboardingEnabled) {
-      global.document.body.classList.add("hide-onboarding");
-    }
-
     return (<IntlProvider locale={locale} messages={strings}>
         <ErrorBoundary className="base-content-fallback">
           <BaseContent {...this.props} />
         </ErrorBoundary>
       </IntlProvider>);
   }
 }
 
@@ -177,17 +134,17 @@ export class BaseContent extends React.P
     const {initialized} = App;
     const prefs = props.Prefs.values;
 
     const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);
 
     const outerClassName = [
       "outer-wrapper",
       shouldBeFixedToTop && "fixed-to-top",
-      prefs.showSearch && this.state.fixedSearch && "fixed-search"
+      prefs.showSearch && this.state.fixedSearch && "fixed-search",
     ].filter(v => v).join(" ");
 
     return (
       <div>
         <div className={outerClassName}>
           <main>
             {prefs.showSearch &&
               <div className="non-collapsible-section">
--- a/browser/components/newtab/content-src/components/Base/_Base.scss
+++ b/browser/components/newtab/content-src/components/Base/_Base.scss
@@ -54,17 +54,17 @@ main {
 }
 
 .body-wrapper {
   // Hide certain elements so the page structure is fixed, e.g., placeholders,
   // while avoiding flashes of changing content, e.g., icons and text
   $selectors-to-hide: '
     .section-title,
     .sections-list .section:last-of-type,
-    .topic
+    .topics
   ';
 
   #{$selectors-to-hide} {
     opacity: 0;
   }
 
   &.on {
     #{$selectors-to-hide} {
--- a/browser/components/newtab/content-src/components/Card/Card.jsx
+++ b/browser/components/newtab/content-src/components/Card/Card.jsx
@@ -21,17 +21,17 @@ const gImageLoading = new Map();
  */
 export class _Card extends React.PureComponent {
   constructor(props) {
     super(props);
     this.state = {
       activeCard: null,
       imageLoaded: false,
       showContextMenu: false,
-      cardImage: null
+      cardImage: null,
     };
     this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
     this.onMenuUpdate = this.onMenuUpdate.bind(this);
     this.onLinkClick = this.onLinkClick.bind(this);
   }
 
   /**
    * Helper to conditionally load an image and update state when it loads.
@@ -103,17 +103,17 @@ export class _Card extends React.PureCom
 
     return nextState;
   }
 
   onMenuButtonClick(event) {
     event.preventDefault();
     this.setState({
       activeCard: this.props.index,
-      showContextMenu: true
+      showContextMenu: true,
     });
   }
 
   /**
    * Report to telemetry additional information about the item.
    */
   _getTelemetryInfo() {
     // Filter out "history" type for being the default
@@ -124,43 +124,43 @@ export class _Card extends React.PureCom
     return null;
   }
 
   onLinkClick(event) {
     event.preventDefault();
     if (this.props.link.type === "download") {
       this.props.dispatch(ac.OnlyToMain({
         type: at.SHOW_DOWNLOAD_FILE,
-        data: this.props.link
+        data: this.props.link,
       }));
     } else {
       const {altKey, button, ctrlKey, metaKey, shiftKey} = event;
       this.props.dispatch(ac.OnlyToMain({
         type: at.OPEN_LINK,
-        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})
+        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),
       }));
     }
     if (this.props.isWebExtension) {
       this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {
         source: this.props.eventSource,
         url: this.props.link.url,
-        action_position: this.props.index
+        action_position: this.props.index,
       }));
     } else {
       this.props.dispatch(ac.UserEvent(Object.assign({
         event: "CLICK",
         source: this.props.eventSource,
-        action_position: this.props.index
+        action_position: this.props.index,
       }, this._getTelemetryInfo())));
 
       if (this.props.shouldSendImpressionStats) {
         this.props.dispatch(ac.ImpressionStats({
           source: this.props.eventSource,
           click: 0,
-          tiles: [{id: this.props.link.guid, pos: this.props.index}]
+          tiles: [{id: this.props.link.guid, pos: this.props.index}],
         }));
       }
     }
   }
 
   onMenuUpdate(showContextMenu) {
     this.setState({showContextMenu});
   }
@@ -204,17 +204,17 @@ export class _Card extends React.PureCom
     // Display "now" as "trending" until we have new strings #3402
     const {icon, intlID} = cardContextTypes[link.type === "now" ? "trending" : link.type] || {};
     const hasImage = this.state.cardImage || link.hasImage;
     const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : "none"};
     const outerClassName = [
       "card-outer",
       className,
       isContextMenuOpen && "active",
-      props.placeholder && "placeholder"
+      props.placeholder && "placeholder",
     ].filter(v => v).join(" ");
 
     return (<li className={outerClassName}>
       <a href={link.type === "pocket" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>
         <div className="card">
           <div className="card-preview-image-outer">
             {hasImage &&
               <div className={`card-preview-image${this.state.imageLoaded ? " loaded" : ""}`} style={imageStyle} />
@@ -226,17 +226,17 @@ export class _Card extends React.PureCom
               <div className="card-host-name">
                 {link.hostname.slice(0, 100)}{link.type === "download" && `  \u2014 ${link.description}`}
               </div>
             }
             <div className={[
               "card-text",
               icon ? "" : "no-context",
               link.description ? "" : "no-description",
-              link.hostname ? "" : "no-host-name"
+              link.hostname ? "" : "no-host-name",
             ].join(" ")}>
               <h4 className="card-title" dir="auto">{link.title}</h4>
               <p className="card-description" dir="auto">{link.description}</p>
             </div>
             <div className="card-context">
               {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}
               {link.icon && link.context && <span className="card-context-icon icon" style={{backgroundImage: `url('${link.icon}')`}} />}
               {intlID && !link.context && <div className="card-context-label"><FormattedMessage id={intlID} defaultMessage="Visited" /></div>}
--- a/browser/components/newtab/content-src/components/Card/types.js
+++ b/browser/components/newtab/content-src/components/Card/types.js
@@ -1,26 +1,26 @@
 export const cardContextTypes = {
   history: {
     intlID: "type_label_visited",
-    icon: "history-item"
+    icon: "history-item",
   },
   bookmark: {
     intlID: "type_label_bookmarked",
-    icon: "bookmark-added"
+    icon: "bookmark-added",
   },
   trending: {
     intlID: "type_label_recommended",
-    icon: "trending"
+    icon: "trending",
   },
   now: {
     intlID: "type_label_now",
-    icon: "now"
+    icon: "now",
   },
   pocket: {
     intlID: "type_label_pocket",
-    icon: "pocket"
+    icon: "pocket",
   },
   download: {
     intlID: "type_label_downloaded",
-    icon: "download"
-  }
+    icon: "download",
+  },
 };
--- a/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
+++ b/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
@@ -64,23 +64,23 @@ export class _CollapsibleSection extends
     // If props.collapsed is undefined handler shouldn't do anything.
     if (!this.sectionBody || this.props.collapsed === undefined) {
       return;
     }
 
     // Get the current height of the body so max-height transitions can work
     this.setState({
       isAnimating: true,
-      maxHeight: `${this.sectionBody.scrollHeight}px`
+      maxHeight: `${this.sectionBody.scrollHeight}px`,
     });
     const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);
     this.props.dispatch(action);
     this.props.dispatch(ac.UserEvent({
       event: userEvent,
-      source: this.props.source
+      source: this.props.source,
     }));
   }
 
   onTransitionEnd(event) {
     // Only update the animating state for our own transition (not a child's)
     if (event.target === event.currentTarget) {
       this.setState({isAnimating: false});
     }
@@ -181,14 +181,14 @@ export class _CollapsibleSection extends
     );
   }
 }
 
 _CollapsibleSection.defaultProps = {
   document: global.document || {
     addEventListener: () => {},
     removeEventListener: () => {},
-    visibilityState: "hidden"
+    visibilityState: "hidden",
   },
-  Prefs: {values: {}}
+  Prefs: {values: {}},
 };
 
 export const CollapsibleSection = injectIntl(_CollapsibleSection);
--- a/browser/components/newtab/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx
+++ b/browser/components/newtab/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx
@@ -115,17 +115,17 @@ export class ComponentPerfTimer extends 
     try {
       const firstRenderKey = `${this.props.id}_first_render_ts`;
       // value has to be Int32.
       const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -
                              this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);
       this.props.dispatch(ac.OnlyToMain({
         type: at.SAVE_SESSION_PERF_DATA,
         // highlights_data_late_by_ms, topsites_data_late_by_ms.
-        data: {[`${this.props.id}_data_late_by_ms`]: value}
+        data: {[`${this.props.id}_data_late_by_ms`]: value},
       }));
     } catch (ex) {
       // If this failed, it's likely because the `privacy.resistFingerprinting`
       // pref is true.
     }
   }
 
   _sendPaintedEvent() {
@@ -139,17 +139,17 @@ export class ComponentPerfTimer extends 
     this.perfSvc.mark(key);
 
     try {
       const data = {};
       data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);
 
       this.props.dispatch(ac.OnlyToMain({
         type: at.SAVE_SESSION_PERF_DATA,
-        data
+        data,
       }));
     } catch (ex) {
       // If this failed, it's likely because the `privacy.resistFingerprinting`
       // pref is true.  We should at least not blow up, and should continue
       // to set this._timestampHandled to avoid going through this again.
     }
   }
 
--- a/browser/components/newtab/content-src/components/LinkMenu/LinkMenu.jsx
+++ b/browser/components/newtab/content-src/components/LinkMenu/LinkMenu.jsx
@@ -20,17 +20,17 @@ export class _LinkMenu extends React.Pur
       if (!type && id) {
         option.label = props.intl.formatMessage({id: string_id || id});
         option.onClick = () => {
           props.dispatch(action);
           if (userEvent) {
             const userEventData = Object.assign({
               event: userEvent,
               source,
-              action_position: index
+              action_position: index,
             }, siteInfo);
             props.dispatch(ac.UserEvent(userEventData));
           }
           if (impression && props.shouldSendImpressionStats) {
             props.dispatch(impression);
           }
         };
       }
--- a/browser/components/newtab/content-src/components/SectionMenu/SectionMenu.jsx
+++ b/browser/components/newtab/content-src/components/SectionMenu/SectionMenu.jsx
@@ -25,17 +25,17 @@ export class _SectionMenu extends React.
       const {action, id, type, userEvent} = option;
       if (!type && id) {
         option.label = props.intl.formatMessage({id});
         option.onClick = () => {
           props.dispatch(action);
           if (userEvent) {
             props.dispatch(ac.UserEvent({
               event: userEvent,
-              source: props.source
+              source: props.source,
             }));
           }
         };
       }
       return option;
     });
 
     // This is for accessibility to support making each item tabbable.
--- a/browser/components/newtab/content-src/components/Sections/Sections.jsx
+++ b/browser/components/newtab/content-src/components/Sections/Sections.jsx
@@ -1,11 +1,11 @@
+import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
 import {Card, PlaceholderCard} from "content-src/components/Card/Card";
 import {FormattedMessage, injectIntl} from "react-intl";
-import {actionCreators as ac} from "common/Actions.jsm";
 import {CollapsibleSection} from "content-src/components/CollapsibleSection/CollapsibleSection";
 import {ComponentPerfTimer} from "content-src/components/ComponentPerfTimer/ComponentPerfTimer";
 import {connect} from "react-redux";
 import {MoreRecommendations} from "content-src/components/MoreRecommendations/MoreRecommendations";
 import {PocketLoggedInCta} from "content-src/components/PocketLoggedInCta/PocketLoggedInCta";
 import React from "react";
 import {Topics} from "content-src/components/Topics/Topics";
 import {TopSites} from "content-src/components/TopSites/TopSites";
@@ -35,17 +35,17 @@ export class Section extends React.PureC
       cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;
     }
     const maxCards = cardsPerRow * this.numRows;
     const cards = props.rows.slice(0, maxCards);
 
     if (this.needsImpressionStats(cards)) {
       props.dispatch(ac.ImpressionStats({
         source: props.eventSource,
-        tiles: cards.map(link => ({id: link.guid}))
+        tiles: cards.map(link => ({id: link.guid})),
       }));
       this.impressionCardGuids = cards.map(link => link.guid);
     }
   }
 
   // This sends an event when a user sees a set of new content. If content
   // changes while the page is hidden (i.e. preloaded or on a hidden tab),
   // only send the event if the page becomes visible again.
@@ -73,16 +73,20 @@ export class Section extends React.PureC
           }
           props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
         }
       };
       props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
     }
   }
 
+  componentWillMount() {
+    this.sendNewTabRehydrated(this.props.initialized);
+  }
+
   componentDidMount() {
     if (this.props.rows.length && !this.props.pref.collapsed) {
       this.sendImpressionStatsOrAddListener();
     }
   }
 
   componentDidUpdate(prevProps) {
     const {props} = this;
@@ -98,16 +102,20 @@ export class Section extends React.PureC
         // or if we are expanding a section that was collapsed.
         (wasCollapsed && !isCollapsed)
       )
     ) {
       this.sendImpressionStatsOrAddListener();
     }
   }
 
+  componentWillUpdate(nextProps) {
+    this.sendNewTabRehydrated(nextProps.initialized);
+  }
+
   componentWillUnmount() {
     if (this._onVisibilityChange) {
       this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
     }
   }
 
   needsImpressionStats(cards) {
     if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {
@@ -118,38 +126,55 @@ export class Section extends React.PureC
       if (cards[i].guid !== this.impressionCardGuids[i]) {
         return true;
       }
     }
 
     return false;
   }
 
+  // The NEW_TAB_REHYDRATED event is used to inform feeds that their
+  // data has been consumed e.g. for counting the number of tabs that
+  // have rendered that data.
+  sendNewTabRehydrated(initialized) {
+    if (initialized && !this.renderNotified) {
+      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));
+      this.renderNotified = true;
+    }
+  }
+
   render() {
     const {
       id, eventSource, title, icon, rows, Pocket, topics,
       emptyState, dispatch, compactCards, read_more_endpoint,
       contextMenuOptions, initialized, learnMore,
-      pref, privacyNoticeURL, isFirst, isLast
+      pref, privacyNoticeURL, isFirst, isLast,
     } = this.props;
 
     const waitingForSpoc = id === "topstories" && this.props.Pocket.waitingForSpoc;
     const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;
     const {numRows} = this;
     const maxCards = maxCardsPerRow * numRows;
     const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;
 
-    const shouldShowPocketCta = (id === "topstories" &&
-      Pocket.pocketCta.useCta && !Pocket.isUserLoggedIn);
+    const {pocketCta, isUserLoggedIn} = Pocket || {};
+    const {useCta} = pocketCta || {};
+
+    // Don't display anything until we have a definitve result from Pocket,
+    // to avoid a flash of logged out state while we render.
+    const isPocketLoggedInDefined = (isUserLoggedIn === true || isUserLoggedIn === false);
 
-    // Show topics only for top stories and if it's not initialized yet (so
-    // content doesn't shift when it is loaded) or has loaded with topics
+    const shouldShowPocketCta = (id === "topstories" &&
+      useCta && isUserLoggedIn === false);
+
+    // Show topics only for top stories and if it has loaded with topics.
+    // The classs .top-stories-bottom-container ensures content doesn't shift as things load.
     const shouldShowTopics = (id === "topstories" &&
-      (!topics || topics.length > 0) &&
-      !shouldShowPocketCta);
+      (topics && topics.length > 0) &&
+      ((useCta && isUserLoggedIn === true) || (!useCta && isPocketLoggedInDefined)));
 
     const realRows = rows.slice(0, maxCards);
 
     // The empty state should only be shown after we have initialized and there is no content.
     // Otherwise, we should show placeholders.
     const shouldShowEmptyState = initialized && !rows.length;
 
     const cards = [];
@@ -178,17 +203,17 @@ export class Section extends React.PureC
         ) : (
           <PlaceholderCard key={i} className={className} />
         ));
       }
     }
 
     const sectionClassName = [
       "section",
-      compactCards ? "compact-cards" : "normal-cards"
+      compactCards ? "compact-cards" : "normal-cards",
     ].join(" ");
 
     // <Section> <-- React component
     // <section> <-- HTML5 element
     return (<ComponentPerfTimer {...this.props}>
       <CollapsibleSection className={sectionClassName} icon={icon}
         title={title}
         id={id}
@@ -229,34 +254,34 @@ export class Section extends React.PureC
   }
 }
 
 Section.defaultProps = {
   document: global.document,
   rows: [],
   emptyState: {},
   pref: {},
-  title: ""
+  title: "",
 };
 
 export const SectionIntl = connect(state => ({Prefs: state.Prefs, Pocket: state.Pocket}))(injectIntl(Section));
 
 export class _Sections extends React.PureComponent {
   renderSections() {
     const sections = [];
     const enabledSections = this.props.Sections.filter(section => section.enabled);
     const {sectionOrder, "feeds.topsites": showTopSites} = this.props.Prefs.values;
     // Enabled sections doesn't include Top Sites, so we add it if enabled.
     const expectedCount = enabledSections.length + ~~showTopSites;
 
     for (const sectionId of sectionOrder.split(",")) {
       const commonProps = {
         key: sectionId,
         isFirst: sections.length === 0,
-        isLast: sections.length === expectedCount - 1
+        isLast: sections.length === expectedCount - 1,
       };
       if (sectionId === "topsites" && showTopSites) {
         sections.push(<TopSites {...commonProps} />);
       } else {
         const section = enabledSections.find(s => s.id === sectionId);
         if (section) {
           sections.push(<SectionIntl {...section} {...commonProps} />);
         }
--- a/browser/components/newtab/content-src/components/Sections/_Sections.scss
+++ b/browser/components/newtab/content-src/components/Sections/_Sections.scss
@@ -78,16 +78,17 @@
     &.more-recommendations {
       font-weight: normal;
       font-size: 13px;
     }
   }
 
   @media (min-width: $break-point-large) {
     line-height: 16px;
+    height: 16px;
   }
 
   // This is a clearfix to for the more-recommendations link which is floating and causes
   // some jank when we set overflow:hidden for the animation.
   &::after {
     clear: both;
     content: '';
     display: table;
--- a/browser/components/newtab/content-src/components/StartupOverlay/StartupOverlay.jsx
+++ b/browser/components/newtab/content-src/components/StartupOverlay/StartupOverlay.jsx
@@ -12,33 +12,33 @@ export class _StartupOverlay extends Rea
     this.initScene = this.initScene.bind(this);
     this.removeOverlay = this.removeOverlay.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
 
     this.state = {
       emailInput: "",
       overlayRemoved: false,
       flowId: "",
-      flowBeginTime: 0
+      flowBeginTime: 0,
     };
     this.didFetch = false;
   }
 
   async componentWillUpdate() {
     if (this.props.fxa_endpoint && !this.didFetch) {
       try {
         this.didFetch = true;
         const fxaParams = "entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email";
         const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`);
         if (response.status === 200) {
           const {flowId, flowBeginTime} = await response.json();
           this.setState({flowId, flowBeginTime});
         }
       } catch (error) {
-        this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {value: "FXA_METRICS_ERROR"}}));
+        this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: "FXA_METRICS_ERROR"}}));
       }
     }
   }
 
   componentDidMount() {
     this.initScene();
   }
 
@@ -119,17 +119,17 @@ export class _StartupOverlay extends Rea
                 <input name="flow_begin_time" type="hidden" value={this.state.flowBeginTime} />
                 <span className="error">{this.props.intl.formatMessage({id: "firstrun_invalid_input"})}</span>
                 <input className="email-input" name="email" type="email" required="true" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: "firstrun_email_input_placeholder"})} onChange={this.onInputChange} />
                 <div className="extra-links">
                   <FormattedMessage
                     id="firstrun_extra_legal_links"
                     values={{
                       terms: termsLink,
-                      privacy: privacyLink
+                      privacy: privacyLink,
                     }} />
                 </div>
                 <button className="continue-button" type="submit"><FormattedMessage id="firstrun_continue_to_login" /></button>
               </form>
               <button className="skip-button" disabled={!!this.state.emailInput} onClick={this.clickSkip}><FormattedMessage id="firstrun_skip_login" /></button>
             </div>
           </div>
         </div>
--- a/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx
@@ -36,17 +36,17 @@ export class SearchShortcutsForm extends
     this.onSaveButtonClick = this.onSaveButtonClick.bind(this);
 
     // clone the shortcuts and add them to the state so we can add isSelected property
     const shortcuts = [];
     const {rows, searchShortcuts} = props.TopSites;
     searchShortcuts.forEach(shortcut => {
       shortcuts.push({
         ...shortcut,
-        isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword)
+        isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword),
       });
     });
     this.state = {shortcuts};
   }
 
   handleChange(event) {
     const {target} = event;
     const {name, checked} = target;
@@ -79,45 +79,45 @@ export class SearchShortcutsForm extends
       }
     });
 
     // Tell the feed to do the work.
     this.props.dispatch(ac.OnlyToMain({
       type: at.UPDATE_PINNED_SEARCH_SHORTCUTS,
       data: {
         addedShortcuts: pinQueue,
-        deletedShortcuts: unpinQueue
-      }
+        deletedShortcuts: unpinQueue,
+      },
     }));
 
     // Send the Telemetry pings.
     pinQueue.forEach(shortcut => {
       this.props.dispatch(ac.UserEvent({
         source: TOP_SITES_SOURCE,
         event: "SEARCH_EDIT_ADD",
-        value: {search_vendor: shortcut.searchVendor}
+        value: {search_vendor: shortcut.searchVendor},
       }));
     });
     unpinQueue.forEach(shortcut => {
       this.props.dispatch(ac.UserEvent({
         source: TOP_SITES_SOURCE,
         event: "SEARCH_EDIT_DELETE",
-        value: {search_vendor: shortcut.searchVendor}
+        value: {search_vendor: shortcut.searchVendor},
       }));
     });
 
     this.props.onClose();
   }
 
   _searchTopSite(shortcut) {
     return {
       url: shortcut.url,
       searchTopSite: true,
       label: shortcut.keyword,
-      searchVendor: shortcut.shortURL
+      searchVendor: shortcut.shortURL,
     };
   }
 
   render() {
     return (
       <form className="topsite-form">
         <div className="search-shortcuts-container">
           <h3 className="section-title">
--- a/browser/components/newtab/content-src/components/TopSites/TopSite.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSite.jsx
@@ -1,16 +1,16 @@
 import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
 import {FormattedMessage, injectIntl} from "react-intl";
 import {
   MIN_CORNER_FAVICON_SIZE,
   MIN_RICH_FAVICON_SIZE,
   TOP_SITES_CONTEXT_MENU_OPTIONS,
   TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS,
-  TOP_SITES_SOURCE
+  TOP_SITES_SOURCE,
 } from "./TopSitesConstants";
 import {LinkMenu} from "content-src/components/LinkMenu/LinkMenu";
 import React from "react";
 import {ScreenshotUtils} from "content-src/lib/screenshot-utils";
 import {TOP_SITES_MAX_SITES_PER_ROW} from "common/Reducers.jsm";
 
 export class TopSiteLink extends React.PureComponent {
   constructor(props) {
@@ -134,32 +134,32 @@ export class TopSiteLink extends React.P
     let smallFaviconFallback;
     let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;
     if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery
       smallFaviconFallback = false;
     } else if (link.searchTopSite) {
       imageClassName = "top-site-icon rich-icon";
       imageStyle = {
         backgroundColor: link.backgroundColor,
-        backgroundImage: `url(${tippyTopIcon})`
+        backgroundImage: `url(${tippyTopIcon})`,
       };
       smallFaviconStyle = {backgroundImage:  `url(${tippyTopIcon})`};
     } else if (link.customScreenshotURL) {
       // assume high quality custom screenshot and use rich icon styles and class names
       imageClassName = "top-site-icon rich-icon";
       imageStyle = {
         backgroundColor: link.backgroundColor,
-        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none"
+        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none",
       };
     } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {
       // styles and class names for top sites with rich icons
       imageClassName = "top-site-icon rich-icon";
       imageStyle = {
         backgroundColor: link.backgroundColor,
-        backgroundImage: `url(${tippyTopIcon || link.favicon})`
+        backgroundImage: `url(${tippyTopIcon || link.favicon})`,
       };
     } else {
       // styles and class names for top sites with screenshot + small icon in top left corner
       imageClassName = `screenshot${hasScreenshotImage ? " active" : ""}`;
       imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none"};
 
       // only show a favicon in top left if it's greater than 16x16
       if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {
@@ -173,17 +173,17 @@ export class TopSiteLink extends React.P
       }
     }
     let draggableProps = {};
     if (isDraggable) {
       draggableProps = {
         onClick: this.onDragEvent,
         onDragEnd: this.onDragEvent,
         onDragStart: this.onDragEvent,
-        onMouseDown: this.onDragEvent
+        onMouseDown: this.onDragEvent,
       };
     }
     return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>
       <div className="top-site-inner">
          <a href={!link.searchTopSite && link.url} tabIndex="0" onKeyPress={this.onKeyPress} onClick={onClick} draggable={true}>
             <div className="tile" aria-hidden={true} data-fallback={letterFallback}>
               <div className={imageClassName} style={imageStyle} />
               {link.searchTopSite && <div className="top-site-icon search-topsite" />}
@@ -200,17 +200,17 @@ export class TopSiteLink extends React.P
          {children}
       </div>
     </li>);
   }
 }
 TopSiteLink.defaultProps = {
   title: "",
   link: {},
-  isDraggable: true
+  isDraggable: true,
 };
 
 export class TopSite extends React.PureComponent {
   constructor(props) {
     super(props);
     this.state = {showContextMenu: false};
     this.onLinkClick = this.onLinkClick.bind(this);
     this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
@@ -233,36 +233,36 @@ export class TopSite extends React.PureC
     }
     return {value};
   }
 
   userEvent(event) {
     this.props.dispatch(ac.UserEvent(Object.assign({
       event,
       source: TOP_SITES_SOURCE,
-      action_position: this.props.index
+      action_position: this.props.index,
     }, this._getTelemetryInfo())));
   }
 
   onLinkClick(event) {
     this.userEvent("CLICK");
 
     // Specially handle a top site link click for "typed" frecency bonus as
     // specified as a property on the link.
     event.preventDefault();
     const {altKey, button, ctrlKey, metaKey, shiftKey} = event;
     if (!this.props.link.searchTopSite) {
       this.props.dispatch(ac.OnlyToMain({
         type: at.OPEN_LINK,
-        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})
+        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),
       }));
     } else {
       this.props.dispatch(ac.OnlyToMain({
         type: at.FILL_SEARCH_TERM,
-        data: {label: this.props.link.label}
+        data: {label: this.props.link.label},
       }));
     }
   }
 
   onMenuButtonClick(event) {
     event.preventDefault();
     this.props.onActivate(this.props.index);
     this.setState({showContextMenu: true});
@@ -295,17 +295,17 @@ export class TopSite extends React.PureC
               source={TOP_SITES_SOURCE} />
           }
         </div>
     </TopSiteLink>);
   }
 }
 TopSite.defaultProps = {
   link: {},
-  onActivate() {}
+  onActivate() {},
 };
 
 export class TopSitePlaceholder extends React.PureComponent {
   constructor(props) {
     super(props);
     this.onEditButtonClick = this.onEditButtonClick.bind(this);
   }
 
@@ -325,17 +325,17 @@ export class TopSitePlaceholder extends 
 
 export class _TopSiteList extends React.PureComponent {
   static get DEFAULT_STATE() {
     return {
       activeIndex: null,
       draggedIndex: null,
       draggedSite: null,
       draggedTitle: null,
-      topSitesPreview: null
+      topSitesPreview: null,
     };
   }
 
   constructor(props) {
     super(props);
     this.state = _TopSiteList.DEFAULT_STATE;
     this.onDragEvent = this.onDragEvent.bind(this);
     this.onActivate = this.onActivate.bind(this);
@@ -353,29 +353,29 @@ export class _TopSiteList extends React.
       }
     }
   }
 
   userEvent(event, index) {
     this.props.dispatch(ac.UserEvent({
       event,
       source: TOP_SITES_SOURCE,
-      action_position: index
+      action_position: index,
     }));
   }
 
   onDragEvent(event, index, link, title) {
     switch (event.type) {
       case "dragstart":
         this.dropped = false;
         this.setState({
           draggedIndex: index,
           draggedSite: link,
           draggedTitle: title,
-          activeIndex: null
+          activeIndex: null,
         });
         this.userEvent("DRAG", index);
         break;
       case "dragend":
         if (!this.dropped) {
           // If there was no drop event, reset the state to the default.
           this.setState(_TopSiteList.DEFAULT_STATE);
         }
@@ -393,21 +393,21 @@ export class _TopSiteList extends React.
           this.props.dispatch(ac.AlsoToMain({
             type: at.TOP_SITES_INSERT,
             data: {
               site: {
                 url: this.state.draggedSite.url,
                 label: this.state.draggedTitle,
                 customScreenshotURL: this.state.draggedSite.customScreenshotURL,
                 // Only if the search topsites experiment is enabled
-                ...(this.state.draggedSite.searchTopSite && {searchTopSite: true})
+                ...(this.state.draggedSite.searchTopSite && {searchTopSite: true}),
               },
               index,
-              draggedFromIndex: this.state.draggedIndex
-            }
+              draggedFromIndex: this.state.draggedIndex,
+            },
           }));
           this.userEvent("DROP", index);
         }
         break;
     }
   }
 
   _getTopSites() {
@@ -465,33 +465,33 @@ export class _TopSiteList extends React.
 
   render() {
     const {props} = this;
     const topSites = this.state.topSitesPreview || this._getTopSites();
     const topSitesUI = [];
     const commonProps = {
       onDragEvent: this.onDragEvent,
       dispatch: props.dispatch,
-      intl: props.intl
+      intl: props.intl,
     };
     // We assign a key to each placeholder slot. We need it to be independent
     // of the slot index (i below) so that the keys used stay the same during
     // drag and drop reordering and the underlying DOM nodes are reused.
     // This mostly (only?) affects linux so be sure to test on linux before changing.
     let holeIndex = 0;
 
     // On narrow viewports, we only show 6 sites per row. We'll mark the rest as
     // .hide-for-narrow to hide in CSS via @media query.
     const maxNarrowVisibleIndex = props.TopSitesRows * 6;
 
     for (let i = 0, l = topSites.length; i < l; i++) {
       const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});
       const slotProps = {
         key: link ? link.url : holeIndex++,
-        index: i
+        index: i,
       };
       if (i >= maxNarrowVisibleIndex) {
         slotProps.className = "hide-for-narrow";
       }
       topSitesUI.push(!link ? (
         <TopSitePlaceholder
           {...slotProps}
           {...commonProps} />
--- a/browser/components/newtab/content-src/components/TopSites/TopSiteForm.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSiteForm.jsx
@@ -9,17 +9,17 @@ export class TopSiteForm extends React.P
   constructor(props) {
     super(props);
     const {site} = props;
     this.state = {
       label: site ? (site.label || site.hostname) : "",
       url: site ? site.url : "",
       validationError: false,
       customScreenshotUrl: site ? site.customScreenshotURL : "",
-      showCustomScreenshotForm: site ? site.customScreenshotURL : false
+      showCustomScreenshotForm: site ? site.customScreenshotURL : false,
     };
     this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);
     this.onLabelChange = this.onLabelChange.bind(this);
     this.onUrlChange = this.onUrlChange.bind(this);
     this.onCancelButtonClick = this.onCancelButtonClick.bind(this);
     this.onClearUrlClick = this.onClearUrlClick.bind(this);
     this.onDoneButtonClick = this.onDoneButtonClick.bind(this);
     this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);
@@ -30,35 +30,35 @@ export class TopSiteForm extends React.P
 
   onLabelChange(event) {
     this.setState({"label": event.target.value});
   }
 
   onUrlChange(event) {
     this.setState({
       url: event.target.value,
-      validationError: false
+      validationError: false,
     });
   }
 
   onClearUrlClick() {
     this.setState({
       url: "",
-      validationError: false
+      validationError: false,
     });
   }
 
   onEnableScreenshotUrlForm() {
     this.setState({showCustomScreenshotForm: true});
   }
 
   _updateCustomScreenshotInput(customScreenshotUrl) {
     this.setState({
       customScreenshotUrl,
-      validationError: false
+      validationError: false,
     });
     this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});
   }
 
   onCustomScreenshotUrlChange(event) {
     this._updateCustomScreenshotInput(event.target.value);
   }
 
@@ -84,38 +84,38 @@ export class TopSiteForm extends React.P
       if (this.state.customScreenshotUrl) {
         site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);
       } else if (this.props.site && this.props.site.customScreenshotURL) {
         // Used to flag that previously cached screenshot should be removed
         site.customScreenshotURL = null;
       }
       this.props.dispatch(ac.AlsoToMain({
         type: at.TOP_SITES_PIN,
-        data: {site, index}
+        data: {site, index},
       }));
       this.props.dispatch(ac.UserEvent({
         source: TOP_SITES_SOURCE,
         event: "TOP_SITES_EDIT",
-        action_position: index
+        action_position: index,
       }));
 
       this.props.onClose();
     }
   }
 
   onPreviewButtonClick(event) {
     event.preventDefault();
     if (this.validateForm()) {
       this.props.dispatch(ac.AlsoToMain({
         type: at.PREVIEW_REQUEST,
-        data: {url: this.cleanUrl(this.state.customScreenshotUrl)}
+        data: {url: this.cleanUrl(this.state.customScreenshotUrl)},
       }));
       this.props.dispatch(ac.UserEvent({
         source: TOP_SITES_SOURCE,
-        event: "PREVIEW_REQUEST"
+        event: "PREVIEW_REQUEST",
       }));
     }
   }
 
   cleanUrl(url) {
     // If we are missing a protocol, prepend http://
     if (!url.startsWith("http:") && !url.startsWith("https:")) {
       return `http://${url}`;
@@ -242,10 +242,10 @@ export class TopSiteForm extends React.P
         </section>
       </form>
     );
   }
 }
 
 TopSiteForm.defaultProps = {
   site: null,
-  index: -1
+  index: -1,
 };
--- a/browser/components/newtab/content-src/components/TopSites/TopSiteFormInput.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSiteFormInput.jsx
@@ -57,10 +57,10 @@ export class TopSiteFormInput extends Re
       </div>
     </label>);
   }
 }
 
 TopSiteFormInput.defaultProps = {
   showClearButton: false,
   value: "",
-  validationError: false
+  validationError: false,
 };
--- a/browser/components/newtab/content-src/components/TopSites/TopSites.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSites.jsx
@@ -41,17 +41,17 @@ function countTopSitesIconsTypes(topSite
   };
 
   return topSites.reduce(countTopSitesTypes, {
     "custom_screenshot": 0,
     "screenshot_with_icon": 0,
     "screenshot": 0,
     "tippytop": 0,
     "rich_icon": 0,
-    "no_image": 0
+    "no_image": 0,
   });
 }
 
 export class _TopSites extends React.PureComponent {
   constructor(props) {
     super(props);
     this.onEditFormClose = this.onEditFormClose.bind(this);
     this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);
@@ -66,18 +66,18 @@ export class _TopSites extends React.Pur
     const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
     const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length;
     // Dispatch telemetry event with the count of TopSites images types.
     this.props.dispatch(ac.AlsoToMain({
       type: at.SAVE_SESSION_PERF_DATA,
       data: {
         topsites_icon_stats: topSitesIconsStats,
         topsites_pinned: topSitesPinned,
-        topsites_search_shortcuts: searchShortcuts
-      }
+        topsites_search_shortcuts: searchShortcuts,
+      },
     }));
   }
 
   /**
    * Return the TopSites that are visible based on prefs and window width.
    */
   _getVisibleTopSites() {
     // We hide 2 sites per row when not in the wide layout.
@@ -95,25 +95,25 @@ export class _TopSites extends React.Pur
 
   componentDidMount() {
     this._dispatchTopSitesStats();
   }
 
   onEditFormClose() {
     this.props.dispatch(ac.UserEvent({
       source: TOP_SITES_SOURCE,
-      event: "TOP_SITES_EDIT_CLOSE"
+      event: "TOP_SITES_EDIT_CLOSE",
     }));
     this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});
   }
 
   onSearchShortcutsFormClose() {
     this.props.dispatch(ac.UserEvent({
       source: TOP_SITES_SOURCE,
-      event: "SEARCH_EDIT_CLOSE"
+      event: "SEARCH_EDIT_CLOSE",
     }));
     this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});
   }
 
   render() {
     const {props} = this;
     const {editForm, showSearchShortcutsForm} = props.TopSites;
     const extraMenuOptions = ["AddTopSite"];
@@ -164,10 +164,10 @@ export class _TopSites extends React.Pur
       </CollapsibleSection>
     </ComponentPerfTimer>);
   }
 }
 
 export const TopSites = connect(state => ({
   TopSites: state.TopSites,
   Prefs: state.Prefs,
-  TopSitesRows: state.Prefs.values.topSitesRows
+  TopSitesRows: state.Prefs.values.topSitesRows,
 }))(injectIntl(_TopSites));
--- a/browser/components/newtab/content-src/lib/asroutercontent.js
+++ b/browser/components/newtab/content-src/lib/asroutercontent.js
@@ -1,13 +1,27 @@
 export function enableASRouterContent(store, asrouterContent) {
+  let didHideOnboarding = false;
+
   // Enable asrouter content
   store.subscribe(() => {
     const state = store.getState();
-    if (state.Prefs.values.asrouterExperimentEnabled && !asrouterContent.initialized) {
+    if (!state.ASRouter.initialized) {
+      return;
+    }
+
+    if (!asrouterContent.initialized) {
       asrouterContent.init();
-    } else if (!state.Prefs.values.asrouterExperimentEnabled && asrouterContent.initialized) {
-      asrouterContent.uninit();
+    }
+
+    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in
+    // the new simplified onboarding experiment. CSS hacks ftw
+    if (state.ASRouter.allowLegacyOnboarding === false && !didHideOnboarding) {
+      global.document.body.classList.add("hide-onboarding");
+      didHideOnboarding = true;
+    } else if (state.ASRouter.allowLegacyOnboarding === true && didHideOnboarding) {
+      global.document.body.classList.remove("hide-onboarding");
+      didHideOnboarding = false;
     }
   });
   // Return this for testing purposes
   return {asrouterContent};
 }
--- a/browser/components/newtab/content-src/lib/detect-user-session-start.js
+++ b/browser/components/newtab/content-src/lib/detect-user-session-start.js
@@ -39,17 +39,17 @@ export class DetectUserSessionStart {
     this._perfService.mark("visibility_event_rcvd_ts");
 
     try {
       let visibility_event_rcvd_ts = this._perfService
         .getMostRecentAbsMarkStartByName("visibility_event_rcvd_ts");
 
       this._store.dispatch(ac.AlsoToMain({
         type: at.SAVE_SESSION_PERF_DATA,
-        data: {visibility_event_rcvd_ts}
+        data: {visibility_event_rcvd_ts},
       }));
     } catch (ex) {
       // If this failed, it's likely because the `privacy.resistFingerprinting`
       // pref is true.  We should at least not blow up.
     }
   }
 
   /**
--- a/browser/components/newtab/content-src/lib/link-menu-options.js
+++ b/browser/components/newtab/content-src/lib/link-menu-options.js
@@ -1,18 +1,18 @@
 import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
 
 const _OpenInPrivateWindow = site => ({
   id: "menu_action_open_private_window",
   icon: "new-window-private",
   action: ac.OnlyToMain({
     type: at.OPEN_PRIVATE_WINDOW,
-    data: {url: site.url, referrer: site.referrer}
+    data: {url: site.url, referrer: site.referrer},
   }),
-  userEvent: "OPEN_PRIVATE_WINDOW"
+  userEvent: "OPEN_PRIVATE_WINDOW",
 });
 
 export const GetPlatformString = platform => {
   switch (platform) {
     case "win":
       return "menu_action_show_file_windows";
     case "macosx":
       return "menu_action_show_file_mac_os";
@@ -31,191 +31,191 @@ export const GetPlatformString = platfor
 export const LinkMenuOptions = {
   Separator: () => ({type: "separator"}),
   EmptyItem: () => ({type: "empty"}),
   RemoveBookmark: site => ({
     id: "menu_action_remove_bookmark",
     icon: "bookmark-added",
     action: ac.AlsoToMain({
       type: at.DELETE_BOOKMARK_BY_ID,
-      data: site.bookmarkGuid
+      data: site.bookmarkGuid,
     }),
-    userEvent: "BOOKMARK_DELETE"
+    userEvent: "BOOKMARK_DELETE",
   }),
   AddBookmark: site => ({
     id: "menu_action_bookmark",
     icon: "bookmark-hollow",
     action: ac.AlsoToMain({
       type: at.BOOKMARK_URL,
-      data: {url: site.url, title: site.title, type: site.type}
+      data: {url: site.url, title: site.title, type: site.type},
     }),
-    userEvent: "BOOKMARK_ADD"
+    userEvent: "BOOKMARK_ADD",
   }),
   OpenInNewWindow: site => ({
     id: "menu_action_open_new_window",
     icon: "new-window",
     action: ac.AlsoToMain({
       type: at.OPEN_NEW_WINDOW,
       data: {
         referrer: site.referrer,
         typedBonus: site.typedBonus,
-        url: site.url
-      }
+        url: site.url,
+      },
     }),
-    userEvent: "OPEN_NEW_WINDOW"
+    userEvent: "OPEN_NEW_WINDOW",
   }),
   BlockUrl: (site, index, eventSource) => ({
     id: "menu_action_dismiss",
     icon: "dismiss",
     action: ac.AlsoToMain({
       type: at.BLOCK_URL,
-      data: {url: site.open_url || site.url, pocket_id: site.pocket_id}
+      data: {url: site.open_url || site.url, pocket_id: site.pocket_id},
     }),
     impression: ac.ImpressionStats({
       source: eventSource,
       block: 0,
-      tiles: [{id: site.guid, pos: index}]
+      tiles: [{id: site.guid, pos: index}],
     }),
-    userEvent: "BLOCK"
+    userEvent: "BLOCK",
   }),
 
   // This is an option for web extentions which will result in remove items from
   // memory and notify the web extenion, rather than using the built-in block list.
   WebExtDismiss: (site, index, eventSource) => ({
     id: "menu_action_webext_dismiss",
     string_id: "menu_action_dismiss",
     icon: "dismiss",
     action: ac.WebExtEvent(at.WEBEXT_DISMISS, {
       source: eventSource,
       url: site.url,
-      action_position: index
-    })
+      action_position: index,
+    }),
   }),
   DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({
     id: "menu_action_delete",
     icon: "delete",
     action: {
       type: at.DIALOG_OPEN,
       data: {
         onConfirm: [
           ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),
-          ac.UserEvent(Object.assign({event: "DELETE", source: eventSource, action_position: index}, siteInfo))
+          ac.UserEvent(Object.assign({event: "DELETE", source: eventSource, action_position: index}, siteInfo)),
         ],
         eventSource,
         body_string_id: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
         confirm_button_string_id: "menu_action_delete",
         cancel_button_string_id: "topsites_form_cancel_button",
-        icon: "modal-delete"
-      }
+        icon: "modal-delete",
+      },
     },
-    userEvent: "DIALOG_OPEN"
+    userEvent: "DIALOG_OPEN",
   }),
   ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({
     id: GetPlatformString(platform),
     icon: "search",
     action: ac.OnlyToMain({
       type: at.SHOW_DOWNLOAD_FILE,
-      data: {url: site.url}
-    })
+      data: {url: site.url},
+    }),
   }),
   OpenFile: site => ({
     id: "menu_action_open_file",
     icon: "open-file",
     action: ac.OnlyToMain({
       type: at.OPEN_DOWNLOAD_FILE,
-      data: {url: site.url}
-    })
+      data: {url: site.url},
+    }),
   }),
   CopyDownloadLink: site => ({
     id: "menu_action_copy_download_link",
     icon: "copy",
     action: ac.OnlyToMain({
       type: at.COPY_DOWNLOAD_LINK,
-      data: {url: site.url}
-    })
+      data: {url: site.url},
+    }),
   }),
   GoToDownloadPage: site => ({
     id: "menu_action_go_to_download_page",
     icon: "download",
     action: ac.OnlyToMain({
       type: at.OPEN_LINK,
-      data: {url: site.referrer}
+      data: {url: site.referrer},
     }),
-    disabled: !site.referrer
+    disabled: !site.referrer,
   }),
   RemoveDownload: site => ({
     id: "menu_action_remove_download",
     icon: "delete",
     action: ac.OnlyToMain({
       type: at.REMOVE_DOWNLOAD_FILE,
-      data: {url: site.url}
-    })
+      data: {url: site.url},
+    }),
   }),
   PinTopSite: ({url, searchTopSite, label}, index) => ({
     id: "menu_action_pin",
     icon: "pin",
     action: ac.AlsoToMain({
       type: at.TOP_SITES_PIN,
       data: {
         site: {
           url,
-          ...(searchTopSite && {searchTopSite, label})
+          ...(searchTopSite && {searchTopSite, label}),
         },
-        index
-      }
+        index,
+      },
     }),
-    userEvent: "PIN"
+    userEvent: "PIN",
   }),
   UnpinTopSite: site => ({
     id: "menu_action_unpin",
     icon: "unpin",
     action: ac.AlsoToMain({
       type: at.TOP_SITES_UNPIN,
-      data: {site: {url: site.url}}
+      data: {site: {url: site.url}},
     }),
-    userEvent: "UNPIN"
+    userEvent: "UNPIN",
   }),
   SaveToPocket: (site, index, eventSource) => ({
     id: "menu_action_save_to_pocket",
     icon: "pocket-save",
     action: ac.AlsoToMain({
       type: at.SAVE_TO_POCKET,
-      data: {site: {url: site.url, title: site.title}}
+      data: {site: {url: site.url, title: site.title}},
     }),
     impression: ac.ImpressionStats({
       source: eventSource,
       pocket: 0,
-      tiles: [{id: site.guid, pos: index}]
+      tiles: [{id: site.guid, pos: index}],
     }),
-    userEvent: "SAVE_TO_POCKET"
+    userEvent: "SAVE_TO_POCKET",
   }),
   DeleteFromPocket: site => ({
     id: "menu_action_delete_pocket",
     icon: "delete",
     action: ac.AlsoToMain({
       type: at.DELETE_FROM_POCKET,
-      data: {pocket_id: site.pocket_id}
+      data: {pocket_id: site.pocket_id},
     }),
-    userEvent: "DELETE_FROM_POCKET"
+    userEvent: "DELETE_FROM_POCKET",
   }),
   ArchiveFromPocket: site => ({
     id: "menu_action_archive_pocket",
     icon: "check",
     action: ac.AlsoToMain({
       type: at.ARCHIVE_FROM_POCKET,
-      data: {pocket_id: site.pocket_id}
+      data: {pocket_id: site.pocket_id},
     }),
-    userEvent: "ARCHIVE_FROM_POCKET"
+    userEvent: "ARCHIVE_FROM_POCKET",
   }),
   EditTopSite: (site, index) => ({
     id: "edit_topsites_button_text",
     icon: "edit",
     action: {
       type: at.TOP_SITES_EDIT,
-      data: {index}
-    }
+      data: {index},
+    },
   }),
   CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),
   CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),
   CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),
   CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),
-  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())
+  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),
 };
--- a/browser/components/newtab/content-src/lib/screenshot-utils.js
+++ b/browser/components/newtab/content-src/lib/screenshot-utils.js
@@ -41,10 +41,10 @@ export const ScreenshotUtils = {
       return this.isBlob(false, remoteImage) ?
              localImage.path === remoteImage.path :
              localImage.url === remoteImage;
     }
 
     // This will only handle the remaining three possible outcomes.
     // (i.e. everything except when both image and localImage are present)
     return !remoteImage && !localImage;
-  }
+  },
 };
--- a/browser/components/newtab/content-src/lib/section-menu-options.js
+++ b/browser/components/newtab/content-src/lib/section-menu-options.js
@@ -6,75 +6,75 @@ import {actionCreators as ac, actionType
  */
 export const SectionMenuOptions = {
   Separator: () => ({type: "separator"}),
   MoveUp: section => ({
     id: "section_menu_action_move_up",
     icon: "arrowhead-up",
     action: ac.OnlyToMain({
       type: at.SECTION_MOVE,
-      data: {id: section.id, direction: -1}
+      data: {id: section.id, direction: -1},
     }),
     userEvent: "MENU_MOVE_UP",
-    disabled: !!section.isFirst
+    disabled: !!section.isFirst,
   }),
   MoveDown: section => ({
     id: "section_menu_action_move_down",
     icon: "arrowhead-down",
     action: ac.OnlyToMain({
       type: at.SECTION_MOVE,
-      data: {id: section.id, direction: +1}
+      data: {id: section.id, direction: +1},
     }),
     userEvent: "MENU_MOVE_DOWN",
-    disabled: !!section.isLast
+    disabled: !!section.isLast,
   }),
   RemoveSection: section => ({
     id: "section_menu_action_remove_section",
     icon: "dismiss",
     action: ac.SetPref(section.showPrefName, false),
-    userEvent: "MENU_REMOVE"
+    userEvent: "MENU_REMOVE",
   }),
   CollapseSection: section => ({
     id: "section_menu_action_collapse_section",
     icon: "minimize",
     action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),
-    userEvent: "MENU_COLLAPSE"
+    userEvent: "MENU_COLLAPSE",
   }),
   ExpandSection: section => ({
     id: "section_menu_action_expand_section",
     icon: "maximize",
     action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),
-    userEvent: "MENU_EXPAND"
+    userEvent: "MENU_EXPAND",
   }),
   ManageSection: section => ({
     id: "section_menu_action_manage_section",
     icon: "settings",
     action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),
-    userEvent: "MENU_MANAGE"
+    userEvent: "MENU_MANAGE",
   }),
   ManageWebExtension: section => ({
     id: "section_menu_action_manage_webext",
     icon: "settings",
-    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id})
+    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id}),
   }),
   AddTopSite: section => ({
     id: "section_menu_action_add_topsite",
     icon: "add",
     action: {type: at.TOP_SITES_EDIT, data: {index: -1}},
-    userEvent: "MENU_ADD_TOPSITE"
+    userEvent: "MENU_ADD_TOPSITE",
   }),
   AddSearchShortcut: section => ({
     id: "section_menu_action_add_search_engine",
     icon: "search",
     action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},
-    userEvent: "MENU_ADD_SEARCH"
+    userEvent: "MENU_ADD_SEARCH",
   }),
   PrivacyNotice: section => ({
     id: "section_menu_action_privacy_notice",
     icon: "info",
     action: ac.OnlyToMain({
       type: at.OPEN_LINK,
-      data: {url: section.privacyNoticeURL}
+      data: {url: section.privacyNoticeURL},
     }),
-    userEvent: "MENU_PRIVACY_NOTICE"
+    userEvent: "MENU_PRIVACY_NOTICE",
   }),
-  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))
+  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)),
 };
--- a/browser/components/newtab/content-src/lib/snippets.js
+++ b/browser/components/newtab/content-src/lib/snippets.js
@@ -308,17 +308,17 @@ export class SnippetsProvider {
    * @param  {int} options.appData.version  The current snippets version
    * @param  {str} options.elementId  The id of the element in which to inject snippets
    * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?
    */
   async init(options) {
     Object.assign(this, {
       appData: {},
       elementId: "snippets",
-      connect: true
+      connect: true,
     }, options);
 
     // Add listener so we know when snippets are blocked on other pages
     if (global.RPMAddMessageListener) {
       global.RPMAddMessageListener("ActivityStream:MainToContent", this._onAction);
     }
 
     // TODO: Requires enabling indexedDB on newtab
@@ -376,41 +376,63 @@ export class SnippetsProvider {
  */
 export function addSnippetsSubscriber(store) {
   const snippets = new SnippetsProvider(store.dispatch);
 
   let initializing = false;
 
   store.subscribe(async () => {
     const state = store.getState();
-    let snippetsEnabled = false;
-    try {
-      snippetsEnabled = JSON.parse(state.Prefs.values["asrouter.messageProviders"]).find(i => i.id === "snippets").enabled;
-    } catch (e) {}
-    const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && snippetsEnabled;
-    // state.Prefs.values["feeds.snippets"]:  Should snippets be shown?
-    // state.Snippets.initialized             Is the snippets data initialized?
-    // snippets.initialized:                  Is SnippetsProvider currently initialised?
-    if (state.Prefs.values["feeds.snippets"] &&
-      // If the message center experiment is enabled, don't show snippets
-      !isASRouterEnabled &&
+
+    /**
+     * Sorry this code is so complicated. It will be removed soon.
+     * This is what the different values actually mean:
+     *
+     * ASRouter.initialized                   Is ASRouter.jsm initialised?
+     * ASRouter.allowLegacySnippets           Are ASRouter snippets turned OFF (i.e. legacy snippets are allowed)
+     * state.Prefs.values["feeds.snippets"]   User preference for snippets
+     * state.Snippets.initialized             Is SnippetsFeed.jsm initialised?
+     * snippets.initialized                   Is in-content snippets currently initialised?
+     * state.Prefs.values.disableSnippets     This pref is used to disable legacy snippets in an emergency
+     *                                        in a way that is not user-editable (true = disabled)
+     */
+
+    /** If we should initialize snippets... */
+    if (
+      state.Prefs.values["feeds.snippets"] &&
+      state.ASRouter.initialized &&
+      state.ASRouter.allowLegacySnippets &&
       !state.Prefs.values.disableSnippets &&
       state.Snippets.initialized &&
       !snippets.initialized &&
       // Don't call init multiple times
       !initializing &&
       location.href !== "about:welcome"
     ) {
       initializing = true;
       await snippets.init({appData: state.Snippets});
+      // istanbul ignore if
+      if (state.Prefs.values["asrouter.devtoolsEnabled"]) {
+        console.log("Legacy snippets initialized"); // eslint-disable-line no-console
+      }
       initializing = false;
+
+    /** If we should remove snippets... */
     } else if (
-      (state.Prefs.values["feeds.snippets"] === false ||
-        state.Prefs.values.disableSnippets === true) &&
+      (
+        state.Prefs.values["feeds.snippets"] === false ||
+        state.Prefs.values.disableSnippets === true ||
+        (state.ASRouter.initialized && !state.ASRouter.allowLegacySnippets)
+      ) &&
       snippets.initialized
     ) {
+      // Remove snippets
       snippets.uninit();
+      // istanbul ignore if
+      if (state.Prefs.values["asrouter.devtoolsEnabled"]) {
+        console.log("Legacy snippets removed"); // eslint-disable-line no-console
+      }
     }
   });
 
   // Returned for testing purposes
   return {snippets};
 }
--- a/browser/components/newtab/content-src/styles/_variables.scss
+++ b/browser/components/newtab/content-src/styles/_variables.scss
@@ -22,16 +22,17 @@
 $grey-10-20: rgba($grey-10, 0.2);
 $grey-10-40: rgba($grey-10, 0.4);
 $grey-10-60: rgba($grey-10, 0.6);
 $grey-10-80: rgba($grey-10, 0.8);
 $grey-10-95: rgba($grey-10, 0.95);
 $grey-20-60: rgba($grey-20, 0.6);
 $grey-20-80: rgba($grey-20, 0.8);
 $grey-30-60: rgba($grey-30, 0.6);
+$grey-60-70: rgba($grey-60, 0.7);
 $grey-80-95: rgba($grey-80, 0.95);
 $grey-90-10: rgba($grey-90, 0.1);
 $grey-90-20: rgba($grey-90, 0.2);
 $grey-90-30: rgba($grey-90, 0.3);
 $grey-90-40: rgba($grey-90, 0.4);
 $grey-90-50: rgba($grey-90, 0.5);
 $grey-90-60: rgba($grey-90, 0.6);
 $grey-90-70: rgba($grey-90, 0.7);
--- a/browser/components/newtab/css/activity-stream-linux.css
+++ b/browser/components/newtab/css/activity-stream-linux.css
@@ -357,23 +357,23 @@ main {
     visibility: hidden; }
 
 .base-content-fallback {
   height: 100vh; }
 
 
 .body-wrapper .section-title,
 .body-wrapper .sections-list .section:last-of-type,
-.body-wrapper .topic {
+.body-wrapper .topics {
   opacity: 0; }
 
 
 .body-wrapper.on .section-title,
 .body-wrapper.on .sections-list .section:last-of-type,
-.body-wrapper.on .topic {
+.body-wrapper.on .topics {
   opacity: 1; }
 
 .non-collapsible-section {
   padding: 0 25px; }
 
 .prefs-button button {
   background-color: transparent;
   border: 0;
@@ -917,17 +917,18 @@ main {
   .top-stories-bottom-container a {
     color: var(--newtab-link-secondary-color);
     font-weight: bold; }
     .top-stories-bottom-container a.more-recommendations {
       font-weight: normal;
       font-size: 13px; }
   @media (min-width: 866px) {
     .top-stories-bottom-container {
-      line-height: 16px; } }
+      line-height: 16px;
+      height: 16px; } }
   .top-stories-bottom-container::after {
     clear: both;
     content: '';
     display: table; }
 
 @media (min-width: 1122px) {
   .sections-list .normal-cards .section-list {
     grid-template-columns: repeat(auto-fit, 309px); } }
@@ -1914,16 +1915,28 @@ a.firstrun-link {
     padding: 0;
     cursor: pointer; }
     @media (min-width: 766px) {
       .SnippetBaseContainer .blockButton {
         inset-inline-end: 24px; } }
   .SnippetBaseContainer:hover .blockButton {
     display: block; }
 
+.snippets-preview-banner {
+  font-size: 15px;
+  line-height: 42px;
+  color: rgba(74, 74, 79, 0.7);
+  background: rgba(215, 215, 219, 0.6);
+  text-align: center;
+  position: absolute;
+  top: 0;
+  width: 100%; }
+  .snippets-preview-banner span {
+    vertical-align: middle; }
+
 .activity-stream.modal-open {
   overflow: hidden; }
 
 .modalOverlayOuter {
   background: #FFF;
   opacity: 0.93;
   height: 100%;
   position: fixed;
--- a/browser/components/newtab/css/activity-stream-linux.css.map
+++ b/browser/components/newtab/css/activity-stream-linux.css.map
@@ -28,35 +28,35 @@
 		"../content-src/asrouter/components/ModalOverlay/_ModalOverlay.scss",
 		"../content-src/asrouter/templates/SimpleSnippet/_SimpleSnippet.scss",
 		"../content-src/asrouter/templates/OnboardingMessage/_OnboardingMessage.scss"
 	],
 	"sourcesContent": [
 		"/* This is the linux variant */ // sass-lint:disable-line no-css-comments\n\n$os-infopanel-arrow-height: 10px;\n$os-infopanel-arrow-offset-end: 6px;\n$os-infopanel-arrow-width: 20px;\n\n@import './activity-stream';\n",
 		"@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n\nhtml {\n  height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n  min-height: 100vh;\n}\n\nbody {\n  background-color: var(--newtab-background-color);\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n  font-size: 16px;\n  overflow-y: scroll;\n\n  &.hide-onboarding > #onboarding-overlay-button, // sass-lint:disable-line no-ids\n  &.hide-main > #onboarding-overlay-button { // sass-lint:disable-line no-ids\n    display: none !important; // sass-lint:disable-line no-important\n  }\n\n  &.hide-main > #onboarding-notification-bar { // sass-lint:disable-line no-ids\n    display: none;\n  }\n}\n\nh1,\nh2 {\n  font-weight: normal;\n}\n\na {\n  text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n.inner-border {\n  border: $border-secondary;\n  border-radius: $border-radius;\n  height: 100%;\n  left: 0;\n  pointer-events: none;\n  position: absolute;\n  top: 0;\n  width: 100%;\n  z-index: 100;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n.show-on-init {\n  opacity: 0;\n  transition: opacity 0.2s ease-in;\n\n  &.on {\n    animation: fadeIn 0.2s;\n    opacity: 1;\n  }\n}\n\n.actions {\n  border-top: $border-secondary;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  margin: 0;\n  padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n  background-color: var(--newtab-button-secondary-color);\n  border: $border-primary;\n  border-radius: 4px;\n  color: inherit;\n  cursor: pointer;\n  margin-bottom: 15px;\n  padding: 10px 30px;\n  white-space: nowrap;\n\n  &:hover:not(.dismiss) {\n    box-shadow: $shadow-primary;\n    transition: box-shadow 150ms;\n  }\n\n  &.dismiss {\n    background-color: transparent;\n    border: 0;\n    padding: 0;\n    text-decoration: underline;\n  }\n\n  // Blue button\n  &.primary,\n  &.done {\n    background-color: var(--newtab-button-primary-color);\n    border: solid 1px var(--newtab-button-primary-color);\n    color: $white;\n    margin-inline-start: auto;\n  }\n}\n\ninput {\n  &[type='text'],\n  &[type='search'] {\n    border-radius: $border-radius;\n  }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n  z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/StartupOverlay/StartupOverlay';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n",
 		"html {\n  box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n*::-moz-focus-inner {\n  border: 0;\n}\n\nbody {\n  margin: 0;\n}\n\nbutton,\ninput {\n  background-color: inherit;\n  color: inherit;\n  font-family: inherit;\n  font-size: inherit;\n}\n\n[hidden] {\n  display: none !important; // sass-lint:disable-line no-important\n}\n",
-		"// Photon colors from http://design.firefox.com/photon/visuals/color.html\n$blue-40: #45A1FF;\n$blue-50: #0A84FF;\n$blue-60: #0060DF;\n$blue-70: #003EAA;\n$blue-80: #002275;\n$grey-10: #F9F9FA;\n$grey-20: #EDEDF0;\n$grey-30: #D7D7DB;\n$grey-40: #B1B1B3;\n$grey-50: #737373;\n$grey-60: #4A4A4F;\n$grey-70: #38383D;\n$grey-80: #2A2A2E;\n$grey-90: #0C0C0D;\n$teal-70: #008EA4;\n$red-60: #D70022;\n$yellow-50: #FFE900;\n\n// Photon opacity from http://design.firefox.com/photon/visuals/color.html#opacity\n$grey-10-10: rgba($grey-10, 0.1);\n$grey-10-20: rgba($grey-10, 0.2);\n$grey-10-40: rgba($grey-10, 0.4);\n$grey-10-60: rgba($grey-10, 0.6);\n$grey-10-80: rgba($grey-10, 0.8);\n$grey-10-95: rgba($grey-10, 0.95);\n$grey-20-60: rgba($grey-20, 0.6);\n$grey-20-80: rgba($grey-20, 0.8);\n$grey-30-60: rgba($grey-30, 0.6);\n$grey-80-95: rgba($grey-80, 0.95);\n$grey-90-10: rgba($grey-90, 0.1);\n$grey-90-20: rgba($grey-90, 0.2);\n$grey-90-30: rgba($grey-90, 0.3);\n$grey-90-40: rgba($grey-90, 0.4);\n$grey-90-50: rgba($grey-90, 0.5);\n$grey-90-60: rgba($grey-90, 0.6);\n$grey-90-70: rgba($grey-90, 0.7);\n$grey-90-80: rgba($grey-90, 0.8);\n$grey-90-90: rgba($grey-90, 0.9);\n\n$black: #000;\n$black-5: rgba($black, 0.05);\n$black-10: rgba($black, 0.1);\n$black-15: rgba($black, 0.15);\n$black-20: rgba($black, 0.2);\n$black-25: rgba($black, 0.25);\n$black-30: rgba($black, 0.3);\n\n// Other colors\n$white: #FFF;\n$white-10: rgba($white, 0.1);\n$pocket-teal: #50BCB6;\n$pocket-red: #EF4056;\n$bookmark-icon-fill: #0A84FF;\n$download-icon-fill: #12BC00;\n$pocket-icon-fill: #D70022;\n$email-input-focus: rgba($blue-50, 0.3);\n$email-input-invalid: rgba($red-60, 0.3);\n$aw-extra-blue-1: #004EC2;\n$aw-extra-blue-2: #0080FF;\n$aw-extra-blue-3: #00C7FF;\n$about-welcome-gradient: linear-gradient(to bottom, $blue-70 40%, $aw-extra-blue-1 60%, $blue-60 80%, $aw-extra-blue-2 90%, $aw-extra-blue-3 100%);\n$about-welcome-extra-links: #676F7E;\n\n// Photon transitions from http://design.firefox.com/photon/motion/duration-and-easing.html\n$photon-easing: cubic-bezier(0.07, 0.95, 0, 1);\n\n$border-radius: 3px;\n\n// Grid related styles\n$base-gutter: 32px;\n$section-horizontal-padding: 25px;\n$section-vertical-padding: 10px;\n$section-spacing: 40px - $section-vertical-padding * 2;\n$grid-unit: 96px; // 1 top site\n\n$icon-size: 16px;\n$smaller-icon-size: 12px;\n$larger-icon-size: 32px;\n\n$searchbar-width-smallest: $grid-unit * 2 + $base-gutter * 1;\n$searchbar-width-small: $grid-unit * 3 + $base-gutter * 2;\n$searchbar-width-medium: $grid-unit * 4 + $base-gutter * 3;\n$searchbar-width-large: $grid-unit * 6 + $base-gutter * 5;\n\n$wrapper-default-width: $grid-unit * 2 + $base-gutter * 1 + $section-horizontal-padding * 2; // 2 top sites\n$wrapper-max-width-small: $grid-unit * 3 + $base-gutter * 2 + $section-horizontal-padding * 2; // 3 top sites\n$wrapper-max-width-medium: $grid-unit * 4 + $base-gutter * 3 + $section-horizontal-padding * 2; // 4 top sites\n$wrapper-max-width-large: $grid-unit * 6 + $base-gutter * 5 + $section-horizontal-padding * 2; // 6 top sites\n$wrapper-max-width-widest: $grid-unit * 8 + $base-gutter * 7 + $section-horizontal-padding * 2; // 8 top sites\n// For the breakpoints, we need to add space for the scrollbar to avoid weird\n// layout issues when the scrollbar is visible. 16px is wide enough to cover all\n// OSes and keeps it simpler than a per-OS value.\n$scrollbar-width: 16px;\n$break-point-small: $wrapper-max-width-small + $base-gutter * 2 + $scrollbar-width;\n$break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width;\n$break-point-large: $wrapper-max-width-large + $base-gutter * 2 + $scrollbar-width;\n$break-point-widest: $wrapper-max-width-widest + $base-gutter * 2 + $scrollbar-width;\n\n$section-title-font-size: 13px;\n\n$card-width: $grid-unit * 2 + $base-gutter;\n$card-height: 266px;\n$card-preview-image-height: 122px;\n$card-title-margin: 2px;\n$card-text-line-height: 19px;\n// Larger cards for wider screens:\n$card-width-large: 309px;\n$card-height-large: 370px;\n$card-preview-image-height-large: 155px;\n// Compact cards for Highlights\n$card-height-compact: 160px;\n$card-preview-image-height-compact: 108px;\n\n$topic-margin-top: 12px;\n\n$context-menu-button-size: 27px;\n$context-menu-button-boxshadow: 0 2px $grey-90-10;\n$context-menu-shadow: 0 5px 10px $black-30, 0 0 0 1px $black-20;\n$context-menu-font-size: 14px;\n$context-menu-border-radius: 5px;\n$context-menu-outer-padding: 5px;\n$context-menu-item-padding: 3px 12px;\n\n$error-fallback-font-size: 12px;\n$error-fallback-line-height: 1.5;\n\n$image-path: '../data/content/assets/';\n\n$snippets-container-height: 120px;\n\n$textbox-shadow-size: 4px;\n\n@mixin fade-in {\n  box-shadow: inset $inner-box-shadow, $shadow-primary;\n  transition: box-shadow 150ms;\n}\n\n@mixin fade-in-card {\n  box-shadow: $shadow-primary;\n  transition: box-shadow 150ms;\n}\n\n@mixin context-menu-button {\n  .context-menu-button {\n    background-clip: padding-box;\n    background-color: var(--newtab-contextmenu-button-color);\n    background-image: url('chrome://browser/skin/page-action.svg');\n    background-position: 55%;\n    border: $border-primary;\n    border-radius: 100%;\n    box-shadow: $context-menu-button-boxshadow;\n    cursor: pointer;\n    fill: var(--newtab-icon-primary-color);\n    height: $context-menu-button-size;\n    inset-inline-end: -($context-menu-button-size / 2);\n    opacity: 0;\n    position: absolute;\n    top: -($context-menu-button-size / 2);\n    transform: scale(0.25);\n    transition-duration: 150ms;\n    transition-property: transform, opacity;\n    width: $context-menu-button-size;\n\n    &:-moz-any(:active, :focus) {\n      opacity: 1;\n      transform: scale(1);\n    }\n  }\n}\n\n@mixin context-menu-button-hover {\n  .context-menu-button {\n    opacity: 1;\n    transform: scale(1);\n    transition-delay: 333ms;\n  }\n}\n\n@mixin context-menu-open-middle {\n  .context-menu {\n    margin-inline-end: auto;\n    margin-inline-start: auto;\n    inset-inline-end: auto;\n    inset-inline-start: -$base-gutter;\n  }\n}\n\n@mixin context-menu-open-left {\n  .context-menu {\n    margin-inline-end: 5px;\n    margin-inline-start: auto;\n    inset-inline-end: 0;\n    inset-inline-start: auto;\n  }\n}\n\n@mixin flip-icon {\n  &:dir(rtl) {\n    transform: scaleX(-1);\n  }\n}\n",
+		"// Photon colors from http://design.firefox.com/photon/visuals/color.html\n$blue-40: #45A1FF;\n$blue-50: #0A84FF;\n$blue-60: #0060DF;\n$blue-70: #003EAA;\n$blue-80: #002275;\n$grey-10: #F9F9FA;\n$grey-20: #EDEDF0;\n$grey-30: #D7D7DB;\n$grey-40: #B1B1B3;\n$grey-50: #737373;\n$grey-60: #4A4A4F;\n$grey-70: #38383D;\n$grey-80: #2A2A2E;\n$grey-90: #0C0C0D;\n$teal-70: #008EA4;\n$red-60: #D70022;\n$yellow-50: #FFE900;\n\n// Photon opacity from http://design.firefox.com/photon/visuals/color.html#opacity\n$grey-10-10: rgba($grey-10, 0.1);\n$grey-10-20: rgba($grey-10, 0.2);\n$grey-10-40: rgba($grey-10, 0.4);\n$grey-10-60: rgba($grey-10, 0.6);\n$grey-10-80: rgba($grey-10, 0.8);\n$grey-10-95: rgba($grey-10, 0.95);\n$grey-20-60: rgba($grey-20, 0.6);\n$grey-20-80: rgba($grey-20, 0.8);\n$grey-30-60: rgba($grey-30, 0.6);\n$grey-60-70: rgba($grey-60, 0.7);\n$grey-80-95: rgba($grey-80, 0.95);\n$grey-90-10: rgba($grey-90, 0.1);\n$grey-90-20: rgba($grey-90, 0.2);\n$grey-90-30: rgba($grey-90, 0.3);\n$grey-90-40: rgba($grey-90, 0.4);\n$grey-90-50: rgba($grey-90, 0.5);\n$grey-90-60: rgba($grey-90, 0.6);\n$grey-90-70: rgba($grey-90, 0.7);\n$grey-90-80: rgba($grey-90, 0.8);\n$grey-90-90: rgba($grey-90, 0.9);\n\n$black: #000;\n$black-5: rgba($black, 0.05);\n$black-10: rgba($black, 0.1);\n$black-15: rgba($black, 0.15);\n$black-20: rgba($black, 0.2);\n$black-25: rgba($black, 0.25);\n$black-30: rgba($black, 0.3);\n\n// Other colors\n$white: #FFF;\n$white-10: rgba($white, 0.1);\n$pocket-teal: #50BCB6;\n$pocket-red: #EF4056;\n$bookmark-icon-fill: #0A84FF;\n$download-icon-fill: #12BC00;\n$pocket-icon-fill: #D70022;\n$email-input-focus: rgba($blue-50, 0.3);\n$email-input-invalid: rgba($red-60, 0.3);\n$aw-extra-blue-1: #004EC2;\n$aw-extra-blue-2: #0080FF;\n$aw-extra-blue-3: #00C7FF;\n$about-welcome-gradient: linear-gradient(to bottom, $blue-70 40%, $aw-extra-blue-1 60%, $blue-60 80%, $aw-extra-blue-2 90%, $aw-extra-blue-3 100%);\n$about-welcome-extra-links: #676F7E;\n\n// Photon transitions from http://design.firefox.com/photon/motion/duration-and-easing.html\n$photon-easing: cubic-bezier(0.07, 0.95, 0, 1);\n\n$border-radius: 3px;\n\n// Grid related styles\n$base-gutter: 32px;\n$section-horizontal-padding: 25px;\n$section-vertical-padding: 10px;\n$section-spacing: 40px - $section-vertical-padding * 2;\n$grid-unit: 96px; // 1 top site\n\n$icon-size: 16px;\n$smaller-icon-size: 12px;\n$larger-icon-size: 32px;\n\n$searchbar-width-smallest: $grid-unit * 2 + $base-gutter * 1;\n$searchbar-width-small: $grid-unit * 3 + $base-gutter * 2;\n$searchbar-width-medium: $grid-unit * 4 + $base-gutter * 3;\n$searchbar-width-large: $grid-unit * 6 + $base-gutter * 5;\n\n$wrapper-default-width: $grid-unit * 2 + $base-gutter * 1 + $section-horizontal-padding * 2; // 2 top sites\n$wrapper-max-width-small: $grid-unit * 3 + $base-gutter * 2 + $section-horizontal-padding * 2; // 3 top sites\n$wrapper-max-width-medium: $grid-unit * 4 + $base-gutter * 3 + $section-horizontal-padding * 2; // 4 top sites\n$wrapper-max-width-large: $grid-unit * 6 + $base-gutter * 5 + $section-horizontal-padding * 2; // 6 top sites\n$wrapper-max-width-widest: $grid-unit * 8 + $base-gutter * 7 + $section-horizontal-padding * 2; // 8 top sites\n// For the breakpoints, we need to add space for the scrollbar to avoid weird\n// layout issues when the scrollbar is visible. 16px is wide enough to cover all\n// OSes and keeps it simpler than a per-OS value.\n$scrollbar-width: 16px;\n$break-point-small: $wrapper-max-width-small + $base-gutter * 2 + $scrollbar-width;\n$break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width;\n$break-point-large: $wrapper-max-width-large + $base-gutter * 2 + $scrollbar-width;\n$break-point-widest: $wrapper-max-width-widest + $base-gutter * 2 + $scrollbar-width;\n\n$section-title-font-size: 13px;\n\n$card-width: $grid-unit * 2 + $base-gutter;\n$card-height: 266px;\n$card-preview-image-height: 122px;\n$card-title-margin: 2px;\n$card-text-line-height: 19px;\n// Larger cards for wider screens:\n$card-width-large: 309px;\n$card-height-large: 370px;\n$card-preview-image-height-large: 155px;\n// Compact cards for Highlights\n$card-height-compact: 160px;\n$card-preview-image-height-compact: 108px;\n\n$topic-margin-top: 12px;\n\n$context-menu-button-size: 27px;\n$context-menu-button-boxshadow: 0 2px $grey-90-10;\n$context-menu-shadow: 0 5px 10px $black-30, 0 0 0 1px $black-20;\n$context-menu-font-size: 14px;\n$context-menu-border-radius: 5px;\n$context-menu-outer-padding: 5px;\n$context-menu-item-padding: 3px 12px;\n\n$error-fallback-font-size: 12px;\n$error-fallback-line-height: 1.5;\n\n$image-path: '../data/content/assets/';\n\n$snippets-container-height: 120px;\n\n$textbox-shadow-size: 4px;\n\n@mixin fade-in {\n  box-shadow: inset $inner-box-shadow, $shadow-primary;\n  transition: box-shadow 150ms;\n}\n\n@mixin fade-in-card {\n  box-shadow: $shadow-primary;\n  transition: box-shadow 150ms;\n}\n\n@mixin context-menu-button {\n  .context-menu-button {\n    background-clip: padding-box;\n    background-color: var(--newtab-contextmenu-button-color);\n    background-image: url('chrome://browser/skin/page-action.svg');\n    background-position: 55%;\n    border: $border-primary;\n    border-radius: 100%;\n    box-shadow: $context-menu-button-boxshadow;\n    cursor: pointer;\n    fill: var(--newtab-icon-primary-color);\n    height: $context-menu-button-size;\n    inset-inline-end: -($context-menu-button-size / 2);\n    opacity: 0;\n    position: absolute;\n    top: -($context-menu-button-size / 2);\n    transform: scale(0.25);\n    transition-duration: 150ms;\n    transition-property: transform, opacity;\n    width: $context-menu-button-size;\n\n    &:-moz-any(:active, :focus) {\n      opacity: 1;\n      transform: scale(1);\n    }\n  }\n}\n\n@mixin context-menu-button-hover {\n  .context-menu-button {\n    opacity: 1;\n    transform: scale(1);\n    transition-delay: 333ms;\n  }\n}\n\n@mixin context-menu-open-middle {\n  .context-menu {\n    margin-inline-end: auto;\n    margin-inline-start: auto;\n    inset-inline-end: auto;\n    inset-inline-start: -$base-gutter;\n  }\n}\n\n@mixin context-menu-open-left {\n  .context-menu {\n    margin-inline-end: 5px;\n    margin-inline-start: auto;\n    inset-inline-end: 0;\n    inset-inline-start: auto;\n  }\n}\n\n@mixin flip-icon {\n  &:dir(rtl) {\n    transform: scaleX(-1);\n  }\n}\n",
 		"@function textbox-shadow($color) {\n  @return 0 0 0 1px $color, 0 0 0 $textbox-shadow-size rgba($color, 0.3);\n}\n\n@mixin textbox-focus($color) {\n  --newtab-textbox-focus-color: $color;\n  --newtab-textbox-focus-boxshadow: textbox-shadow($color);\n}\n\n// scss variables related to the theme.\n$border-primary: 1px solid var(--newtab-border-primary-color);\n$border-secondary: 1px solid var(--newtab-border-secondary-color);\n$inner-box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);\n$input-border: 1px solid var(--newtab-textbox-border);\n$input-border-active: 1px solid var(--newtab-textbox-focus-color);\n$input-error-border: 1px solid $red-60;\n$input-error-boxshadow: textbox-shadow($red-60);\n$shadow-primary: 0 0 0 5px var(--newtab-card-active-outline-color);\n$shadow-secondary: 0 1px 4px 0 $grey-90-20;\n\n// Default theme\nbody {\n  // General styles\n  --newtab-background-color: $grey-10;\n  --newtab-border-primary-color: $grey-40;\n  --newtab-border-secondary-color: $grey-30;\n  --newtab-button-primary-color: $blue-60;\n  --newtab-button-secondary-color: inherit;\n  --newtab-element-active-color: $grey-30-60;\n  --newtab-element-hover-color: $grey-20;\n  --newtab-icon-primary-color: $grey-90-80;\n  --newtab-icon-secondary-color: $grey-90-60;\n  --newtab-icon-tertiary-color: $grey-30;\n  --newtab-inner-box-shadow-color: $black-10;\n  --newtab-link-primary-color: $blue-60;\n  --newtab-link-secondary-color: $teal-70;\n  --newtab-text-conditional-color: $grey-60;\n  --newtab-text-primary-color: $grey-90;\n  --newtab-text-secondary-color: $grey-50;\n  --newtab-textbox-background-color: $white;\n  --newtab-textbox-border: $grey-90-20;\n  @include textbox-focus($blue-60); // sass-lint:disable-line mixins-before-declarations\n\n  // Context menu\n  --newtab-contextmenu-background-color: $grey-10;\n  --newtab-contextmenu-button-color: $white;\n\n  // Modal + overlay\n  --newtab-modal-color: $white;\n  --newtab-overlay-color: $grey-20-80;\n\n  // Sections\n  --newtab-section-header-text-color: $grey-50;\n  --newtab-section-navigation-text-color: $grey-50;\n  --newtab-section-active-contextmenu-color: $grey-90;\n\n  // Search\n  --newtab-search-border-color: transparent;\n  --newtab-search-dropdown-color: $white;\n  --newtab-search-dropdown-header-color: $grey-10;\n  --newtab-search-header-background-color: $grey-10-95;\n  --newtab-search-icon-color: $grey-90-40;\n\n  // Top Sites\n  --newtab-topsites-background-color: $white;\n  --newtab-topsites-icon-shadow: inset $inner-box-shadow;\n  --newtab-topsites-label-color: inherit;\n\n  // Cards\n  --newtab-card-active-outline-color: $grey-30;\n  --newtab-card-background-color: $white;\n  --newtab-card-hairline-color: $black-10;\n  --newtab-card-shadow: 0 1px 4px 0 $grey-90-10;\n\n  // Snippets\n  --newtab-snippets-background-color: $white;\n  --newtab-snippets-hairline-color: transparent;\n\n  &[lwt-newtab-brighttext] {\n    // General styles\n    --newtab-background-color: $grey-80;\n    --newtab-border-primary-color: $grey-10-80;\n    --newtab-border-secondary-color: $grey-10-10;\n    --newtab-button-primary-color: $blue-60;\n    --newtab-button-secondary-color: $grey-70;\n    --newtab-element-active-color: $grey-10-20;\n    --newtab-element-hover-color: $grey-10-10;\n    --newtab-icon-primary-color: $grey-10-80;\n    --newtab-icon-secondary-color: $grey-10-40;\n    --newtab-icon-tertiary-color: $grey-10-40;\n    --newtab-inner-box-shadow-color: $grey-10-20;\n    --newtab-link-primary-color: $blue-40;\n    --newtab-link-secondary-color: $pocket-teal;\n    --newtab-text-conditional-color: $grey-10;\n    --newtab-text-primary-color: $grey-10;\n    --newtab-text-secondary-color: $grey-10-80;\n    --newtab-textbox-background-color: $grey-70;\n    --newtab-textbox-border: $grey-10-20;\n    @include textbox-focus($blue-40); // sass-lint:disable-line mixins-before-declarations\n\n    // Context menu\n    --newtab-contextmenu-background-color: $grey-60;\n    --newtab-contextmenu-button-color: $grey-80;\n\n    // Modal + overlay\n    --newtab-modal-color: $grey-80;\n    --newtab-overlay-color: $grey-90-80;\n\n    // Sections\n    --newtab-section-header-text-color: $grey-10-80;\n    --newtab-section-navigation-text-color: $grey-10-80;\n    --newtab-section-active-contextmenu-color: $white;\n\n    // Search\n    --newtab-search-border-color: $grey-10-20;\n    --newtab-search-dropdown-color: $grey-70;\n    --newtab-search-dropdown-header-color: $grey-60;\n    --newtab-search-header-background-color: $grey-80-95;\n    --newtab-search-icon-color: $grey-10-60;\n\n    // Top Sites\n    --newtab-topsites-background-color: $grey-70;\n    --newtab-topsites-icon-shadow: none;\n    --newtab-topsites-label-color: $grey-10-80;\n\n    // Cards\n    --newtab-card-active-outline-color: $grey-60;\n    --newtab-card-background-color: $grey-70;\n    --newtab-card-hairline-color: $grey-10-10;\n    --newtab-card-shadow: 0 1px 8px 0 $grey-90-20;\n\n    // Snippets\n    --newtab-snippets-background-color: $grey-70;\n    --newtab-snippets-hairline-color: $white-10;\n  }\n}\n",
 		".icon {\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-size: $icon-size;\n  -moz-context-properties: fill;\n  display: inline-block;\n  fill: var(--newtab-icon-primary-color);\n  height: $icon-size;\n  vertical-align: middle;\n  width: $icon-size;\n\n  &.icon-spacer {\n    margin-inline-end: 8px;\n  }\n\n  &.icon-small-spacer {\n    margin-inline-end: 6px;\n  }\n\n  &.icon-bookmark-added {\n    background-image: url('chrome://browser/skin/bookmark.svg');\n  }\n\n  &.icon-bookmark-hollow {\n    background-image: url('chrome://browser/skin/bookmark-hollow.svg');\n  }\n\n  &.icon-clear-input {\n    fill: var(--newtab-icon-secondary-color);\n    background-image: url('#{$image-path}glyph-cancel-16.svg');\n  }\n\n  &.icon-delete {\n    background-image: url('#{$image-path}glyph-delete-16.svg');\n  }\n\n  &.icon-search {\n    background-image: url('chrome://browser/skin/search-glass.svg');\n  }\n\n  &.icon-modal-delete {\n    flex-shrink: 0;\n    background-image: url('#{$image-path}glyph-modal-delete-32.svg');\n    background-size: $larger-icon-size;\n    height: $larger-icon-size;\n    width: $larger-icon-size;\n  }\n\n  &.icon-dismiss {\n    background-image: url('#{$image-path}glyph-dismiss-16.svg');\n  }\n\n  &.icon-info {\n    background-image: url('#{$image-path}glyph-info-16.svg');\n  }\n\n  &.icon-import {\n    background-image: url('#{$image-path}glyph-import-16.svg');\n  }\n\n  &.icon-new-window {\n    @include flip-icon;\n    background-image: url('#{$image-path}glyph-newWindow-16.svg');\n  }\n\n  &.icon-new-window-private {\n    background-image: url('chrome://browser/skin/privateBrowsing.svg');\n  }\n\n  &.icon-settings {\n    background-image: url('chrome://browser/skin/settings.svg');\n  }\n\n  &.icon-pin {\n    @include flip-icon;\n    background-image: url('#{$image-path}glyph-pin-16.svg');\n  }\n\n  &.icon-unpin {\n    @include flip-icon;\n    background-image: url('#{$image-path}glyph-unpin-16.svg');\n  }\n\n  &.icon-edit {\n    background-image: url('#{$image-path}glyph-edit-16.svg');\n  }\n\n  &.icon-pocket {\n    background-image: url('#{$image-path}glyph-pocket-16.svg');\n  }\n\n  &.icon-pocket-save {\n    background-image: url('#{$image-path}glyph-pocket-save-16.svg');\n  }\n\n  &.icon-history-item {\n    background-image: url('chrome://browser/skin/history.svg');\n  }\n\n  &.icon-trending {\n    background-image: url('#{$image-path}glyph-trending-16.svg');\n    transform: translateY(2px); // trending bolt is visually top heavy\n  }\n\n  &.icon-now {\n    background-image: url('chrome://browser/skin/history.svg');\n  }\n\n  &.icon-topsites {\n    background-image: url('#{$image-path}glyph-topsites-16.svg');\n  }\n\n  &.icon-pin-small {\n    @include flip-icon;\n    background-image: url('#{$image-path}glyph-pin-12.svg');\n    background-size: $smaller-icon-size;\n    height: $smaller-icon-size;\n    width: $smaller-icon-size;\n  }\n\n  &.icon-check {\n    background-image: url('chrome://browser/skin/check.svg');\n  }\n\n  &.icon-download {\n    background-image: url('chrome://browser/skin/downloads/download-icons.svg#arrow-with-bar');\n  }\n\n  &.icon-copy {\n    background-image: url('chrome://browser/skin/edit-copy.svg');\n  }\n\n  &.icon-open-file {\n    background-image: url('#{$image-path}glyph-open-file-16.svg');\n  }\n\n  &.icon-webextension {\n    background-image: url('#{$image-path}glyph-webextension-16.svg');\n  }\n\n  &.icon-highlights {\n    background-image: url('#{$image-path}glyph-highlights-16.svg');\n  }\n\n  &.icon-arrowhead-down {\n    background-image: url('#{$image-path}glyph-arrowhead-down-16.svg');\n  }\n\n  &.icon-arrowhead-down-small {\n    background-image: url('#{$image-path}glyph-arrowhead-down-12.svg');\n    background-size: $smaller-icon-size;\n    height: $smaller-icon-size;\n    width: $smaller-icon-size;\n  }\n\n  &.icon-arrowhead-forward-small {\n    background-image: url('#{$image-path}glyph-arrowhead-down-12.svg');\n    background-size: $smaller-icon-size;\n    height: $smaller-icon-size;\n    transform: rotate(-90deg);\n    width: $smaller-icon-size;\n\n    &:dir(rtl) {\n      transform: rotate(90deg);\n    }\n  }\n\n  &.icon-arrowhead-up {\n    background-image: url('#{$image-path}glyph-arrowhead-down-16.svg');\n    transform: rotate(180deg);\n  }\n\n  &.icon-add {\n    background-image: url('#{$image-path}glyph-add-16.svg');\n  }\n\n  &.icon-minimize {\n    background-image: url('#{$image-path}glyph-minimize-16.svg');\n  }\n\n  &.icon-maximize {\n    background-image: url('#{$image-path}glyph-maximize-16.svg');\n  }\n}\n",
-		".outer-wrapper {\n  color: var(--newtab-text-primary-color);\n  display: flex;\n  flex-grow: 1;\n  min-height: 100vh;\n  padding: ($section-spacing + $section-vertical-padding) $base-gutter $base-gutter;\n\n  &.fixed-to-top {\n    display: block;\n  }\n\n  a {\n    color: var(--newtab-link-primary-color);\n  }\n}\n\nmain {\n  margin: auto;\n  // Offset the snippets container so things at the bottom of the page are still\n  // visible when snippets / onboarding are visible. Adjust for other spacing.\n  padding-bottom: $snippets-container-height - $section-spacing - $base-gutter;\n  width: $wrapper-default-width;\n\n  @media (min-width: $break-point-small) {\n    width: $wrapper-max-width-small;\n  }\n\n  @media (min-width: $break-point-medium) {\n    width: $wrapper-max-width-medium;\n  }\n\n  @media (min-width: $break-point-large) {\n    width: $wrapper-max-width-large;\n  }\n\n  @media (min-width: $break-point-widest) {\n    width: $wrapper-max-width-widest;\n  }\n\n  section {\n    margin-bottom: $section-spacing;\n    position: relative;\n  }\n\n  .hide-main & {\n    visibility: hidden;\n  }\n\n}\n\n.base-content-fallback {\n  // Make the error message be centered against the viewport\n  height: 100vh;\n}\n\n.body-wrapper {\n  // Hide certain elements so the page structure is fixed, e.g., placeholders,\n  // while avoiding flashes of changing content, e.g., icons and text\n  $selectors-to-hide: '\n    .section-title,\n    .sections-list .section:last-of-type,\n    .topic\n  ';\n\n  #{$selectors-to-hide} {\n    opacity: 0;\n  }\n\n  &.on {\n    #{$selectors-to-hide} {\n      opacity: 1;\n    }\n  }\n}\n\n.non-collapsible-section {\n  padding: 0 $section-horizontal-padding;\n}\n\n.prefs-button {\n  button {\n    background-color: transparent;\n    border: 0;\n    cursor: pointer;\n    fill: var(--newtab-icon-primary-color);\n    inset-inline-end: 15px;\n    padding: 15px;\n    position: fixed;\n    top: 15px;\n    z-index: 1000;\n\n    &:hover,\n    &:focus {\n      background-color: var(--newtab-element-hover-color);\n    }\n\n    &:active {\n      background-color: var(--newtab-element-active-color);\n    }\n  }\n}\n",
+		".outer-wrapper {\n  color: var(--newtab-text-primary-color);\n  display: flex;\n  flex-grow: 1;\n  min-height: 100vh;\n  padding: ($section-spacing + $section-vertical-padding) $base-gutter $base-gutter;\n\n  &.fixed-to-top {\n    display: block;\n  }\n\n  a {\n    color: var(--newtab-link-primary-color);\n  }\n}\n\nmain {\n  margin: auto;\n  // Offset the snippets container so things at the bottom of the page are still\n  // visible when snippets / onboarding are visible. Adjust for other spacing.\n  padding-bottom: $snippets-container-height - $section-spacing - $base-gutter;\n  width: $wrapper-default-width;\n\n  @media (min-width: $break-point-small) {\n    width: $wrapper-max-width-small;\n  }\n\n  @media (min-width: $break-point-medium) {\n    width: $wrapper-max-width-medium;\n  }\n\n  @media (min-width: $break-point-large) {\n    width: $wrapper-max-width-large;\n  }\n\n  @media (min-width: $break-point-widest) {\n    width: $wrapper-max-width-widest;\n  }\n\n  section {\n    margin-bottom: $section-spacing;\n    position: relative;\n  }\n\n  .hide-main & {\n    visibility: hidden;\n  }\n\n}\n\n.base-content-fallback {\n  // Make the error message be centered against the viewport\n  height: 100vh;\n}\n\n.body-wrapper {\n  // Hide certain elements so the page structure is fixed, e.g., placeholders,\n  // while avoiding flashes of changing content, e.g., icons and text\n  $selectors-to-hide: '\n    .section-title,\n    .sections-list .section:last-of-type,\n    .topics\n  ';\n\n  #{$selectors-to-hide} {\n    opacity: 0;\n  }\n\n  &.on {\n    #{$selectors-to-hide} {\n      opacity: 1;\n    }\n  }\n}\n\n.non-collapsible-section {\n  padding: 0 $section-horizontal-padding;\n}\n\n.prefs-button {\n  button {\n    background-color: transparent;\n    border: 0;\n    cursor: pointer;\n    fill: var(--newtab-icon-primary-color);\n    inset-inline-end: 15px;\n    padding: 15px;\n    position: fixed;\n    top: 15px;\n    z-index: 1000;\n\n    &:hover,\n    &:focus {\n      background-color: var(--newtab-element-hover-color);\n    }\n\n    &:active {\n      background-color: var(--newtab-element-active-color);\n    }\n  }\n}\n",
 		".as-error-fallback {\n  align-items: center;\n  border-radius: $border-radius;\n  box-shadow: inset $inner-box-shadow;\n  color: var(--newtab-text-conditional-color);\n  display: flex;\n  flex-direction: column;\n  font-size: $error-fallback-font-size;\n  justify-content: center;\n  justify-items: center;\n  line-height: $error-fallback-line-height;\n\n  a {\n    color: var(--newtab-text-conditional-color);\n    text-decoration: underline;\n  }\n}\n",
 		"$top-sites-size: $grid-unit;\n$top-sites-border-radius: 6px;\n$top-sites-title-height: 30px;\n$top-sites-vertical-space: 8px;\n$screenshot-size: cover;\n$rich-icon-size: 96px;\n$default-icon-wrapper-size: 42px;\n$default-icon-size: 32px;\n$default-icon-offset: 6px;\n$half-base-gutter: $base-gutter / 2;\n$hover-transition-duration: 150ms;\n\n.top-sites {\n  // Take back the margin from the bottom row of vertical spacing as well as the\n  // extra whitespace below the title text as it's vertically centered.\n  margin-bottom: $section-spacing - ($top-sites-vertical-space + $top-sites-title-height / 3);\n}\n\n.top-sites-list {\n  list-style: none;\n  margin: 0 (-$half-base-gutter);\n  padding: 0;\n\n  // Two columns\n  @media (max-width: $break-point-small) {\n    :nth-child(2n+1) {\n      @include context-menu-open-middle;\n    }\n\n    :nth-child(2n) {\n      @include context-menu-open-left;\n    }\n  }\n\n  // Three columns\n  @media (min-width: $break-point-small) and (max-width: $break-point-medium) {\n    :nth-child(3n+2),\n    :nth-child(3n) {\n      @include context-menu-open-left;\n    }\n  }\n\n  // Four columns\n  @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n    :nth-child(4n) {\n      @include context-menu-open-left;\n    }\n  }\n  @media (min-width: $break-point-medium) and (max-width: $break-point-medium + $card-width) {\n    :nth-child(4n+3) {\n      @include context-menu-open-left;\n    }\n  }\n\n  // Six columns\n  @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n    :nth-child(6n) {\n      @include context-menu-open-left;\n    }\n  }\n  @media (min-width: $break-point-large) and (max-width: $break-point-large + $card-width) {\n    :nth-child(6n+5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  // Eight columns\n  @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n    :nth-child(8n) {\n      @include context-menu-open-left;\n    }\n  }\n  @media (min-width: $break-point-widest) and (max-width: $break-point-widest + $card-width) {\n    :nth-child(8n+7) {\n      @include context-menu-open-left;\n    }\n  }\n\n  @media not all and (min-width: $break-point-widest) {\n    .hide-for-narrow {\n      display: none;\n    }\n  }\n\n  li {\n    margin: 0 0 $top-sites-vertical-space;\n  }\n\n  &:not(.dnd-active) {\n    .top-site-outer:-moz-any(.active, :focus, :hover) {\n      .tile {\n        @include fade-in;\n      }\n\n      @include context-menu-button-hover;\n    }\n  }\n}\n\n// container for drop zone\n.top-site-outer {\n  padding: 0 $half-base-gutter;\n  display: inline-block;\n\n  // container for context menu\n  .top-site-inner {\n    position: relative;\n\n    > a {\n      color: inherit;\n      display: block;\n      outline: none;\n\n      &:-moz-any(.active, :focus) {\n        .tile {\n          @include fade-in;\n        }\n      }\n    }\n  }\n\n  @include context-menu-button;\n\n  .tile { // sass-lint:disable-block property-sort-order\n    border-radius: $top-sites-border-radius;\n    box-shadow: inset $inner-box-shadow, var(--newtab-card-shadow);\n    cursor: pointer;\n    height: $top-sites-size;\n    position: relative;\n    width: $top-sites-size;\n\n    // For letter fallback\n    align-items: center;\n    color: var(--newtab-text-secondary-color);\n    display: flex;\n    font-size: 32px;\n    font-weight: 200;\n    justify-content: center;\n    text-transform: uppercase; // sass-lint:disable-line no-disallowed-properties\n    transition: box-shadow $hover-transition-duration;\n\n    &::before {\n      content: attr(data-fallback);\n    }\n  }\n\n  .screenshot {\n    background-color: $white;\n    background-position: top left;\n    background-size: $screenshot-size;\n    border-radius: $top-sites-border-radius;\n    box-shadow: inset $inner-box-shadow;\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    position: absolute;\n    top: 0;\n    transition: opacity 1s;\n    width: 100%;\n\n    &.active {\n      opacity: 1;\n    }\n  }\n\n  // Some common styles for all icons (rich and default) in top sites\n  .top-site-icon {\n    background-color: var(--newtab-topsites-background-color);\n    background-position: center center;\n    background-repeat: no-repeat;\n    border-radius: $top-sites-border-radius;\n    box-shadow: var(--newtab-topsites-icon-shadow);\n    position: absolute;\n  }\n\n  .rich-icon {\n    background-size: cover;\n    height: 100%;\n    inset-inline-start: 0;\n    top: 0;\n    width: 100%;\n  }\n\n  .default-icon,\n  .search-topsite {\n    background-size: $default-icon-size;\n    bottom: -$default-icon-offset;\n    height: $default-icon-wrapper-size;\n    inset-inline-end: -$default-icon-offset;\n    width: $default-icon-wrapper-size;\n\n    // for corner letter fallback\n    align-items: center;\n    display: flex;\n    font-size: 20px;\n    justify-content: center;\n\n    &[data-fallback]::before {\n      content: attr(data-fallback);\n    }\n  }\n\n  .search-topsite {\n    background-image: url('#{$image-path}glyph-search-16.svg');\n    background-size: 26px;\n    background-color: $blue-60;\n    border-radius: $default-icon-wrapper-size;\n    -moz-context-properties: fill;\n    fill: $white;\n    box-shadow: var(--newtab-card-shadow);\n    transition-duration: $hover-transition-duration;\n    transition-property: background-size, bottom, inset-inline-end, height, width;\n  }\n\n  &:hover .search-topsite {\n    $hover-icon-wrapper-size: $default-icon-wrapper-size + 4;\n    $hover-icon-offset: -$default-icon-offset - 3;\n\n    background-size: 28px;\n    border-radius: $hover-icon-wrapper-size;\n    bottom: $hover-icon-offset;\n    height: $hover-icon-wrapper-size;\n    inset-inline-end: $hover-icon-offset;\n    width: $hover-icon-wrapper-size;\n  }\n\n  // We want all search shortcuts to have a white background in case they have transparency.\n  &.search-shortcut {\n    .rich-icon {\n      background-color: $white;\n    }\n  }\n\n  .title {\n    color: var(--newtab-topsites-label-color);\n    font: message-box;\n    height: $top-sites-title-height;\n    line-height: $top-sites-title-height;\n    text-align: center;\n    width: $top-sites-size;\n    position: relative;\n\n    .icon {\n      fill: var(--newtab-icon-tertiary-color);\n      inset-inline-start: 0;\n      position: absolute;\n      top: 10px;\n    }\n\n    span {\n      height: $top-sites-title-height;\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    &.pinned {\n      span {\n        padding: 0 13px;\n      }\n    }\n  }\n\n  .edit-button {\n    background-image: url('#{$image-path}glyph-edit-16.svg');\n  }\n\n  &.placeholder {\n    .tile {\n      box-shadow: inset $inner-box-shadow;\n    }\n\n    .screenshot {\n      display: none;\n    }\n  }\n\n  &.dragged {\n    .tile {\n      background: $grey-20;\n      box-shadow: none;\n\n      *,\n      &::before {\n        display: none;\n      }\n    }\n\n    .title {\n      visibility: hidden;\n    }\n  }\n}\n\n.edit-topsites-wrapper {\n  .modal {\n    box-shadow: $shadow-secondary;\n    left: 0;\n    margin: 0 auto;\n    max-height: calc(100% - 40px);\n    overflow-y: auto;\n    position: fixed;\n    right: 0;\n    top: 40px;\n    width: $wrapper-default-width;\n\n    @media (min-width: $break-point-small) {\n      width: $wrapper-max-width-small;\n    }\n\n    @media (min-width: $break-point-medium) {\n      width: $wrapper-max-width-medium;\n    }\n\n    @media (min-width: $break-point-large) {\n      width: $wrapper-max-width-large;\n    }\n  }\n}\n\n.topsite-form {\n  $form-width: 300px;\n  $form-spacing: 32px;\n\n  .section-title {\n    font-size: 16px;\n    margin: 0 0 16px;\n  }\n\n  .form-input-container {\n    max-width: $form-width + 3 * $form-spacing + $rich-icon-size;\n    margin: 0 auto;\n    padding: $form-spacing;\n\n    .top-site-outer {\n      pointer-events: none;\n    }\n  }\n\n  .search-shortcuts-container {\n    max-width: 700px;\n    margin: 0 auto;\n    padding: $form-spacing;\n\n    > div {\n      margin-inline-end: -39px;\n    }\n\n    .top-site-outer {\n      margin-inline-start: 0;\n      margin-inline-end: 39px;\n    }\n  }\n\n  .top-site-outer {\n    padding: 0;\n    margin: 24px 0 0;\n    margin-inline-start: $form-spacing;\n  }\n\n  .fields-and-preview {\n    display: flex;\n  }\n\n  label {\n    font-size: $section-title-font-size;\n  }\n\n  .form-wrapper {\n    width: 100%;\n\n    .field {\n      position: relative;\n\n      .icon-clear-input {\n        position: absolute;\n        transform: translateY(-50%);\n        top: 50%;\n        inset-inline-end: 8px;\n      }\n    }\n\n    .url {\n      input:dir(ltr) {\n        padding-right: 32px;\n      }\n\n      input:dir(rtl) {\n        padding-left: 32px;\n\n        &:not(:placeholder-shown) {\n          direction: ltr;\n          text-align: right;\n        }\n      }\n    }\n\n    .enable-custom-image-input {\n      display: inline-block;\n      font-size: 13px;\n      margin-top: 4px;\n      cursor: pointer;\n\n      &:hover {\n        text-decoration: underline;\n      }\n    }\n\n    .custom-image-input-container {\n      margin-top: 4px;\n\n      .loading-container {\n        width: 16px;\n        height: 16px;\n        overflow: hidden;\n        position: absolute;\n        transform: translateY(-50%);\n        top: 50%;\n        inset-inline-end: 8px;\n      }\n\n      // This animation is derived from Firefox's tab loading animation\n      // See https://searchfox.org/mozilla-central/rev/b29daa46443b30612415c35be0a3c9c13b9dc5f6/browser/themes/shared/tabs.inc.css#208-216\n      .loading-animation {\n        @keyframes tab-throbber-animation {\n          100% { transform: translateX(-960px); }\n        }\n\n        @keyframes tab-throbber-animation-rtl {\n          100% { transform: translateX(960px); }\n        }\n\n        width: 960px;\n        height: 16px;\n        -moz-context-properties: fill;\n        fill: $blue-50;\n        background-image: url('chrome://browser/skin/tabbrowser/loading.svg');\n        animation: tab-throbber-animation 1.05s steps(60) infinite;\n\n        &:dir(rtl) {\n          animation-name: tab-throbber-animation-rtl;\n        }\n      }\n    }\n\n    input {\n      &[type='text'] {\n        background-color: var(--newtab-textbox-background-color);\n        border: $input-border;\n        margin: 8px 0;\n        padding: 0 8px;\n        height: 32px;\n        width: 100%;\n        font-size: 15px;\n\n        &:focus {\n          border: $input-border-active;\n          box-shadow: var(--newtab-textbox-focus-boxshadow);\n        }\n\n        &[disabled] {\n          border: $input-border;\n          box-shadow: none;\n          opacity: 0.4;\n        }\n      }\n    }\n\n    .invalid {\n      input {\n        &[type='text'] {\n          border: $input-error-border;\n          box-shadow: $input-error-boxshadow;\n        }\n      }\n    }\n\n    .error-tooltip {\n      animation: fade-up-tt 450ms;\n      background: $red-60;\n      border-radius: 2px;\n      color: $white;\n      inset-inline-start: 3px;\n      padding: 5px 12px;\n      position: absolute;\n      top: 44px;\n      z-index: 1;\n\n      // tooltip caret\n      &::before {\n        background: $red-60;\n        bottom: -8px;\n        content: '.';\n        height: 16px;\n        inset-inline-start: 12px;\n        position: absolute;\n        text-indent: -999px;\n        top: -7px;\n        transform: rotate(45deg);\n        white-space: nowrap;\n        width: 16px;\n        z-index: -1;\n      }\n    }\n  }\n\n  .actions {\n    justify-content: flex-end;\n\n    button {\n      margin-inline-start: 10px;\n      margin-inline-end: 0;\n    }\n  }\n\n  @media (max-width: $break-point-small) {\n    .fields-and-preview {\n      flex-direction: column;\n\n      .top-site-outer {\n        margin-inline-start: 0;\n      }\n    }\n  }\n\n  // prevent text selection of keyword label when clicking to select\n  .title {\n    -moz-user-select: none;\n  }\n\n  // CSS styled checkbox\n  [type='checkbox']:not(:checked),\n  [type='checkbox']:checked {\n    inset-inline-start: -9999px;\n    position: absolute;\n  }\n\n  [type='checkbox']:not(:checked) + label,\n  [type='checkbox']:checked + label {\n    cursor: pointer;\n    display: block;\n    position: relative;\n  }\n\n  $checkbox-offset: -8px;\n\n  [type='checkbox']:not(:checked) + label::before,\n  [type='checkbox']:checked + label::before {\n    background: var(--newtab-background-color);\n    border: $input-border;\n    border-radius: $border-radius;\n    content: '';\n    height: 21px;\n    left: $checkbox-offset;\n    position: absolute;\n    top: $checkbox-offset;\n    width: 21px;\n    z-index: 1;\n\n    [dir='rtl'] & {\n      left: auto;\n      right: $checkbox-offset;\n    }\n  }\n\n  // checkmark\n  [type='checkbox']:not(:checked) + label::after,\n  [type='checkbox']:checked + label::after {\n    background: url('chrome://global/skin/in-content/check.svg') no-repeat center center; // sass-lint:disable-line no-url-domains\n    content: '';\n    height: 21px;\n    left: $checkbox-offset;\n    position: absolute;\n    top: $checkbox-offset;\n    width: 21px;\n    -moz-context-properties: fill, stroke;\n    fill: var(--newtab-link-primary-color);\n    stroke: none;\n    z-index: 2;\n\n    [dir='rtl'] & {\n      left: auto;\n      right: $checkbox-offset;\n    }\n  }\n\n  // when selected, highlight the tile\n  [type='checkbox']:checked + label {\n    .tile {\n      box-shadow: 0 0 0 2px var(--newtab-link-primary-color);\n    }\n  }\n\n  // checkmark changes\n  [type='checkbox']:not(:checked) + label::after {\n    opacity: 0;\n  }\n\n  [type='checkbox']:checked + label::after {\n    opacity: 1;\n  }\n\n  // accessibility\n  [type='checkbox']:checked:focus + label::before,\n  [type='checkbox']:not(:checked):focus + label::before {\n    border: 1px dotted var(--newtab-link-primary-color);\n  }\n}\n\n//used for tooltips below form element\n@keyframes fade-up-tt {\n  0% {\n    opacity: 0;\n    transform: translateY(15px);\n  }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n",
-		".sections-list {\n  .section-list {\n    display: grid;\n    grid-gap: $base-gutter;\n    grid-template-columns: repeat(auto-fit, $card-width);\n    margin: 0;\n\n    @media (max-width: $break-point-medium) {\n      @include context-menu-open-left;\n    }\n\n    @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n      :nth-child(2n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n  }\n\n  .section-empty-state {\n    border: $border-secondary;\n    border-radius: $border-radius;\n    display: flex;\n    height: $card-height;\n    width: 100%;\n\n    .empty-state {\n      margin: auto;\n      max-width: 350px;\n\n      .empty-state-icon {\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: 50px 50px;\n        -moz-context-properties: fill;\n        display: block;\n        fill: var(--newtab-icon-secondary-color);\n        height: 50px;\n        margin: 0 auto;\n        width: 50px;\n      }\n\n      .empty-state-message {\n        color: var(--newtab-text-primary-color);\n        font-size: 13px;\n        margin-bottom: 0;\n        text-align: center;\n      }\n    }\n\n    @media (min-width: $break-point-widest) {\n      height: $card-height-large;\n    }\n  }\n}\n\n.top-stories-bottom-container {\n  color: var(--newtab-section-navigation-text-color);\n  font-size: 12px;\n  line-height: 1.6;\n  margin-top: $topic-margin-top;\n\n  a {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n\n    &.more-recommendations {\n      font-weight: normal;\n      font-size: 13px;\n    }\n  }\n\n  @media (min-width: $break-point-large) {\n    line-height: 16px;\n  }\n\n  // This is a clearfix to for the more-recommendations link which is floating and causes\n  // some jank when we set overflow:hidden for the animation.\n  &::after {\n    clear: both;\n    content: '';\n    display: table;\n  }\n}\n\n@media (min-width: $break-point-widest) {\n  .sections-list {\n    // Compact cards stay the same size but normal cards get bigger.\n    .normal-cards {\n      .section-list {\n        grid-template-columns: repeat(auto-fit, $card-width-large);\n      }\n    }\n  }\n}\n",
+		".sections-list {\n  .section-list {\n    display: grid;\n    grid-gap: $base-gutter;\n    grid-template-columns: repeat(auto-fit, $card-width);\n    margin: 0;\n\n    @media (max-width: $break-point-medium) {\n      @include context-menu-open-left;\n    }\n\n    @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n      :nth-child(2n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n  }\n\n  .section-empty-state {\n    border: $border-secondary;\n    border-radius: $border-radius;\n    display: flex;\n    height: $card-height;\n    width: 100%;\n\n    .empty-state {\n      margin: auto;\n      max-width: 350px;\n\n      .empty-state-icon {\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: 50px 50px;\n        -moz-context-properties: fill;\n        display: block;\n        fill: var(--newtab-icon-secondary-color);\n        height: 50px;\n        margin: 0 auto;\n        width: 50px;\n      }\n\n      .empty-state-message {\n        color: var(--newtab-text-primary-color);\n        font-size: 13px;\n        margin-bottom: 0;\n        text-align: center;\n      }\n    }\n\n    @media (min-width: $break-point-widest) {\n      height: $card-height-large;\n    }\n  }\n}\n\n.top-stories-bottom-container {\n  color: var(--newtab-section-navigation-text-color);\n  font-size: 12px;\n  line-height: 1.6;\n  margin-top: $topic-margin-top;\n\n  a {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n\n    &.more-recommendations {\n      font-weight: normal;\n      font-size: 13px;\n    }\n  }\n\n  @media (min-width: $break-point-large) {\n    line-height: 16px;\n    height: 16px;\n  }\n\n  // This is a clearfix to for the more-recommendations link which is floating and causes\n  // some jank when we set overflow:hidden for the animation.\n  &::after {\n    clear: both;\n    content: '';\n    display: table;\n  }\n}\n\n@media (min-width: $break-point-widest) {\n  .sections-list {\n    // Compact cards stay the same size but normal cards get bigger.\n    .normal-cards {\n      .section-list {\n        grid-template-columns: repeat(auto-fit, $card-width-large);\n      }\n    }\n  }\n}\n",
 		".activity-stream {\n  &.welcome {\n    overflow: hidden;\n  }\n\n  &:not(.welcome) {\n    .overlay-wrapper {\n      display: none;\n    }\n  }\n}\n\n.overlay-wrapper {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  z-index: 21000;\n  transition: opacity 0.4s;\n  opacity: 0;\n  overflow-x: auto;\n\n  &.show {\n    transition: none;\n    opacity: 1;\n\n    .firstrun-sign-in {\n      transition: opacity 1.5s, transform 1.5s;\n      transition-delay: 0.2s;\n      transform: translateY(-50%) scale(1);\n      opacity: 1;\n\n      @media screen and (max-width: 790px) {\n        float: none;\n        margin: auto;\n        top: 190px;\n        margin-bottom: 100px;\n      }\n    }\n\n    .firstrun-firefox-logo {\n      transition: opacity 2.3s;\n      opacity: 1;\n    }\n\n    .firstrun-title,\n    .firstrun-content,\n    .firstrun-link {\n      transition: transform 0.5s, opacity 0.8s;\n      transform: translateY(0);\n      opacity: 1;\n    }\n\n    .firstrun-title {\n      transition-delay: 0.2s;\n    }\n\n    .firstrun-content {\n      transition-delay: 0.4s;\n    }\n\n    .firstrun-link {\n      transition-delay: 0.6s;\n    }\n\n    .fxaccounts-container {\n      transition: none;\n      opacity: 1;\n    }\n  }\n}\n\n.background,\nbody.hide-main { // sass-lint:disable-line no-qualifying-elements\n  width: 100%;\n  height: 100%;\n  display: block;\n  background-image: url('#{$image-path}fox-tail.png'), $about-welcome-gradient;\n  background-position-x: center;\n  background-position-y: -200px, top;\n  background-repeat: no-repeat;\n  background-size: cover;\n  position: fixed;\n}\n\n.firstrun-sign-in {\n  transform: translateY(-50%) scale(0.8);\n  position: relative;\n  top: 50%;\n  width: 358px;\n  opacity: 0;\n  background-color: $white;\n  float: inline-end;\n  color: $grey-90;\n  text-align: center;\n  padding: 10px;\n\n  form {\n    position: relative;\n  }\n\n  .extra-links {\n    font-size: 12px;\n    max-width: 340px;\n    margin: 17px 50px;\n    color: $about-welcome-extra-links;\n    cursor: default;\n\n    a {\n      color: $grey-50;\n      cursor: pointer;\n      text-decoration: underline;\n    }\n\n    a:hover,\n    a:active,\n    a:focus {\n      color: $blue-50;\n    }\n  }\n\n  .email-input {\n    box-shadow: none;\n    margin: auto;\n    width: 244px;\n    display: block;\n    height: 40px;\n    padding-inline-start: 20px;\n    border: 1px solid $grey-50;\n    border-radius: 2px;\n    font-size: 16px;\n    transition: border-color 150ms, box-shadow 150ms;\n\n    &:hover {\n      border-color: $grey-90;\n    }\n\n    &:focus {\n      border-color: $blue-50;\n      box-shadow: 0 0 0 3px $email-input-focus;\n    }\n\n    &.invalid {\n      border-color: $red-60;\n    }\n\n    &.invalid:focus {\n      box-shadow: 0 0 0 3px $email-input-invalid;\n    }\n  }\n\n  .form-header {\n    font-size: 22px;\n    margin: 15px auto;\n  }\n\n  .form-header .sub-header {\n    font-size: 14px;\n    margin-top: 4px;\n    display: block;\n  }\n\n  button {\n    display: block;\n    cursor: pointer;\n    margin: 10px auto 0;\n  }\n\n  .continue-button {\n    font-size: 18px;\n    height: 43px;\n    width: 250px;\n    padding: 8px 0;\n    border: 0;\n    border-radius: 4px;\n    color: $white;\n    background-color: $blue-60;\n    transition: background-color 150ms;\n\n    &:not([disabled]):active,\n    &:not([disabled]):hover {\n      background: $blue-70;\n      border-color: $blue-80;\n    }\n  }\n\n  .skip-button {\n    font-size: 13px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    background-color: $grey-10;\n    color: $blue-50;\n    border: 1px solid $blue-50;\n    border-radius: 2px;\n    min-height: 24px;\n    padding: 5px 10px;\n    transition: background-color 150ms, color 150ms, border-color 150ms;\n\n    &[disabled] {\n      background-color: $grey-20;\n      border-color: $grey-40;\n      color: $grey-50;\n      cursor: default;\n      opacity: 0.5;\n    }\n\n    &:not([disabled]):hover {\n      background-color: $blue-50;\n      border-color: $blue-60;\n      color: $white;\n    }\n  }\n}\n\n.firstrun-left-divider {\n  position: relative;\n  float: inline-start;\n  clear: both;\n  width: 435px;\n\n  @media screen and (max-width: 825px) {\n    width: 400px;\n  }\n\n  @media screen and (max-width: 790px) {\n    margin: auto;\n    float: none;\n    width: 352px;\n    text-align: center;\n  }\n}\n\n.firstrun-content {\n  line-height: 1.5;\n  margin-bottom: 48px;\n  max-width: 352px;\n  background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n  padding-bottom: 210px;\n}\n\na.firstrun-link { // sass-lint:disable-line no-qualifying-elements\n  color: $white;\n  display: block;\n  text-decoration: underline;\n\n  &:hover,\n  &:active,\n  &:focus {\n    color: $white;\n  }\n}\n\n.firstrun-title {\n  background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n  background-size: 90px 90px;\n  margin: 40px 0 10px;\n  padding-top: 110px;\n\n  @media screen and (max-width: 790px) {\n    background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n    background-size: 90px 90px;\n  }\n\n  &:dir(rtl) {\n    background-position: top right;\n  }\n}\n\n.fxaccounts-container {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  color: $white;\n  height: 515px;\n  margin: auto;\n  width: 819px;\n  z-index: 10;\n  transition: opacity 0.3s;\n  opacity: 0;\n\n  @media screen and (max-width: 825px) {\n    width: 784px;\n  }\n\n  @media screen and (max-width: 790px) {\n    width: auto;\n    height: 100%;\n  }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n  opacity: 0;\n  transform: translateY(-5px);\n}\n\n.error {\n  display: none;\n}\n\n.error.active {\n  display: block;\n  padding: 5px 12px;\n  animation: fade-down 450ms;\n  font-size: 12px;\n  font-weight: 500;\n  color: $white;\n  background-color: $red-60;\n  position: absolute;\n  inset-inline-start: 50px;\n  top: -28px;\n  border-radius: 2px;\n\n  &::before {\n    inset-inline-start: 12px;\n    background: $red-60;\n    bottom: -8px;\n    content: '.';\n    height: 16px;\n    position: absolute;\n    text-indent: -999px;\n    transform: rotate(45deg);\n    white-space: nowrap;\n    width: 16px;\n    z-index: -1;\n  }\n}\n\n@keyframes fade-down {\n  0% {\n    opacity: 0;\n    transform: translateY(-15px);\n  }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n",
 		".topics {\n  ul {\n    margin: 0;\n    padding: 0;\n    @media (min-width: $break-point-large) {\n      display: inline;\n      padding-inline-start: 12px;\n    }\n  }\n\n  ul li {\n    display: inline-block;\n\n    &::after {\n      content: '•';\n      padding: 8px;\n    }\n\n    &:last-child::after {\n      content: none;\n    }\n  }\n}\n",
 		".search-wrapper {\n  $search-height: 48px;\n  $search-icon-size: 24px;\n  $search-icon-padding: 12px;\n  $search-icon-width: 2 * $search-icon-padding + $search-icon-size -2;\n  $search-button-width: 48px;\n  $glyph-forward: url('chrome://browser/skin/forward.svg');\n\n  padding: 34px 0 64px;\n\n  @media (max-height: 700px) {\n    & {\n      padding: 0 0 30px;\n    }\n  }\n\n  .search-inner-wrapper {\n    cursor: default;\n    display: flex;\n    height: $search-height;\n    margin: 0 auto;\n    position: relative;\n    width: $searchbar-width-smallest;\n\n    @media (min-width: $break-point-small) {\n      width: $searchbar-width-small;\n    }\n\n    @media (min-width: $break-point-medium) {\n      width: $searchbar-width-medium;\n    }\n\n    @media (min-width: $break-point-large) {\n      width: $searchbar-width-large;\n    }\n  }\n\n  input {\n    background: var(--newtab-textbox-background-color) var(--newtab-search-icon) $search-icon-padding center no-repeat;\n    background-size: $search-icon-size;\n    border: solid 1px var(--newtab-search-border-color);\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-15;\n    font-size: 15px;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    padding: 0;\n    padding-inline-end: $search-button-width;\n    padding-inline-start: $search-icon-width;\n    width: 100%;\n\n    &:dir(rtl) {\n      background-position-x: right $search-icon-padding;\n    }\n  }\n\n  &:hover input {\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-25;\n  }\n\n  .search-inner-wrapper:active input,\n  input:focus {\n    border: $input-border-active;\n    box-shadow: var(--newtab-textbox-focus-boxshadow);\n  }\n\n  .search-button {\n    background: $glyph-forward no-repeat center center;\n    background-size: 16px 16px;\n    border: 0;\n    border-radius: 0 $border-radius $border-radius 0;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    height: 100%;\n    inset-inline-end: 0;\n    position: absolute;\n    width: $search-button-width;\n\n    &:focus,\n    &:hover {\n      background-color: $grey-90-10;\n      cursor: pointer;\n    }\n\n    &:active {\n      background-color: $grey-90-20;\n    }\n\n    &:dir(rtl) {\n      transform: scaleX(-1);\n    }\n  }\n}\n\n@media (min-height: 701px) {\n  .fixed-search {\n    main {\n      padding-top: 146px;\n    }\n\n    .search-wrapper {\n      $search-header-bar-height: 95px;\n      $search-height: 35px;\n      $search-icon-size: 16px;\n      $search-icon-padding: 16px;\n\n      background-color: var(--newtab-search-header-background-color);\n      border-bottom: solid 1px var(--newtab-border-secondary-color);\n      height: $search-header-bar-height;\n      left: 0;\n      padding: 30px 0;\n      position: fixed;\n      top: 0;\n      width: 100%;\n      z-index: 9;\n\n      .search-inner-wrapper {\n        height: $search-height;\n      }\n\n      input {\n        background-position-x: $search-icon-padding;\n        background-size: $search-icon-size;\n\n        &:dir(rtl) {\n          background-position-x: right $search-icon-padding;\n        }\n      }\n    }\n  }\n}\n\n@at-root {\n  // Adjust the style of the contentSearchUI-generated table\n  .contentSearchSuggestionTable {\n    background-color: var(--newtab-search-dropdown-color);\n    border: 0;\n    box-shadow: $context-menu-shadow;\n    transform: translateY($textbox-shadow-size);\n\n    .contentSearchHeader {\n      background-color: var(--newtab-search-dropdown-header-color);\n      color: var(--newtab-text-secondary-color);\n    }\n\n    .contentSearchHeader,\n    .contentSearchSettingsButton {\n      border-color: var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSuggestionsList {\n      border: 0;\n    }\n\n    .contentSearchOneOffsTable {\n      background-color: var(--newtab-search-dropdown-header-color);\n      border-top: solid 1px var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSearchWithHeaderSearchText {\n      color: var(--newtab-text-primary-color);\n    }\n\n    .contentSearchSuggestionsContainer {\n      background-color: var(--newtab-search-dropdown-color);\n    }\n\n    .contentSearchSuggestionRow {\n      &.selected {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        .historyIcon {\n          fill: var(--newtab-icon-secondary-color);\n        }\n      }\n    }\n\n    .contentSearchOneOffsTable {\n      .contentSearchSuggestionsContainer {\n        background-color: var(--newtab-search-dropdown-header-color);\n      }\n    }\n\n    .contentSearchOneOffItem {\n      // Make the border slightly shorter by offsetting from the top and bottom\n      $border-offset: 18%;\n\n      background-image: none;\n      border-image: linear-gradient(transparent $border-offset, var(--newtab-border-secondary-color) $border-offset, var(--newtab-border-secondary-color) 100% - $border-offset, transparent 100% - $border-offset) 1;\n      border-inline-end: 1px solid;\n      position: relative;\n\n      &.selected {\n        background: var(--newtab-element-hover-color);\n      }\n\n      &:active {\n        background: var(--newtab-element-active-color);\n      }\n    }\n\n    .contentSearchSettingsButton {\n      &:hover {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n      }\n    }\n  }\n\n  .contentSearchHeaderRow > td > img,\n  .contentSearchSuggestionRow > td > .historyIcon {\n    margin-inline-start: 7px;\n    margin-inline-end: 15px;\n  }\n}\n",
 		".context-menu {\n  background: var(--newtab-contextmenu-background-color);\n  border-radius: $context-menu-border-radius;\n  box-shadow: $context-menu-shadow;\n  display: block;\n  font-size: $context-menu-font-size;\n  margin-inline-start: 5px;\n  inset-inline-start: 100%;\n  position: absolute;\n  top: ($context-menu-button-size / 4);\n  z-index: 8;\n\n  > ul {\n    list-style: none;\n    margin: 0;\n    padding: $context-menu-outer-padding 0;\n\n    > li {\n      margin: 0;\n      width: 100%;\n\n      &.separator {\n        border-bottom: $border-secondary;\n        margin: $context-menu-outer-padding 0;\n      }\n\n      > a {\n        align-items: center;\n        color: inherit;\n        cursor: pointer;\n        display: flex;\n        line-height: 16px;\n        outline: none;\n        padding: $context-menu-item-padding;\n        white-space: nowrap;\n\n        &:-moz-any(:focus, :hover) {\n          background: var(--newtab-element-hover-color);\n        }\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        &.disabled {\n          opacity: 0.4;\n          pointer-events: none;\n        }\n      }\n    }\n  }\n}\n",
 		".confirmation-dialog {\n  .modal {\n    box-shadow: 0 2px 2px 0 $black-10;\n    left: 50%;\n    margin-left: -200px;\n    position: fixed;\n    top: 20%;\n    width: 400px;\n  }\n\n  section {\n    margin: 0;\n  }\n\n  .modal-message {\n    display: flex;\n    padding: 16px;\n    padding-bottom: 0;\n\n    p {\n      margin: 0;\n      margin-bottom: 16px;\n    }\n  }\n\n  .actions {\n    border: 0;\n    display: flex;\n    flex-wrap: nowrap;\n    padding: 0 16px;\n\n    button {\n      margin-inline-end: 16px;\n      padding-inline-end: 18px;\n      padding-inline-start: 18px;\n      white-space: normal;\n      width: 50%;\n\n      &.done {\n        margin-inline-end: 0;\n        margin-inline-start: 0;\n      }\n    }\n  }\n\n  .icon {\n    margin-inline-end: 16px;\n  }\n}\n\n.modal-overlay {\n  background: var(--newtab-overlay-color);\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 11001;\n}\n\n.modal {\n  background: var(--newtab-modal-color);\n  border: $border-secondary;\n  border-radius: 5px;\n  font-size: 15px;\n  z-index: 11002;\n}\n",
 		".card-outer {\n  @include context-menu-button;\n  background: var(--newtab-card-background-color);\n  border-radius: $border-radius;\n  display: inline-block;\n  height: $card-height;\n  margin-inline-end: $base-gutter;\n  position: relative;\n  width: 100%;\n\n  &.placeholder {\n    background: transparent;\n\n    .card {\n      box-shadow: inset $inner-box-shadow;\n    }\n\n    .card-preview-image-outer,\n    .card-context {\n      display: none;\n    }\n  }\n\n  .card {\n    border-radius: $border-radius;\n    box-shadow: var(--newtab-card-shadow);\n    height: 100%;\n  }\n\n  > a {\n    color: inherit;\n    display: block;\n    height: 100%;\n    outline: none;\n    position: absolute;\n    width: 100%;\n\n    &:-moz-any(.active, :focus) {\n      .card {\n        @include fade-in-card;\n      }\n\n      .card-title {\n        color: var(--newtab-link-primary-color);\n      }\n    }\n  }\n\n  &:-moz-any(:hover, :focus, .active):not(.placeholder) {\n    @include fade-in-card;\n    @include context-menu-button-hover;\n    outline: none;\n\n    .card-title {\n      color: var(--newtab-link-primary-color);\n    }\n\n    .alternate ~ .card-host-name {\n      display: none;\n    }\n\n    .card-host-name.alternate {\n      display: block;\n    }\n  }\n\n  .card-preview-image-outer {\n    background-color: $grey-30;\n    border-radius: $border-radius $border-radius 0 0;\n    height: $card-preview-image-height;\n    overflow: hidden;\n    position: relative;\n\n    [lwt-newtab-brighttext] & {\n      background-color: $grey-60;\n    }\n\n    &::after {\n      border-bottom: 1px solid var(--newtab-card-hairline-color);\n      bottom: 0;\n      content: '';\n      position: absolute;\n      width: 100%;\n    }\n\n    .card-preview-image {\n      background-position: center;\n      background-repeat: no-repeat;\n      background-size: cover;\n      height: 100%;\n      opacity: 0;\n      transition: opacity 1s $photon-easing;\n      width: 100%;\n\n      &.loaded {\n        opacity: 1;\n      }\n    }\n  }\n\n  .card-details {\n    padding: 15px 16px 12px;\n  }\n\n  .card-text {\n    max-height: 4 * $card-text-line-height + $card-title-margin;\n    overflow: hidden;\n\n    &.no-host-name,\n    &.no-context {\n      max-height: 5 * $card-text-line-height + $card-title-margin;\n    }\n\n    &.no-host-name.no-context {\n      max-height: 6 * $card-text-line-height + $card-title-margin;\n    }\n\n    &:not(.no-description) .card-title {\n      max-height: 3 * $card-text-line-height;\n      overflow: hidden;\n    }\n  }\n\n  .card-host-name {\n    color: var(--newtab-text-secondary-color);\n    font-size: 10px;\n    overflow: hidden;\n    padding-bottom: 4px;\n    text-overflow: ellipsis;\n    text-transform: uppercase; // sass-lint:disable-line no-disallowed-properties\n    white-space: nowrap;\n  }\n\n  .card-host-name.alternate { display: none; }\n\n  .card-title {\n    font-size: 14px;\n    font-weight: 600;\n    line-height: $card-text-line-height;\n    margin: 0 0 $card-title-margin;\n    word-wrap: break-word;\n  }\n\n  .card-description {\n    font-size: 12px;\n    line-height: $card-text-line-height;\n    margin: 0;\n    overflow: hidden;\n    word-wrap: break-word;\n  }\n\n  .card-context {\n    bottom: 0;\n    color: var(--newtab-text-secondary-color);\n    display: flex;\n    font-size: 11px;\n    inset-inline-start: 0;\n    padding: 9px 16px 9px 14px;\n    position: absolute;\n  }\n\n  .card-context-icon {\n    fill: var(--newtab-text-secondary-color);\n    height: 22px;\n    margin-inline-end: 6px;\n  }\n\n  .card-context-label {\n    flex-grow: 1;\n    line-height: 22px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n.normal-cards {\n  .card-outer {\n    // Wide layout styles\n    @media (min-width: $break-point-widest) {\n      $line-height: 23px;\n      height: $card-height-large;\n\n      .card-preview-image-outer {\n        height: $card-preview-image-height-large;\n      }\n\n      .card-details {\n        padding: 13px 16px 12px;\n      }\n\n      .card-text {\n        max-height: 6 * $line-height + $card-title-margin;\n      }\n\n      .card-host-name {\n        font-size: 12px;\n        padding-bottom: 5px;\n      }\n\n      .card-title {\n        font-size: 17px;\n        line-height: $line-height;\n        margin-bottom: 0;\n      }\n\n      .card-text:not(.no-description) {\n        .card-title {\n          max-height: 3 * $line-height;\n        }\n      }\n\n      .card-description {\n        font-size: 15px;\n        line-height: $line-height;\n      }\n\n      .card-context {\n        bottom: 4px;\n        font-size: 14px;\n      }\n    }\n  }\n}\n\n.compact-cards {\n  $card-detail-vertical-spacing: 12px;\n  $card-title-font-size: 12px;\n\n  .card-outer {\n    height: $card-height-compact;\n\n    .card-preview-image-outer {\n      height: $card-preview-image-height-compact;\n    }\n\n    .card-details {\n      padding: $card-detail-vertical-spacing 16px;\n    }\n\n    .card-host-name {\n      line-height: 10px;\n    }\n\n    .card-text {\n      .card-title,\n      &:not(.no-description) .card-title {\n        font-size: $card-title-font-size;\n        line-height: $card-title-font-size + 1;\n        max-height: $card-title-font-size + 5;\n        overflow: hidden;\n        padding: 0 0 4px;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n    }\n\n    .card-description {\n      display: none;\n    }\n\n    .card-context {\n      $icon-size: 16px;\n      $container-size: 32px;\n      background-color: var(--newtab-card-background-color);\n      border-radius: $container-size / 2;\n      clip-path: inset(-1px -1px $container-size - ($card-height-compact - $card-preview-image-height-compact - 2 * $card-detail-vertical-spacing));\n      height: $container-size;\n      width: $container-size;\n      padding: ($container-size - $icon-size) / 2;\n      top: $card-preview-image-height-compact - $icon-size;\n      inset-inline-end: 12px;\n      inset-inline-start: auto;\n\n      &::after {\n        border: 1px solid var(--newtab-card-hairline-color);\n        border-bottom: 0;\n        border-radius: ($container-size / 2) + 1 ($container-size / 2) + 1 0 0;\n        content: '';\n        position: absolute;\n        height: ($container-size + 2) / 2;\n        width: $container-size + 2;\n        top: -1px;\n        left: -1px;\n      }\n\n      .card-context-icon {\n        margin-inline-end: 0;\n        height: $icon-size;\n        width: $icon-size;\n\n        &.icon-bookmark-added {\n          fill: $bookmark-icon-fill;\n        }\n\n        &.icon-download {\n          fill: $download-icon-fill;\n        }\n\n        &.icon-pocket {\n          fill: $pocket-icon-fill;\n        }\n      }\n\n      .card-context-label {\n        display: none;\n      }\n    }\n  }\n\n  @media not all and (min-width: $break-point-widest) {\n    .hide-for-narrow {\n      display: none;\n    }\n  }\n}\n",
 		".manual-migration-container {\n  color: var(--newtab-text-conditional-color);\n  font-size: 13px;\n  line-height: 15px;\n  margin-bottom: $section-spacing;\n  text-align: center;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    text-align: left;\n  }\n\n  p {\n    margin: 0;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: flex;\n      justify-content: space-between;\n    }\n  }\n\n  .icon {\n    display: none;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: block;\n      fill: var(--newtab-icon-secondary-color);\n      margin-inline-end: 6px;\n    }\n  }\n}\n\n.manual-migration-actions {\n  border: 0;\n  display: block;\n  flex-wrap: nowrap;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    padding: 0;\n  }\n\n  button {\n    align-self: center;\n    height: 26px;\n    margin: 0;\n    margin-inline-start: 20px;\n    padding: 0 12px;\n  }\n}\n",
 		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target-container {\n      vertical-align: top;\n\n      .click-target {\n        cursor: pointer;\n        white-space: nowrap;\n      }\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    min-height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .learn-more-link {\n    font-size: 11px;\n\n    a span {\n      color: var(--newtab-link-secondary-color);\n    }\n\n    &::before {\n      content: '•';\n      padding: 8px;\n      color: var(--newtab-section-navigation-text-color);\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
 		"\n.asrouter-admin {\n  $border-color: var(--newtab-border-secondary-color);\n  $monospace: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;\n  max-width: 996px;\n  margin: 0 auto;\n  font-size: 14px;\n  // Reset .outer-wrapper styles\n  display: inherit;\n  padding: 0 0 92px;\n\n  h1 {\n    font-weight: 200;\n    font-size: 32px;\n  }\n\n  table {\n    border-collapse: collapse;\n    width: 100%;\n  }\n\n  .message-item {\n    &:first-child td {\n      border-top: 1px solid $border-color;\n    }\n\n    td {\n      vertical-align: top;\n      border-bottom: 1px solid $border-color;\n      padding: 8px;\n\n      &:first-child {\n        border-left: 1px solid $border-color;\n      }\n\n      &:last-child {\n        border-right: 1px solid $border-color;\n      }\n    }\n\n    &.current {\n      .message-id span {\n        background: $yellow-50;\n        padding: 2px 5px;\n\n        [lwt-newtab-brighttext] & {\n          color: $black;\n        }\n      }\n    }\n\n    &.blocked {\n      .message-id,\n      .message-summary {\n        opacity: 0.5;\n      }\n\n      .message-id {\n        opacity: 0.5;\n      }\n    }\n\n    .message-id {\n      font-family: $monospace;\n      font-size: 12px;\n    }\n  }\n\n  pre {\n    background: var(--newtab-textbox-background-color);\n    margin: 0;\n    padding: 8px;\n    font-size: 12px;\n    max-width: 750px;\n    overflow: auto;\n    font-family: $monospace;\n  }\n}\n",
 		".pocket-logged-in-cta {\n  $max-button-width: 130px;\n  $min-button-height: 18px;\n  font-size: 13px;\n  margin-inline-end: 20px;\n  display: inline-block;\n\n  a {\n    background: $pocket-red;\n    letter-spacing: -0.34px;\n    color: $white;\n    border-radius: 4px;\n    cursor: pointer;\n    max-width: $max-button-width;\n    // The button height is 2px taller than the rest of the cta text.\n    // So I move it up by 1px to align with the rest of the cta text.\n    margin-top: -1px;\n    min-height: $min-button-height;\n    padding: 0 6px;\n    display: inline-flex;\n    justify-content: center;\n    align-items: center;\n    font-size: 11px;\n    margin-inline-end: 10px;\n  }\n\n  a,\n  .cta-text {\n    vertical-align: top;\n  }\n}\n",
 		".more-recommendations {\n  @media (min-width: $break-point-large) {\n    // This is floating to accomodate a very large number of topics and/or\n    // very long topic names due to l10n.\n    float: right;\n\n    &:dir(rtl) {\n      float: left;\n    }\n  }\n\n  &::after {\n    background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n    content: '';\n    -moz-context-properties: fill;\n    display: inline-block;\n    fill: var(--newtab-link-secondary-color);\n    height: 16px;\n    margin-inline-start: 5px;\n    vertical-align: top;\n    width: 12px;\n  }\n\n  &:dir(rtl)::after  {\n    transform: scaleX(-1);\n  }\n}\n",
 		".ASRouterButton {\n  white-space: nowrap;\n  border-radius: 4px;\n  border: 1px solid var(--newtab-border-secondary-color);\n  background-color: var(--newtab-button-secondary-color);\n  font-family: inherit;\n  padding: 8px 15px;\n  margin-inline-start: 12px;\n  color: inherit;\n\n  .tall & {\n    margin-inline-start: 20px;\n  }\n}\n",
-		".SnippetBaseContainer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: var(--newtab-snippets-background-color);\n  color: var(--newtab-text-primary-color);\n  font-size: 12px;\n  line-height: 16px;\n  border-top: 1px solid var(--newtab-snippets-hairline-color);\n  box-shadow: $shadow-secondary;\n  display: flex;\n  align-items: center;\n\n  .innerWrapper {\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    padding: 12px $section-horizontal-padding;\n\n    // This is to account for the block button on smaller screens\n    padding-inline-end: 36px;\n    @media (min-width: $break-point-large) {\n      padding-inline-end: $section-horizontal-padding;\n    }\n\n    max-width: $wrapper-max-width-large;\n    @media (min-width: $break-point-widest) {\n      max-width: $wrapper-max-width-widest;\n    }\n  }\n\n  .blockButton {\n    display: none;\n    background: none;\n    border: 0;\n    position: absolute;\n    top: 50%;\n    inset-inline-end: 12px;\n    height: 16px;\n    width: 16px;\n    background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n    -moz-context-properties: fill;\n    fill: var(--newtab-icon-primary-color);\n    opacity: 0.5;\n    margin-top: -8px;\n    padding: 0;\n    cursor: pointer;\n\n    @media (min-width: 766px) {\n      inset-inline-end: 24px;\n    }\n  }\n\n  &:hover .blockButton {\n    display: block;\n  }\n}\n",
+		".SnippetBaseContainer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: var(--newtab-snippets-background-color);\n  color: var(--newtab-text-primary-color);\n  font-size: 12px;\n  line-height: 16px;\n  border-top: 1px solid var(--newtab-snippets-hairline-color);\n  box-shadow: $shadow-secondary;\n  display: flex;\n  align-items: center;\n\n  .innerWrapper {\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    padding: 12px $section-horizontal-padding;\n\n    // This is to account for the block button on smaller screens\n    padding-inline-end: 36px;\n    @media (min-width: $break-point-large) {\n      padding-inline-end: $section-horizontal-padding;\n    }\n\n    max-width: $wrapper-max-width-large;\n    @media (min-width: $break-point-widest) {\n      max-width: $wrapper-max-width-widest;\n    }\n  }\n\n  .blockButton {\n    display: none;\n    background: none;\n    border: 0;\n    position: absolute;\n    top: 50%;\n    inset-inline-end: 12px;\n    height: 16px;\n    width: 16px;\n    background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n    -moz-context-properties: fill;\n    fill: var(--newtab-icon-primary-color);\n    opacity: 0.5;\n    margin-top: -8px;\n    padding: 0;\n    cursor: pointer;\n\n    @media (min-width: 766px) {\n      inset-inline-end: 24px;\n    }\n  }\n\n  &:hover .blockButton {\n    display: block;\n  }\n}\n\n.snippets-preview-banner {\n  font-size: 15px;\n  line-height: 42px;\n  color: $grey-60-70;\n  background: $grey-30-60;\n  text-align: center;\n  position: absolute;\n  top: 0;\n  width: 100%;\n\n  span {\n    vertical-align: middle;\n  }\n}\n",
 		".activity-stream {\n  &.modal-open {\n    overflow: hidden;\n  }\n}\n\n.modalOverlayOuter {\n  background: $white;\n  opacity: 0.93;\n  height: 100%;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  display: none;\n  z-index: 1100;\n\n  &.active {\n    display: block;\n  }\n}\n\n.modalOverlayInner {\n  width: 960px;\n  height: 510px;\n  position: fixed;\n  top: calc(50% - 255px); // halfway down minus half the height of the modal\n  left: calc(50% - 480px); // halfway across minus half the width of the modal\n  background: $white;\n  box-shadow: 0 1px 15px 0 $black-30;\n  border-radius: 4px;\n  display: none;\n  z-index: 1101;\n\n\n  // modal takes over entire screen\n  @media(max-width: 960px) {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    box-shadow: none;\n    border-radius: 0;\n  }\n\n  // if modal is short enough, add a vertical scroll bar\n  @media(max-width: 850px) and (max-height: 730px) {\n    overflow-y: scroll;\n  }\n\n  // if modal is narrow enough, add a vertical scroll bar\n  @media(max-width: 650px) and (max-height: 600px) {\n    overflow-y: scroll;\n  }\n\n  &.active {\n    display: block;\n  }\n\n  h2 {\n    color: $grey-60;\n    text-align: center;\n    font-weight: 200;\n    margin-top: 30px;\n    font-size: 28px;\n    line-height: 37px;\n    letter-spacing: -0.13px;\n\n    @media(max-width: 960px) {\n      margin-top: 100px;\n    }\n\n    @media(max-width: 850px) {\n      margin-top: 30px;\n    }\n  }\n\n  .footer {\n    border-top: 1px solid $grey-30;\n    height: 70px;\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n    text-align: center;\n    background-color: $white;\n\n    // if modal is short enough, footer becomes sticky\n    @media(max-width: 850px) and (max-height: 730px) {\n      position: sticky;\n    }\n\n    // if modal is narrow enough, footer becomes sticky\n    @media(max-width: 650px) and (max-height: 600px) {\n      position: sticky;\n    }\n\n    .modalButton {\n      margin-top: 20px;\n      width: 150px;\n      height: 30px;\n      padding: 4px 0 6px;\n      font-size: 15px;\n\n      &:focus,\n      &.active {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n    }\n  }\n}\n",
 		".SimpleSnippet {\n  &.tall {\n    padding: 27px 0;\n  }\n\n  .title {\n    display: inline;\n    font-size: inherit;\n    margin: 0;\n  }\n\n  .titleIcon {\n    background-repeat: no-repeat;\n    background-size: 14px;\n    height: 16px;\n    width: 16px;\n    margin-top: 2px;\n    margin-inline-end: 2px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  .body {\n    display: inline;\n    margin: 0;\n  }\n\n  .icon {\n    height: 42px;\n    width: 42px;\n    margin-inline-end: 12px;\n    flex-shrink: 0;\n  }\n\n  &.tall .icon {\n    margin-inline-end: 20px;\n  }\n\n  .ASRouterButton {\n    cursor: pointer;\n  }\n}\n",
 		".onboardingMessageContainer {\n  display: grid;\n  grid-column-gap: 21px;\n  grid-template-columns: auto auto auto;\n  padding-left: 30px;\n  padding-right: 30px;\n\n  // at 850px, the cards go from vertical layout to horizontal layout\n  @media(max-width: 850px) {\n    grid-template-columns: none;\n    grid-template-rows: auto auto auto;\n    padding-left: 110px;\n    padding-right: 110px;\n  }\n}\n\n.onboardingMessage {\n  height: 340px;\n  text-align: center;\n  padding: 13px;\n  font-weight: 200;\n\n  // at 850px, img floats left, content floats right next to it\n  @media(max-width: 850px) {\n    height: 170px;\n    text-align: left;\n    padding: 10px;\n    border-bottom: 1px solid $grey-30;\n    display: flex;\n    margin-bottom: 11px;\n\n    &:last-child {\n      border: 0;\n    }\n\n    .onboardingContent {\n      padding-left: 10px;\n      height: 100%;\n\n      > span > h3 {\n        margin-top: 0;\n        margin-bottom: 4px;\n        font-weight: 400;\n      }\n\n      > span > p {\n        margin-top: 0;\n        line-height: 22px;\n        font-size: 15px;\n      }\n    }\n  }\n\n  @media(max-width: 650px) {\n    height: 250px;\n  }\n\n  .onboardingMessageImage {\n    height: 100px;\n    width: 120px;\n    background-size: 120px;\n    background-position: center center;\n    background-repeat: no-repeat;\n    display: inline-block;\n    vertical-align: middle;\n\n\n    @media(max-width: 850px) {\n      height: 75px;\n      min-width: 80px;\n      background-size: 80px;\n    }\n\n    &.addons {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-addons@2x.png');\n    }\n\n    &.privatebrowsing {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-privatebrowsing@2x.png');\n    }\n\n    &.screenshots {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-screenshots@2x.png');\n    }\n\n    &.gift {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-gift@2x.png');\n    }\n  }\n\n  .onboardingContent {\n    height: 175px;\n\n    > span > h3 {\n      color: $grey-90;\n      margin-bottom: 8px;\n      font-weight: 400;\n    }\n\n    > span > p {\n      color: $grey-60;\n      margin-top: 0;\n      height: 130px;\n      margin-bottom: 12px;\n      font-size: 15px;\n      line-height: 22px;\n\n      @media(max-width: 650px) {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  .onboardingButton {\n    background-color: $grey-90-10;\n    border: 0;\n    width: 150px;\n    height: 30px;\n    margin-bottom: 23px;\n    padding: 4px 0 6px;\n    font-size: 15px;\n\n    // at 850px, the button shimmies down and to the right\n    @media(max-width: 850px) {\n      float: right;\n      margin-top: -60px;\n      margin-right: -10px;\n    }\n\n    @media(max-width: 650px) {\n      float: none;\n      margin-top: 30px;\n    }\n\n    &:focus,\n    &.active {\n      box-shadow: $shadow-primary;\n      transition: box-shadow 150ms;\n    }\n  }\n\n\n  &::before {\n    content: '';\n    height: 220px;\n    width: 1px;\n    position: absolute;\n    background-color: $grey-30;\n    margin-top: 40px;\n    margin-left: 215px;\n\n    // at 850px, the line goes from vertical to horizontal\n    @media(max-width: 850px) {\n      content: none;\n    }\n  }\n\n  &:last-child::before {\n    content: none;\n  }\n}\n"
 	],
 	"names": [],
-	"mappings": "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"
+	"mappings": ";AAAA,+BAA+B;AEA/B,AAAA,IAAI,CAAC;EACH,UAAU,EAAE,UAAU,GACvB;;AAED,AAAA,CAAC;AACD,AAAA,CAAC,AAAA,QAAQ;AACT,AAAA,CAAC,AAAA,OAAO,CAAC;EACP,UAAU,EAAE,OAAO,GACpB;;AAED,AAAA,CAAC,AAAA,kBAAkB,CAAC;EAClB,MAAM,EAAE,CAAC,GACV;;AAED,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,CAAC,GACV;;AAED,AAAA,MAAM;AACN,AAAA,KAAK,CAAC;EACJ,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,OAAO,GACnB;;CAED,AAAA,AAAA,MAAC,AAAA,EAAQ;EACP,OAAO,EAAE,eAAe,GACzB;;AEPD,AAAA,IAAI,CAAC;EAEH,yBAAyB,EDjBjB,OAAO;ECkBf,6BAA6B,EDfrB,OAAO;ECgBf,+BAA+B,EDjBvB,OAAO;ECkBf,6BAA6B,EDvBrB,OAAO;ECwBf,+BAA+B,EAAE,OAAO;EACxC,6BAA6B,EDpBrB,wBAAO;ECqBf,4BAA4B,EDtBpB,OAAO;ECuBf,2BAA2B,EDhBnB,qBAAO;ECiBf,6BAA6B,EDjBrB,qBAAO;ECkBf,4BAA4B,EDxBpB,OAAO;ECyBf,+BAA+B,EDQzB,kBAAI;ECPV,2BAA2B,ED/BnB,OAAO;ECgCf,6BAA6B,EDpBrB,OAAO;ECqBf,+BAA+B,EDzBvB,OAAO;EC0Bf,2BAA2B,EDvBnB,OAAO;ECwBf,6BAA6B,ED5BrB,OAAO;EC6Bf,iCAAiC,EDW3B,IAAI;ECVV,uBAAuB,ED1Bf,qBAAO;ECTf,4BAA4B,EDFpB,OAAO;ECGf,gCAAgC,EALxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CDET,OAAO,ECFW,CAAC,CAAC,CAAC,CAAC,CAAC,CDmIX,GAAG,CAjIf,qBAAO;ECyCf,qCAAqC,EDtC7B,OAAO;ECuCf,iCAAiC,EDK3B,IAAI;ECFV,oBAAoB,EDEd,IAAI;ECDV,sBAAsB,ED1Cd,wBAAO;EC6Cf,kCAAkC,ED1C1B,OAAO;EC2Cf,sCAAsC,ED3C9B,OAAO;EC4Cf,yCAAyC,EDxCjC,OAAO;EC2Cf,4BAA4B,EAAE,WAAW;EACzC,8BAA8B,EDRxB,IAAI;ECSV,qCAAqC,EDrD7B,OAAO;ECsDf,uCAAuC,EDtD/B,yBAAO;ECuDf,0BAA0B,ED/ClB,qBAAO;ECkDf,kCAAkC,EDd5B,IAAI;ECeV,6BAA6B,EAAE,KAAK,CArDnB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC;EAsD/D,6BAA6B,EAAE,OAAO;EAGtC,kCAAkC,ED7D1B,OAAO;EC8Df,8BAA8B,EDpBxB,IAAI;ECqBV,4BAA4B,ED9BtB,kBAAI;EC+BV,oBAAoB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CD1DzB,qBAAO;EC6Df,kCAAkC,EDzB5B,IAAI;EC0BV,gCAAgC,EAAE,WAAW,GA2D9C;EAlHD,AAyDE,IAzDE,CAyDF,AAAA,qBAAE,AAAA,EAAuB;IAEvB,yBAAyB,EDnEnB,OAAO;ICoEb,6BAA6B,ED3EvB,wBAAO;IC4Eb,+BAA+B,ED5EzB,wBAAO;IC6Eb,6BAA6B,EDhFvB,OAAO;ICiFb,+BAA+B,EDxEzB,OAAO;ICyEb,6BAA6B,ED/EvB,wBAAO;ICgFb,4BAA4B,EDhFtB,wBAAO;ICiFb,2BAA2B,EDjFrB,wBAAO;ICkFb,6BAA6B,EDlFvB,wBAAO;ICmFb,4BAA4B,EDnFtB,wBAAO;ICoFb,+BAA+B,EDpFzB,wBAAO;ICqFb,2BAA2B,ED1FrB,OAAO;IC2Fb,6BAA6B,EDxCnB,OAAO;ICyCjB,+BAA+B,EDvFzB,OAAO;ICwFb,2BAA2B,EDxFrB,OAAO;ICyFb,6BAA6B,EDzFvB,wBAAO;IC0Fb,iCAAiC,EDpF3B,OAAO;ICqFb,uBAAuB,ED3FjB,wBAAO;ICDf,4BAA4B,EDJpB,OAAO;ICKf,gCAAgC,EALxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CDAT,OAAO,ECAW,CAAC,CAAC,CAAC,CAAC,CAAC,CDmIX,GAAG,CAnIf,uBAAO;ICoGb,qCAAqC,ED1F/B,OAAO;IC2Fb,iCAAiC,EDzF3B,OAAO;IC4Fb,oBAAoB,ED5Fd,OAAO;IC6Fb,sBAAsB,ED5FhB,qBAAO;IC+Fb,kCAAkC,EDvG5B,wBAAO;ICwGb,sCAAsC,EDxGhC,wBAAO;ICyGb,yCAAyC,ED7DrC,IAAI;ICgER,4BAA4B,ED5GtB,wBAAO;IC6Gb,8BAA8B,EDvGxB,OAAO;ICwGb,qCAAqC,EDzG/B,OAAO;IC0Gb,uCAAuC,EDxGjC,sBAAO;ICyGb,0BAA0B,EDhHpB,wBAAO;ICmHb,kCAAkC,ED7G5B,OAAO;IC8Gb,6BAA6B,EAAE,IAAI;IACnC,6BAA6B,EDrHvB,wBAAO;ICwHb,kCAAkC,EDnH5B,OAAO;ICoHb,8BAA8B,EDnHxB,OAAO;ICoHb,4BAA4B,ED1HtB,wBAAO;IC2Hb,oBAAoB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDnH3B,qBAAO;ICsHb,kCAAkC,EDxH5B,OAAO;ICyHb,gCAAgC,EDnF5B,wBAAI,GCoFT;;ACtIH,AAAA,KAAK,CAAC;EACJ,mBAAmB,EAAE,aAAa;EAClC,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EF0EL,IAAI;EEzEd,uBAAuB,EAAE,IAAI;EAC7B,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,gCAAgC;EACtC,MAAM,EFsEI,IAAI;EErEd,cAAc,EAAE,MAAM;EACtB,KAAK,EFoEK,IAAI,GE0Gf;EAvLD,AAWE,KAXG,AAWH,YAAa,CAAC;IACZ,iBAAiB,EAAE,GAAG,GACvB;EAbH,AAeE,KAfG,AAeH,kBAAmB,CAAC;IAClB,iBAAiB,EAAE,GAAG,GACvB;EAjBH,AAmBE,KAnBG,AAmBH,oBAAqB,CAAC;IACpB,gBAAgB,EAAE,yCAAyC,GAC5D;EArBH,AAuBE,KAvBG,AAuBH,qBAAsB,CAAC;IACrB,gBAAgB,EAAE,gDAAgD,GACnE;EAzBH,AA2BE,KA3BG,AA2BH,iBAAkB,CAAC;IACjB,IAAI,EAAE,kCAAkC;IACxC,gBAAgB,EAAE,iDAAwC,GAC3D;EA9BH,AAgCE,KAhCG,AAgCH,YAAa,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EAlCH,AAoCE,KApCG,AAoCH,YAAa,CAAC;IACZ,gBAAgB,EAAE,6CAA6C,GAChE;EAtCH,AAwCE,KAxCG,AAwCH,kBAAmB,CAAC;IAClB,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,uDAA8C;IAChE,eAAe,EFoCA,IAAI;IEnCnB,MAAM,EFmCS,IAAI;IElCnB,KAAK,EFkCU,IAAI,GEjCpB;EA9CH,AAgDE,KAhDG,AAgDH,aAAc,CAAC;IACb,gBAAgB,EAAE,kDAAyC,GAC5D;EAlDH,AAoDE,KApDG,AAoDH,UAAW,CAAC;IACV,gBAAgB,EAAE,+CAAsC,GACzD;EAtDH,AAwDE,KAxDG,AAwDH,YAAa,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EA1DH,AA4DE,KA5DG,AA4DH,gBAAiB,CAAC;IAEhB,gBAAgB,EAAE,oDAA2C,GAC9D;IA/DH,AFuME,KEvMG,AA4DH,gBAAiB,AF2IpB,IAAS,CAAA,AAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EEzMH,AAiEE,KAjEG,AAiEH,wBAAyB,CAAC;IACxB,gBAAgB,EAAE,gDAAgD,GACnE;EAnEH,AAqEE,KArEG,AAqEH,cAAe,CAAC;IACd,gBAAgB,EAAE,yCAAyC,GAC5D;EAvEH,AAyEE,KAzEG,AAyEH,SAAU,CAAC;IAET,gBAAgB,EAAE,8CAAqC,GACxD;IA5EH,AFuME,KEvMG,AAyEH,SAAU,AF8Hb,IAAS,CAAA,AAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EEzMH,AA8EE,KA9EG,AA8EH,WAAY,CAAC;IAEX,gBAAgB,EAAE,gDAAuC,GAC1D;IAjFH,AFuME,KEvMG,AA8EH,WAAY,AFyHf,IAAS,CAAA,AAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EEzMH,AAmFE,KAnFG,AAmFH,UAAW,CAAC;IACV,gBAAgB,EAAE,+CAAsC,GACzD;EArFH,AAuFE,KAvFG,AAuFH,YAAa,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EAzFH,AA2FE,KA3FG,AA2FH,iBAAkB,CAAC;IACjB,gBAAgB,EAAE,sDAA6C,GAChE;EA7FH,AA+FE,KA/FG,AA+FH,kBAAmB,CAAC;IAClB,gBAAgB,EAAE,wCAAwC,GAC3D;EAjGH,AAmGE,KAnGG,AAmGH,cAAe,CAAC;IACd,gBAAgB,EAAE,mDAA0C;IAC5D,SAAS,EAAE,eAAe,GAC3B;EAtGH,AAwGE,KAxGG,AAwGH,SAAU,CAAC;IACT,gBAAgB,EAAE,wCAAwC,GAC3D;EA1GH,AA4GE,KA5GG,AA4GH,cAAe,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;EA9GH,AAgHE,KAhHG,AAgHH,eAAgB,CAAC;IAEf,gBAAgB,EAAE,8CAAqC;IACvD,eAAe,EFrCC,IAAI;IEsCpB,MAAM,EFtCU,IAAI;IEuCpB,KAAK,EFvCW,IAAI,GEwCrB;IAtHH,AFuME,KEvMG,AAgHH,eAAgB,AFuFnB,IAAS,CAAA,AAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EEzMH,AAwHE,KAxHG,AAwHH,WAAY,CAAC;IACX,gBAAgB,EAAE,sCAAsC,GACzD;EA1HH,AA4HE,KA5HG,AA4HH,cAAe,CAAC;IACd,gBAAgB,EAAE,wEAAwE,GAC3F;EA9HH,AAgIE,KAhIG,AAgIH,UAAW,CAAC;IACV,gBAAgB,EAAE,0CAA0C,GAC7D;EAlIH,AAoIE,KApIG,AAoIH,eAAgB,CAAC;IACf,gBAAgB,EAAE,oDAA2C,GAC9D;EAtIH,AAwIE,KAxIG,AAwIH,kBAAmB,CAAC;IAClB,gBAAgB,EAAE,uDAA8C,GACjE;EA1IH,AA4IE,KA5IG,AA4IH,gBAAiB,CAAC;IAChB,gBAAgB,EAAE,qDAA4C,GAC/D;EA9IH,AAgJE,KAhJG,AAgJH,oBAAqB,CAAC;IACpB,gBAAgB,EAAE,yDAAgD,GACnE;EAlJH,AAoJE,KApJG,AAoJH,0BAA2B,CAAC;IAC1B,gBAAgB,EAAE,yDAAgD;IAClE,eAAe,EFxEC,IAAI;IEyEpB,MAAM,EFzEU,IAAI;IE0EpB,KAAK,EF1EW,IAAI,GE2ErB;EAzJH,AA2JE,KA3JG,AA2JH,6BAA8B,CAAC;IAC7B,gBAAgB,EAAE,yDAAgD;IAClE,eAAe,EF/EC,IAAI;IEgFpB,MAAM,EFhFU,IAAI;IEiFpB,SAAS,EAAE,cAAc;IACzB,KAAK,EFlFW,IAAI,GEuFrB;IArKH,AAkKI,KAlKC,AA2JH,6BAA8B,AAO5B,IAAM,CAAA,AAAA,GAAG,EAAE;MACT,SAAS,EAAE,aAAa,GACzB;EApKL,AAuKE,KAvKG,AAuKH,kBAAmB,CAAC;IAClB,gBAAgB,EAAE,yDAAgD;IAClE,SAAS,EAAE,cAAc,GAC1B;EA1KH,AA4KE,KA5KG,AA4KH,SAAU,CAAC;IACT,gBAAgB,EAAE,8CAAqC,GACxD;EA9KH,AAgLE,KAhLG,AAgLH,cAAe,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;EAlLH,AAoLE,KApLG,AAoLH,cAAe,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;;AJjLH,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,IAAI,GACb;;AAED,AAAA,IAAI;AACJ,AAAA,KAAK,CAAC;EACJ,UAAU,EAAE,KAAK,GAClB;;AAED,AAAA,IAAI,CAAC;EACH,gBAAgB,EAAE,8BAA8B;EAChD,WAAW,EAAE,qFAAqF;EAClG,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,MAAM,GAUnB;EAdD,AAMsB,IANlB,AAMF,gBAAiB,GAAG,0BAA0B;EANhD,AAOgB,IAPZ,AAOF,UAAW,GAAG,0BAA0B,CAAC;IACvC,OAAO,EAAE,eAAe,GACzB;EATH,AAWgB,IAXZ,AAWF,UAAW,GAAG,4BAA4B,CAAC;IACzC,OAAO,EAAE,IAAI,GACd;;AAGH,AAAA,EAAE;AACF,AAAA,EAAE,CAAC;EACD,WAAW,EAAE,MAAM,GACpB;;AAED,AAAA,CAAC,CAAC;EACA,eAAe,EAAE,IAAI,GACtB;;AAGD,AAAA,QAAQ,CAAC;EACP,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,gBAAgB;EACtB,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,GAAG,GACX;;AAED,AAAA,aAAa,CAAC;EACZ,MAAM,EGzCW,GAAG,CAAC,KAAK,CAAC,oCAAoC;EH0C/D,aAAa,EEeC,GAAG;EFdjB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,CAAC;EACP,cAAc,EAAE,IAAI;EACpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG,GACb;;AAED,UAAU,CAAV,MAAU;EACR,AAAA,IAAI;IACF,OAAO,EAAE,CAAC;EAGZ,AAAA,EAAE;IACA,OAAO,EAAE,CAAC;;AAId,AAAA,aAAa,CAAC;EACZ,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,oBAAoB,GAMjC;EARD,AAIE,aAJW,AAIX,GAAI,CAAC;IACH,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,CAAC,GACX;;AAGH,AAAA,QAAQ,CAAC;EACP,UAAU,EGzEO,GAAG,CAAC,KAAK,CAAC,oCAAoC;EH0E/D,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,GAAG;EACnB,SAAS,EAAE,IAAI;EACf,eAAe,EAAE,UAAU;EAC3B,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,WAAW,GACrB;;AAGD,AAAA,OAAO;AACP,AAAS,QAAD,CAAC,MAAM,CAAC;EACd,gBAAgB,EAAE,oCAAoC;EACtD,MAAM,EGvFS,GAAG,CAAC,KAAK,CAAC,kCAAkC;EHwF3D,aAAa,EAAE,GAAG;EAClB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO;EACf,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,SAAS;EAClB,WAAW,EAAE,MAAM,GAsBpB;EA/BD,AAWE,OAXK,AAWN,MAAQ,AAAA,IAAK,CAAA,AAAA,QAAQ;EAVtB,AAAS,QAAD,CAAC,MAAM,AAUd,MAAQ,AAAA,IAAK,CAAA,AAAA,QAAQ,EAAE;IACpB,UAAU,EGzFG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;IH0F9D,UAAU,EAAE,gBAAgB,GAC7B;EAdH,AAgBE,OAhBK,AAgBN,QAAU;EAfX,AAAS,QAAD,CAAC,MAAM,AAed,QAAU,CAAC;IACR,gBAAgB,EAAE,WAAW;IAC7B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,SAAS,GAC3B;EArBH,AAwBE,OAxBK,AAwBN,QAAU,EAxBX,AAyBE,OAzBK,AAyBN,KAAO;EAxBR,AAAS,QAAD,CAAC,MAAM,AAuBd,QAAU;EAvBX,AAAS,QAAD,CAAC,MAAM,AAwBd,KAAO,CAAC;IACL,gBAAgB,EAAE,kCAAkC;IACpD,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,kCAAkC;IACpD,KAAK,EExED,IAAI;IFyER,mBAAmB,EAAE,IAAI,GAC1B;;AAGH,AACE,KADG,CACH,AAAA,IAAE,CAAK,MAAM,AAAX,GADJ,AAEE,KAFG,CAEH,AAAA,IAAE,CAAK,QAAQ,AAAb,EAAe;EACf,aAAa,EE9DD,GAAG,GF+DhB;;AAIH,AAAA,mBAAmB,CAAC;EAClB,OAAO,EAAE,CAAC,GACX;;AKzID,AAAA,cAAc,CAAC;EACb,KAAK,EAAE,gCAAgC;EACvC,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,CAAC;EACZ,UAAU,EAAE,KAAK;EACjB,OAAO,EAAE,IAA8C,CHkE3C,IAAI,CAAJ,IAAI,GGzDjB;EAdD,AAOE,cAPY,AAOZ,aAAc,CAAC;IACb,OAAO,EAAE,KAAK,GACf;EATH,AAWE,cAXY,CAWZ,CAAC,CAAC;IACA,KAAK,EAAE,gCAAgC,GACxC;;AAGH,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,IAAI;EAGZ,cAAc,EAAE,IAA4D;EAC5E,KAAK,EHiEiB,KAAmE,GGtC1F;EAzBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAP1B,AAAA,IAAI,CAAC;MAQD,KAAK,EH+DiB,KAAmE,GGvC5F;EArBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAX1B,AAAA,IAAI,CAAC;MAYD,KAAK,EH4DkB,KAAmE,GGxC7F;EAjBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAf1B,AAAA,IAAI,CAAC;MAgBD,KAAK,EHyDiB,KAAmE,GGzC5F;EAbC,MAAM,EAAE,SAAS,EAAE,MAAM;IAnB3B,AAAA,IAAI,CAAC;MAoBD,KAAK,EHsDkB,MAAmE,GG1C7F;EAhCD,AAuBE,IAvBE,CAuBF,OAAO,CAAC;IACN,aAAa,EHkCC,IAAoC;IGjClD,QAAQ,EAAE,QAAQ,GACnB;EAED,AAAW,UAAD,CA5BZ,IAAI,CA4BW;IACX,UAAU,EAAE,MAAM,GACnB;;AAIH,AAAA,sBAAsB,CAAC;EAErB,MAAM,EAAE,KAAK,GACd;;;AAED,AAUI,aAVS,CAUT,cAAc;AAVlB,AAWmB,aAXN,CAWT,cAAc,CAAC,QAAQ,AAAA,aAAa;AAXxC,AAYI,aAZS,CAYT,OAAO,CAHa;EACpB,OAAO,EAAE,CAAC,GACX;;;AAXH,AAeI,aAfS,AAaX,GAAI,CAEF,cAAc;AAflB,AAgBmB,aAhBN,AAaX,GAAI,CAGF,cAAc,CAAC,QAAQ,AAAA,aAAa;AAhBxC,AAiBI,aAjBS,AAaX,GAAI,CAIF,OAAO,CAHe;EACpB,OAAO,EAAE,CAAC,GACX;;AAIL,AAAA,wBAAwB,CAAC;EACvB,OAAO,EAAE,CAAC,CHJiB,IAAI,GGKhC;;AAED,AACE,aADW,CACX,MAAM,CAAC;EACL,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,OAAO;EACf,IAAI,EAAE,gCAAgC;EACtC,gBAAgB,EAAE,IAAI;EACtB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,IAAI;EACT,OAAO,EAAE,IAAI,GAUd;EApBH,AACE,aADW,CACX,MAAM,AAWJ,MAAO,EAZX,AACE,aADW,CACX,MAAM,AAYJ,MAAO,CAAC;IACN,gBAAgB,EAAE,iCAAiC,GACpD;EAfL,AACE,aADW,CACX,MAAM,AAgBJ,OAAQ,CAAC;IACP,gBAAgB,EAAE,kCAAkC,GACrD;;AClGL,AAAA,kBAAkB,CAAC;EACjB,WAAW,EAAE,MAAM;EACnB,aAAa,EJkEC,GAAG;EIjEjB,UAAU,EAAE,KAAK,CHSA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC;EGR/D,KAAK,EAAE,oCAAoC;EAC3C,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,SAAS,EJsHgB,IAAI;EIrH7B,eAAe,EAAE,MAAM;EACvB,aAAa,EAAE,MAAM;EACrB,WAAW,EJoHgB,GAAG,GI9G/B;EAhBD,AAYE,kBAZgB,CAYhB,CAAC,CAAC;IACA,KAAK,EAAE,oCAAoC;IAC3C,eAAe,EAAE,SAAS,GAC3B;;ACHH,AAAA,UAAU,CAAC;EAGT,aAAa,EAAE,GAA4E,GAC5F;;AAED,AAAA,eAAe,CAAC;EACd,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC,CAXQ,KAAgB;EAYjC,OAAO,EAAE,CAAC,GA4EX;EAzEC,MAAM,EAAE,SAAS,EAAE,KAAK;IAN1B,ALmKE,eKnKa,CAOX,UAAW,CAAA,IAAI,EL4JjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,IAAI;MACvB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,IAAI;MACtB,kBAAkB,EAlHR,KAAI,GAmHf;IKxKH,AL4KE,eK5Ka,CAWX,UAAW,CAAA,EAAE,ELiKf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKhKD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAjBjD,AL4KE,eK5Ka,CAkBX,UAAW,CAAA,IAAI,EL0JjB,aAAa;IK5Kf,AL4KE,eK5Ka,CAmBX,UAAW,CAAA,EAAE,ELyJf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKxJD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAzBjD,AL4KE,eK5Ka,CA0BX,UAAW,CAAA,EAAE,ELkJf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKnJD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IA9BjD,AL4KE,eK5Ka,CA+BX,UAAW,CAAA,IAAI,EL6IjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EK5ID,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IArClD,AL4KE,eK5Ka,CAsCX,UAAW,CAAA,EAAE,ELsIf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKvID,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IA1ClD,AL4KE,eK5Ka,CA2CX,UAAW,CAAA,IAAI,ELiIjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKhID,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IAjDnD,AL4KE,eK5Ka,CAkDX,UAAW,CAAA,EAAE,EL0Hf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EK3HD,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IAtDnD,AL4KE,eK5Ka,CAuDX,UAAW,CAAA,IAAI,ELqHjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EKrHD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,MAAM;IA5DvC,AA6DI,eA7DW,CA6DX,gBAAgB,CAAC;MACf,OAAO,EAAE,IAAI,GACd;EA/DL,AAkEE,eAlEa,CAkEb,EAAE,CAAC;IACD,MAAM,EAAE,CAAC,CAAC,CAAC,CAlFY,GAAG,GAmF3B;EApEH,AAwEM,eAxES,AAsEb,IAAM,CAAA,AAAA,WAAW,EACf,eAAe,AAAA,SAAU,CAAA,AAAA,OAAO,EAAE,AAAA,MAAM,EAAE,AAAA,MAAM,EAC9C,KAAK,CAAC;IL6CV,UAAU,EAAE,KAAK,CC3HA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EAKhD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;IDuHhE,UAAU,EAAE,gBAAgB,GK5CvB;EA1EP,AL2JE,eK3Ja,AAsEb,IAAM,CAAA,AAAA,WAAW,EACf,eAAe,AAAA,SAAU,CAAA,AAAA,OAAO,EAAE,AAAA,MAAM,EAAE,AAAA,MAAM,ELoFlD,oBAAoB,CAAC;IACnB,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,QAAQ;IACnB,gBAAgB,EAAE,KAAK,GACxB;;AK7EH,AAAA,eAAe,CAAC;EACd,OAAO,EAAE,CAAC,CA5FO,IAAgB;EA6FjC,OAAO,EAAE,YAAY,GA+LtB;EAjMD,AAKE,eALa,CAKb,eAAe,CAAC;IACd,QAAQ,EAAE,QAAQ,GAanB;IAnBH,AAQM,eARS,CAKb,eAAe,GAGX,CAAC,CAAC;MACF,KAAK,EAAE,OAAO;MACd,OAAO,EAAE,KAAK;MACd,OAAO,EAAE,IAAI,GAOd;MAlBL,AAcQ,eAdO,CAKb,eAAe,GAGX,CAAC,AAKD,SAAW,CAAA,AAAA,OAAO,EAAE,AAAA,MAAM,EACxB,KAAK,CAAC;QLqBZ,UAAU,EAAE,KAAK,CC3HA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EAKhD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;QDuHhE,UAAU,EAAE,gBAAgB,GKpBrB;EAhBT,AL6CE,eK7Ca,CL6Cb,oBAAoB,CAAC;IACnB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,sCAAsC;IACxD,gBAAgB,EAAE,4CAA4C;IAC9D,mBAAmB,EAAE,GAAG;IACxB,MAAM,EC5IO,GAAG,CAAC,KAAK,CAAC,kCAAkC;ID6IzD,aAAa,EAAE,IAAI;IACnB,UAAU,EAlCkB,CAAC,CAAC,GAAG,CAxG3B,qBAAO;IA2Ib,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,gCAAgC;IACtC,MAAM,EAtCiB,IAAI;IAuC3B,gBAAgB,EAAI,OAA6B;IACjD,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAI,OAA6B;IACpC,SAAS,EAAE,WAAW;IACtB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,kBAAkB;IACvC,KAAK,EA9CkB,IAAI,GAoD5B;IKrEH,AL6CE,eK7Ca,CL6Cb,oBAAoB,AAoBnB,SAAY,CAAA,AAAA,OAAO,EAAE,AAAA,MAAM,EAAE;MAC1B,OAAO,EAAE,CAAC;MACV,SAAS,EAAE,QAAQ,GACpB;EKpEL,AAuBE,eAvBa,CAuBb,KAAK,CAAC;IACJ,aAAa,EA3HS,GAAG;IA4HzB,UAAU,EAAE,KAAK,CJjHF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EIiHxB,yBAAyB;IAC9D,MAAM,EAAE,OAAO;IACf,MAAM,ELpDE,IAAI;IKqDZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,ELtDG,IAAI;IKyDZ,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,kCAAkC;IACzC,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,SAAS;IACzB,UAAU,EAAE,UAAU,CAjIE,KAAK,GAsI9B;IA5CH,AAuBE,eAvBa,CAuBb,KAAK,AAkBH,QAAS,CAAC;MACR,OAAO,EAAE,mBAAmB,GAC7B;EA3CL,AA8CE,eA9Ca,CA8Cb,WAAW,CAAC;IACV,gBAAgB,ELjGZ,IAAI;IKkGR,mBAAmB,EAAE,QAAQ;IAC7B,eAAe,EAjJD,KAAK;IAkJnB,aAAa,EArJS,GAAG;IAsJzB,UAAU,EAAE,KAAK,CJ3IF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC;II4I7D,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,IAAI,GAKZ;IA/DH,AA8CE,eA9Ca,CA8Cb,WAAW,AAcT,OAAQ,CAAC;MACP,OAAO,EAAE,CAAC,GACX;EA9DL,AAkEE,eAlEa,CAkEb,cAAc,CAAC;IACb,gBAAgB,EAAE,uCAAuC;IACzD,mBAAmB,EAAE,aAAa;IAClC,iBAAiB,EAAE,SAAS;IAC5B,aAAa,EAzKS,GAAG;IA0KzB,UAAU,EAAE,kCAAkC;IAC9C,QAAQ,EAAE,QAAQ,GACnB;EAzEH,AA2EE,eA3Ea,CA2Eb,UAAU,CAAC;IACT,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,CAAC;IACrB,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,IAAI,GACZ;EAjFH,AAmFE,eAnFa,CAmFb,aAAa;EAnFf,AAoFE,eApFa,CAoFb,eAAe,CAAC;IACd,eAAe,EAlLC,IAAI;IAmLpB,MAAM,EAlLY,IAAG;IAmLrB,MAAM,EArLkB,IAAI;IAsL5B,gBAAgB,EApLE,IAAG;IAqLrB,KAAK,EAvLmB,IAAI;IA0L5B,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,MAAM,GAKxB;IApGH,AAmFE,eAnFa,CAmFb,aAAa,CAcZ,AAAA,aAAG,AAAA,CAAc,QAAQ;IAjG5B,AAoFE,eApFa,CAoFb,eAAe,CAad,AAAA,aAAG,AAAA,CAAc,QAAQ,CAAC;MACvB,OAAO,EAAE,mBAAmB,GAC7B;EAnGL,AAsGE,eAtGa,CAsGb,eAAe,CAAC;IACd,gBAAgB,EAAE,iDAAwC;IAC1D,eAAe,EAAE,IAAI;IACrB,gBAAgB,EL1MV,OAAO;IK2Mb,aAAa,EAxMW,IAAI;IAyM5B,uBAAuB,EAAE,IAAI;IAC7B,IAAI,EL9JA,IAAI;IK+JR,UAAU,EAAE,yBAAyB;IACrC,mBAAmB,EAxMK,KAAK;IAyM7B,mBAAmB,EAAE,wDAAwD,GAC9E;EAhHH,AAkHU,eAlHK,AAkHb,MAAO,CAAC,eAAe,CAAC;IAItB,eAAe,EAAE,IAAI;IACrB,aAAa,EAJa,IAA8B;IAKxD,MAAM,EAJc,IAAyB;IAK7C,MAAM,EANoB,IAA8B;IAOxD,gBAAgB,EANI,IAAyB;IAO7C,KAAK,EARqB,IAA8B,GASzD;EA5HH,AAgII,eAhIW,AA+Hb,gBAAiB,CACf,UAAU,CAAC;IACT,gBAAgB,ELnLd,IAAI,GKoLP;EAlIL,AAqIE,eArIa,CAqIb,MAAM,CAAC;IACL,KAAK,EAAE,kCAAkC;IACzC,IAAI,EAAE,WAAW;IACjB,MAAM,EA1Oe,IAAI;IA2OzB,WAAW,EA3OU,IAAI;IA4OzB,UAAU,EAAE,MAAM;IAClB,KAAK,ELpKG,IAAI;IKqKZ,QAAQ,EAAE,QAAQ,GAsBnB;IAlKH,AA8II,eA9IW,CAqIb,MAAM,CASJ,KAAK,CAAC;MACJ,IAAI,EAAE,iCAAiC;MACvC,kBAAkB,EAAE,CAAC;MACrB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,IAAI,GACV;IAnJL,AAqJI,eArJW,CAqIb,MAAM,CAgBJ,IAAI,CAAC;MACH,MAAM,EAxPa,IAAI;MAyPvB,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,MAAM;MAChB,aAAa,EAAE,QAAQ;MACvB,WAAW,EAAE,MAAM,GACpB;IA3JL,AA8JM,eA9JS,CAqIb,MAAM,AAwBJ,OAAQ,CACN,IAAI,CAAC;MACH,OAAO,EAAE,MAAM,GAChB;EAhKP,AAoKE,eApKa,CAoKb,YAAY,CAAC;IACX,gBAAgB,EAAE,+CAAsC,GACzD;EAtKH,AAyKI,eAzKW,AAwKb,YAAa,CACX,KAAK,CAAC;IACJ,UAAU,EAAE,KAAK,CJlQJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,GImQ5D;EA3KL,AA6KI,eA7KW,AAwKb,YAAa,CAKX,WAAW,CAAC;IACV,OAAO,EAAE,IAAI,GACd;EA/KL,AAmLI,eAnLW,AAkLb,QAAS,CACP,KAAK,CAAC;IACJ,UAAU,ELjRN,OAAO;IKkRX,UAAU,EAAE,IAAI,GAMjB;IA3LL,AAuLM,eAvLS,AAkLb,QAAS,CACP,KAAK,CAIH,CAAC,EAvLP,AAmLI,eAnLW,AAkLb,QAAS,CACP,KAAK,AAKH,QAAS,CAAC;MACR,OAAO,EAAE,IAAI,GACd;EA1LP,AA6LI,eA7LW,AAkLb,QAAS,CAWP,MAAM,CAAC;IACL,UAAU,EAAE,MAAM,GACnB;;AAIL,AACE,sBADoB,CACpB,MAAM,CAAC;EACL,UAAU,EJvRK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO;EK4Rb,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,MAAM;EACd,UAAU,EAAE,iBAAiB;EAC7B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,IAAI;EACT,KAAK,EL3Ne,KAAmE,GKwOxF;EAXC,MAAM,EAAE,SAAS,EAAE,KAAK;IAZ5B,AACE,sBADoB,CACpB,MAAM,CAAC;MAYH,KAAK,EL7Ne,KAAmE,GKuO1F;EAPC,MAAM,EAAE,SAAS,EAAE,KAAK;IAhB5B,AACE,sBADoB,CACpB,MAAM,CAAC;MAgBH,KAAK,ELhOgB,KAAmE,GKsO3F;EAHC,MAAM,EAAE,SAAS,EAAE,KAAK;IApB5B,AACE,sBADoB,CACpB,MAAM,CAAC;MAoBH,KAAK,ELnOe,KAAmE,GKqO1F;;AAGH,AAIE,aAJW,CAIX,cAAc,CAAC;EACb,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,QAAQ,GACjB;;AAPH,AASE,aATW,CASX,qBAAqB,CAAC;EACpB,SAAS,EAAE,KAAiD;EAC5D,MAAM,EAAE,MAAM;EACd,OAAO,EAVM,IAAI,GAelB;EAjBH,AAcI,aAdS,CASX,qBAAqB,CAKnB,eAAe,CAAC;IACd,cAAc,EAAE,IAAI,GACrB;;AAhBL,AAmBE,aAnBW,CAmBX,2BAA2B,CAAC;EAC1B,SAAS,EAAE,KAAK;EAChB,MAAM,EAAE,MAAM;EACd,OAAO,EApBM,IAAI,GA8BlB;EAhCH,AAwBM,aAxBO,CAmBX,2BAA2B,GAKvB,GAAG,CAAC;IACJ,iBAAiB,EAAE,KAAK,GACzB;EA1BL,AA4BI,aA5BS,CAmBX,2BAA2B,CASzB,eAAe,CAAC;IACd,mBAAmB,EAAE,CAAC;IACtB,iBAAiB,EAAE,IAAI,GACxB;;AA/BL,AAkCE,aAlCW,CAkCX,eAAe,CAAC;EACd,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,QAAQ;EAChB,mBAAmB,EAnCN,IAAI,GAoClB;;AAtCH,AAwCE,aAxCW,CAwCX,mBAAmB,CAAC;EAClB,OAAO,EAAE,IAAI,GACd;;AA1CH,AA4CE,aA5CW,CA4CX,KAAK,CAAC;EACJ,SAAS,EL1Qa,IAAI,GK2Q3B;;AA9CH,AAgDE,aAhDW,CAgDX,aAAa,CAAC;EACZ,KAAK,EAAE,IAAI,GAuIZ;EAxLH,AAmDI,aAnDS,CAgDX,aAAa,CAGX,MAAM,CAAC;IACL,QAAQ,EAAE,QAAQ,GAQnB;IA5DL,AAsDM,aAtDO,CAgDX,aAAa,CAGX,MAAM,CAGJ,iBAAiB,CAAC;MAChB,QAAQ,EAAE,QAAQ;MAClB,SAAS,EAAE,gBAAgB;MAC3B,GAAG,EAAE,GAAG;MACR,gBAAgB,EAAE,GAAG,GACtB;EA3DP,AA+DM,aA/DO,CAgDX,aAAa,CAcX,IAAI,CACF,KAAK,AAAA,IAAK,CAAA,AAAA,GAAG,EAAE;IACb,aAAa,EAAE,IAAI,GACpB;EAjEP,AAmEM,aAnEO,CAgDX,aAAa,CAcX,IAAI,CAKF,KAAK,AAAA,IAAK,CAAA,AAAA,GAAG,EAAE;IACb,YAAY,EAAE,IAAI,GAMnB;IA1EP,AAmEM,aAnEO,CAgDX,aAAa,CAcX,IAAI,CAKF,KAAK,AAAA,IAAK,CAAA,AAAA,GAAG,CAGX,IAAM,CAAA,AAAA,kBAAkB,EAAE;MACxB,SAAS,EAAE,GAAG;MACd,UAAU,EAAE,KAAK,GAClB;EAzET,AA6EI,aA7ES,CAgDX,aAAa,CA6BX,0BAA0B,CAAC;IACzB,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,OAAO,GAKhB;IAtFL,AA6EI,aA7ES,CAgDX,aAAa,CA6BX,0BAA0B,AAMxB,MAAO,CAAC;MACN,eAAe,EAAE,SAAS,GAC3B;EArFP,AAwFI,aAxFS,CAgDX,aAAa,CAwCX,6BAA6B,CAAC;IAC5B,UAAU,EAAE,GAAG,GAkChB;IA3HL,AA2FM,aA3FO,CAgDX,aAAa,CAwCX,6BAA6B,CAG3B,kBAAkB,CAAC;MACjB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,MAAM;MAChB,QAAQ,EAAE,QAAQ;MAClB,SAAS,EAAE,gBAAgB;MAC3B,GAAG,EAAE,GAAG;MACR,gBAAgB,EAAE,GAAG,GACtB;IAnGP,AAuGM,aAvGO,CAgDX,aAAa,CAwCX,6BAA6B,CAe3B,kBAAkB,CAAC;MASjB,KAAK,EAAE,KAAK;MACZ,MAAM,EAAE,IAAI;MACZ,uBAAuB,EAAE,IAAI;MAC7B,IAAI,ELlbF,OAAO;MKmbT,gBAAgB,EAAE,mDAAmD;MACrE,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,GAK3D;;AAlBC,UAAU,CAAV,sBAAU;EACR,AAAA,IAAI;IAAG,SAAS,EAAE,kBAAkB;;AAGtC,UAAU,CAAV,0BAAU;EACR,AAAA,IAAI;IAAG,SAAS,EAAE,iBAAiB;MA7G7C,AAuGM,aAvGO,CAgDX,aAAa,CAwCX,6BAA6B,CAe3B,kBAAkB,AAgBhB,IAAM,CAAA,AAAA,GAAG,EAAE;QACT,cAAc,EAAE,0BAA0B,GAC3C;EAzHT,AA6HI,aA7HS,CAgDX,aAAa,CA6EX,KAAK,CACH,AAAA,IAAE,CAAK,MAAM,AAAX,EAAa;IACb,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EJpbC,GAAG,CAAC,KAAK,CAAC,4BAA4B;IIqb7C,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI,GAYhB;IAjJP,AA6HI,aA7HS,CAgDX,aAAa,CA6EX,KAAK,CACH,AAAA,IAAE,CAAK,MAAM,AAAX,CASA,MAAO,CAAC;MACN,MAAM,EJ3bM,GAAG,CAAC,KAAK,CAAC,iCAAiC;MI4bvD,UAAU,EAAE,qCAAqC,GAClD;IA1IT,AA6HI,aA7HS,CAgDX,aAAa,CA6EX,KAAK,CACH,AAAA,IAAE,CAAK,MAAM,AAAX,EAcA,AAAA,QAAE,AAAA,EAAU;MACV,MAAM,EJjcD,GAAG,CAAC,KAAK,CAAC,4BAA4B;MIkc3C,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,GAAG,GACb;EAhJT,AAqJM,aArJO,CAgDX,aAAa,CAoGX,QAAQ,CACN,KAAK,CACH,AAAA,IAAE,CAAK,MAAM,AAAX,EAAa;IACb,MAAM,EJzcK,GAAG,CAAC,KAAK,CDCrB,OAAO;IKycN,UAAU,EJxdV,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CDeV,OAAO,ECfY,CAAC,CAAC,CAAC,CAAC,CAAC,CDmIX,GAAG,CApHhB,qBAAO,GK0cP;EAzJT,AA6JI,aA7JS,CAgDX,aAAa,CA6GX,cAAc,CAAC;IACb,SAAS,EAAE,gBAAgB;IAC3B,UAAU,ELhdP,OAAO;IKidV,aAAa,EAAE,GAAG;IAClB,KAAK,ELhbH,IAAI;IKibN,kBAAkB,EAAE,GAAG;IACvB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,CAAC,GAiBX;IAvLL,AA6JI,aA7JS,CAgDX,aAAa,CA6GX,cAAc,AAYZ,QAAS,CAAC;MACR,UAAU,EL3dT,OAAO;MK4dR,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,IAAI;MACZ,kBAAkB,EAAE,IAAI;MACxB,QAAQ,EAAE,QAAQ;MAClB,WAAW,EAAE,MAAM;MACnB,GAAG,EAAE,IAAI;MACT,SAAS,EAAE,aAAa;MACxB,WAAW,EAAE,MAAM;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,EAAE,GACZ;;AAtLP,AA0LE,aA1LW,CA0LX,QAAQ,CAAC;EACP,eAAe,EAAE,QAAQ,GAM1B;EAjMH,AA6LI,aA7LS,CA0LX,QAAQ,CAGN,MAAM,CAAC;IACL,mBAAmB,EAAE,IAAI;IACzB,iBAAiB,EAAE,CAAC,GACrB;;AAGH,MAAM,EAAE,SAAS,EAAE,KAAK;EAnM1B,AAoMI,aApMS,CAoMT,mBAAmB,CAAC;IAClB,cAAc,EAAE,MAAM,GAKvB;IA1ML,AAuMM,aAvMO,CAoMT,mBAAmB,CAGjB,eAAe,CAAC;MACd,mBAAmB,EAAE,CAAC,GACvB;;AAzMP,AA8ME,aA9MW,CA8MX,MAAM,CAAC;EACL,gBAAgB,EAAE,IAAI,GACvB;;AAhNH,AAmNE,aAnNW,EAmNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ;AAnNhC,AAoNE,aApNW,EAoNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,CAAC;EACxB,kBAAkB,EAAE,OAAO;EAC3B,QAAQ,EAAE,QAAQ,GACnB;;AAvNH,AAyNoC,aAzNvB,EAyNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK;AAzNzC,AA0N8B,aA1NjB,EA0NX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,CAAC;EAChC,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ,GACnB;;AA9NH,AAkOoC,aAlOvB,EAkOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK,AAAA,QAAQ;AAlOjD,AAmO8B,aAnOjB,EAmOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,QAAQ,CAAC;EACxC,UAAU,EAAE,8BAA8B;EAC1C,MAAM,EJzhBK,GAAG,CAAC,KAAK,CAAC,4BAA4B;EI0hBjD,aAAa,ELneD,GAAG;EKoef,OAAO,EAAE,EAAE;EACX,MAAM,EAAE,IAAI;EACZ,IAAI,EATa,IAAG;EAUpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAXc,IAAG;EAYpB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,CAAC,GAMX;GAJC,AAAA,AAbgC,GAa/B,CAAI,KAAK,AAAT,EA/OL,aAAa,EAkOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK,AAAA,QAAQ,GAa7C,AAAA,AAZ0B,GAYzB,CAAI,KAAK,AAAT;EA/OL,aAAa,EAmOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,QAAQ,CAYzB;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAjBU,IAAG,GAkBnB;;AAlPL,AAsPoC,aAtPvB,EAsPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK,AAAA,OAAO;AAtPhD,AAuP8B,aAvPjB,EAuPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAAC;EACvC,UAAU,EAAE,gDAAgD,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;EACpF,OAAO,EAAE,EAAE;EACX,MAAM,EAAE,IAAI;EACZ,IAAI,EA3Ba,IAAG;EA4BpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EA7Bc,IAAG;EA8BpB,KAAK,EAAE,IAAI;EACX,uBAAuB,EAAE,YAAY;EACrC,IAAI,EAAE,gCAAgC;EACtC,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,CAAC,GAMX;GAJC,AAAA,AAdgC,GAc/B,CAAI,KAAK,AAAT,EApQL,aAAa,EAsPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK,AAAA,OAAO,GAc5C,AAAA,AAb0B,GAazB,CAAI,KAAK,AAAT;EApQL,aAAa,EAuPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAaxB;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAtCU,IAAG,GAuCnB;;AAvQL,AA4QI,aA5QS,EA2QX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,CAC/B,KAAK,CAAC;EACJ,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gCAAgC,GACvD;;AA9QL,AAkRoC,aAlRvB,EAkRX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,IAAI,KAAK,AAAA,OAAO,CAAC;EAC7C,OAAO,EAAE,CAAC,GACX;;AApRH,AAsR8B,aAtRjB,EAsRX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAAC;EACvC,OAAO,EAAE,CAAC,GACX;;AAxRH,AA2RoC,aA3RvB,EA2RX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,AAAA,MAAM,GAAG,KAAK,AAAA,QAAQ;AA3RjD,AA4R0C,aA5R7B,EA4RX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,AAAA,QAAQ,CAAC,MAAM,GAAG,KAAK,AAAA,QAAQ,CAAC;EACpD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,gCAAgC,GACpD;;AAIH,UAAU,CAAV,UAAU;EACR,AAAA,EAAE;IACA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,gBAAgB;EAG7B,AAAA,IAAI;IACF,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,aAAa;;AC3mB5B,AACE,cADY,CACZ,aAAa,CAAC;EACZ,OAAO,EAAE,IAAI;EACb,QAAQ,ENoEE,IAAI;EMnEd,qBAAqB,EAAE,uBAA6B;EACpD,MAAM,EAAE,CAAC,GAuBV;EArBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAP5B,AN8LE,cM9LY,CACZ,aAAa,CN6Lb,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMxLC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAXnD,AN8LE,cM9LY,CACZ,aAAa,CAWT,UAAW,CAAA,EAAE,ENkLjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMlLC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IAjBpD,AN8LE,cM9LY,CACZ,aAAa,CAiBT,UAAW,CAAA,EAAE,EN4KjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EM5KC,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IAvBrD,AN8LE,cM9LY,CACZ,aAAa,CAuBT,UAAW,CAAA,EAAE,ENsKjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;;AMnMH,AA8BE,cA9BY,CA8BZ,oBAAoB,CAAC;EACnB,MAAM,ELpBS,GAAG,CAAC,KAAK,CAAC,oCAAoC;EKqB7D,aAAa,ENoCD,GAAG;EMnCf,OAAO,EAAE,IAAI;EACb,MAAM,ENqEI,KAAK;EMpEf,KAAK,EAAE,IAAI,GA6BZ;EAhEH,AAqCI,cArCU,CA8BZ,oBAAoB,CAOlB,YAAY,CAAC;IACX,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,KAAK,GAoBjB;IA3DL,AAyCM,cAzCQ,CA8BZ,oBAAoB,CAOlB,YAAY,CAIV,iBAAiB,CAAC;MAChB,mBAAmB,EAAE,MAAM;MAC3B,iBAAiB,EAAE,SAAS;MAC5B,eAAe,EAAE,SAAS;MAC1B,uBAAuB,EAAE,IAAI;MAC7B,OAAO,EAAE,KAAK;MACd,IAAI,EAAE,kCAAkC;MACxC,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,MAAM;MACd,KAAK,EAAE,IAAI,GACZ;IAnDP,AAqDM,cArDQ,CA8BZ,oBAAoB,CAOlB,YAAY,CAgBV,oBAAoB,CAAC;MACnB,KAAK,EAAE,gCAAgC;MACvC,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,CAAC;MAChB,UAAU,EAAE,MAAM,GACnB;EAGH,MAAM,EAAE,SAAS,EAAE,MAAM;IA7D7B,AA8BE,cA9BY,CA8BZ,oBAAoB,CAAC;MAgCjB,MAAM,EN+CQ,KAAK,GM7CtB;;AAGH,AAAA,6BAA6B,CAAC;EAC5B,KAAK,EAAE,2CAA2C;EAClD,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,UAAU,EN4CO,IAAI,GMpBtB;EA5BD,AAME,6BAN2B,CAM3B,CAAC,CAAC;IACA,KAAK,EAAE,kCAAkC;IACzC,WAAW,EAAE,IAAI,GAMlB;IAdH,AAME,6BAN2B,CAM3B,CAAC,AAIC,qBAAsB,CAAC;MACrB,WAAW,EAAE,MAAM;MACnB,SAAS,EAAE,IAAI,GAChB;EAGH,MAAM,EAAE,SAAS,EAAE,KAAK;IAhB1B,AAAA,6BAA6B,CAAC;MAiB1B,WAAW,EAAE,IAAI;MACjB,MAAM,EAAE,IAAI,GAUf;EA5BD,AAuBE,6BAvB2B,AAuB3B,OAAQ,CAAC;IACP,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK,GACf;;AAGH,MAAM,EAAE,SAAS,EAAE,MAAM;EACvB,AAGI,cAHU,CAEZ,aAAa,CACX,aAAa,CAAC;IACZ,qBAAqB,EAAE,uBAAmC,GAC3D;;ACvGP,AACE,gBADc,AACd,QAAS,CAAC;EACR,QAAQ,EAAE,MAAM,GACjB;;AAHH,AAMI,gBANY,AAKd,IAAM,CAAA,AAAA,QAAQ,EACZ,gBAAgB,CAAC;EACf,OAAO,EAAE,IAAI,GACd;;AAIL,AAAA,gBAAgB,CAAC;EACf,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,YAAY;EACxB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,IAAI,GAkDjB;EA3DD,AAWE,gBAXc,AAWd,KAAM,CAAC;IACL,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC,GA6CX;IA1DH,AAeI,gBAfY,AAWd,KAAM,CAIJ,iBAAiB,CAAC;MAChB,UAAU,EAAE,4BAA4B;MACxC,gBAAgB,EAAE,IAAI;MACtB,SAAS,EAAE,gBAAgB,CAAC,QAAQ;MACpC,OAAO,EAAE,CAAC,GAQX;MANC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;QArBzC,AAeI,gBAfY,AAWd,KAAM,CAIJ,iBAAiB,CAAC;UAOd,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,IAAI;UACZ,GAAG,EAAE,KAAK;UACV,aAAa,EAAE,KAAK,GAEvB;IA3BL,AA6BI,gBA7BY,AAWd,KAAM,CAkBJ,sBAAsB,CAAC;MACrB,UAAU,EAAE,YAAY;MACxB,OAAO,EAAE,CAAC,GACX;IAhCL,AAkCI,gBAlCY,AAWd,KAAM,CAuBJ,eAAe;IAlCnB,AAmCI,gBAnCY,AAWd,KAAM,CAwBJ,iBAAiB;IAnCrB,AAoCI,gBApCY,AAWd,KAAM,CAyBJ,cAAc,CAAC;MACb,UAAU,EAAE,4BAA4B;MACxC,SAAS,EAAE,aAAa;MACxB,OAAO,EAAE,CAAC,GACX;IAxCL,AA0CI,gBA1CY,AAWd,KAAM,CA+BJ,eAAe,CAAC;MACd,gBAAgB,EAAE,IAAI,GACvB;IA5CL,AA8CI,gBA9CY,AAWd,KAAM,CAmCJ,iBAAiB,CAAC;MAChB,gBAAgB,EAAE,IAAI,GACvB;IAhDL,AAkDI,gBAlDY,AAWd,KAAM,CAuCJ,cAAc,CAAC;MACb,gBAAgB,EAAE,IAAI,GACvB;IApDL,AAsDI,gBAtDY,AAWd,KAAM,CA2CJ,qBAAqB,CAAC;MACpB,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,CAAC,GACX;;AAIL,AAAA,WAAW;AACX,AAAA,IAAI,AAAA,UAAU,CAAC;EACb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;EACd,gBAAgB,EAAE,0CAAiC,EPhB5B,4FAAyH;EOiBhJ,qBAAqB,EAAE,MAAM;EAC7B,qBAAqB,EAAE,WAAW;EAClC,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,KAAK;EACtB,QAAQ,EAAE,KAAK,GAChB;;AAED,AAAA,iBAAiB,CAAC;EAChB,SAAS,EAAE,gBAAgB,CAAC,UAAU;EACtC,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,CAAC;EACV,gBAAgB,EP1CV,IAAI;EO2CV,KAAK,EAAE,UAAU;EACjB,KAAK,EPhFG,OAAO;EOiFf,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI,GAqHd;EA/HD,AAYE,iBAZe,CAYf,IAAI,CAAC;IACH,QAAQ,EAAE,QAAQ,GACnB;EAdH,AAgBE,iBAhBe,CAgBf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EP3CmB,OAAO;IO4C/B,MAAM,EAAE,OAAO,GAahB;IAlCH,AAuBI,iBAvBa,CAgBf,YAAY,CAOV,CAAC,CAAC;MACA,KAAK,EPpGD,OAAO;MOqGX,MAAM,EAAE,OAAO;MACf,eAAe,EAAE,SAAS,GAC3B;IA3BL,AA6BI,iBA7Ba,CAgBf,YAAY,CAaV,CAAC,AAAA,MAAM;IA7BX,AA8BI,iBA9Ba,CAgBf,YAAY,CAcV,CAAC,AAAA,OAAO;IA9BZ,AA+BI,iBA/Ba,CAgBf,YAAY,CAeV,CAAC,AAAA,MAAM,CAAC;MACN,KAAK,EPpHD,OAAO,GOqHZ;EAjCL,AAoCE,iBApCe,CAoCf,YAAY,CAAC;IACX,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,oBAAoB,EAAE,IAAI;IAC1B,MAAM,EAAE,GAAG,CAAC,KAAK,CPvHX,OAAO;IOwHb,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,oCAAoC,GAkBjD;IAhEH,AAoCE,iBApCe,CAoCf,YAAY,AAYV,MAAO,CAAC;MACN,YAAY,EPzHR,OAAO,GO0HZ;IAlDL,AAoCE,iBApCe,CAoCf,YAAY,AAgBV,MAAO,CAAC;MACN,YAAY,EPzIR,OAAO;MO0IX,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CP1IjB,uBAAO,GO2IZ;IAvDL,AAoCE,iBApCe,CAoCf,YAAY,AAqBV,QAAS,CAAC;MACR,YAAY,EPhIT,OAAO,GOiIX;IA3DL,AAoCE,iBApCe,CAoCf,YAAY,AAyBV,QAAS,AAAA,MAAM,CAAC;MACd,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CPpIlB,qBAAO,GOqIX;EA/DL,AAkEE,iBAlEe,CAkEf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,SAAS,GAClB;EArEH,AAuEe,iBAvEE,CAuEf,YAAY,CAAC,WAAW,CAAC;IACvB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,KAAK,GACf;EA3EH,AA6EE,iBA7Ee,CA6Ef,MAAM,CAAC;IACL,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,WAAW,GACpB;EAjFH,AAmFE,iBAnFe,CAmFf,gBAAgB,CAAC;IACf,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,GAAG;IAClB,KAAK,EP9HD,IAAI;IO+HR,gBAAgB,EP9KV,OAAO;IO+Kb,UAAU,EAAE,sBAAsB,GAOnC;IAnGH,AAmFE,iBAnFe,CAmFf,gBAAgB,AAWd,IAAM,EAAA,AAAA,AAAA,QAAC,AAAA,EAAU,OAAO,EA9F5B,AAmFE,iBAnFe,CAmFf,gBAAgB,AAYd,IAAM,EAAA,AAAA,AAAA,QAAC,AAAA,EAAU,MAAM,CAAC;MACtB,UAAU,EPlLN,OAAO;MOmLX,YAAY,EPlLR,OAAO,GOmLZ;EAlGL,AAqGE,iBArGe,CAqGf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EPzLV,OAAO;IO0Lb,KAAK,EP9LC,OAAO;IO+Lb,MAAM,EAAE,GAAG,CAAC,KAAK,CP/LX,OAAO;IOgMb,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,uDAAuD,GAepE;IA9HH,AAqGE,iBArGe,CAqGf,YAAY,CAYV,AAAA,QAAE,AAAA,EAAU;MACV,gBAAgB,EPjMZ,OAAO;MOkMX,YAAY,EPhMR,OAAO;MOiMX,KAAK,EPhMD,OAAO;MOiMX,MAAM,EAAE,OAAO;MACf,OAAO,EAAE,GAAG,GACb;IAvHL,AAqGE,iBArGe,CAqGf,YAAY,AAoBV,IAAM,EAAA,AAAA,AAAA,QAAC,AAAA,EAAU,MAAM,CAAC;MACtB,gBAAgB,EP9MZ,OAAO;MO+MX,YAAY,EP9MR,OAAO;MO+MX,KAAK,EPhKH,IAAI,GOiKP;;AAIL,AAAA,sBAAsB,CAAC;EACrB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,YAAY;EACnB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK,GAYb;EAVC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IANrC,AAAA,sBAAsB,CAAC;MAOnB,KAAK,EAAE,KAAK,GASf;EANC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAVrC,AAAA,sBAAsB,CAAC;MAWnB,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,KAAK;MACZ,UAAU,EAAE,MAAM,GAErB;;AAED,AAAA,iBAAiB,CAAC;EAChB,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,IAAI;EACnB,SAAS,EAAE,KAAK;EAChB,UAAU,EAAE,8CAAqC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS;EACzE,cAAc,EAAE,KAAK,GACtB;;AAED,AAAA,CAAC,AAAA,cAAc,CAAC;EACd,KAAK,EPhMC,IAAI;EOiMV,OAAO,EAAE,KAAK;EACd,eAAe,EAAE,SAAS,GAO3B;EAVD,AAKE,CALD,AAAA,cAAc,AAKb,MAAO,EALT,AAME,CAND,AAAA,cAAc,AAMb,OAAQ,EANV,AAOE,CAPD,AAAA,cAAc,AAOb,MAAO,CAAC;IACN,KAAK,EPvMD,IAAI,GOwMT;;AAGH,AAAA,eAAe,CAAC;EACd,UAAU,EAAE,+CAA+C,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS;EAC9E,eAAe,EAAE,SAAS;EAC1B,MAAM,EAAE,WAAW;EACnB,WAAW,EAAE,KAAK,GAUnB;EARC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IANrC,AAAA,eAAe,CAAC;MAOZ,UAAU,EAAE,+CAA+C,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS;MAChF,eAAe,EAAE,SAAS,GAM7B;EAdD,AAWE,eAXa,AAWb,IAAM,CAAA,AAAA,GAAG,EAAE;IACT,mBAAmB,EAAE,SAAS,GAC/B;;AAGH,AAAA,qBAAqB,CAAC;EACpB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EPjOC,IAAI;EOkOV,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,EAAE;EACX,UAAU,EAAE,YAAY;EACxB,OAAO,EAAE,CAAC,GAUX;EARC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAdrC,AAAA,qBAAqB,CAAC;MAelB,KAAK,EAAE,KAAK,GAOf;EAJC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAlBrC,AAAA,qBAAqB,CAAC;MAmBlB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI,GAEf;;AAED,AAAA,eAAe;AACf,AAAA,iBAAiB;AACjB,AAAA,cAAc,CAAC;EACb,OAAO,EAAE,CAAC;EACV,SAAS,EAAE,gBAAgB,GAC5B;;AAED,AAAA,MAAM,CAAC;EACL,OAAO,EAAE,IAAI,GACd;;AAED,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,QAAQ;EACjB,SAAS,EAAE,eAAe;EAC1B,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EPpQC,IAAI;EOqQV,gBAAgB,EPvST,OAAO;EOwSd,QAAQ,EAAE,QAAQ;EAClB,kBAAkB,EAAE,IAAI;EACxB,GAAG,EAAE,KAAK;EACV,aAAa,EAAE,GAAG,GAenB;EA1BD,AAaE,MAbI,AAAA,OAAO,AAaX,QAAS,CAAC;IACR,kBAAkB,EAAE,IAAI;IACxB,UAAU,EP/SL,OAAO;IOgTZ,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,aAAa;IACxB,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,EAAE,GACZ;;AAGH,UAAU,CAAV,SAAU;EACR,AAAA,EAAE;IACA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,iBAAiB;EAG9B,AAAA,IAAI;IACF,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,aAAa;;ACpV5B,AACE,OADK,CACL,EAAE,CAAC;EACD,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC,GAKX;EAJC,MAAM,EAAE,SAAS,EAAE,KAAK;IAJ5B,AACE,OADK,CACL,EAAE,CAAC;MAIC,OAAO,EAAE,MAAM;MACf,oBAAoB,EAAE,IAAI,GAE7B;;AARH,AAUK,OAVE,CAUL,EAAE,CAAC,EAAE,CAAC;EACJ,OAAO,EAAE,YAAY,GAUtB;EArBH,AAUK,OAVE,CAUL,EAAE,CAAC,EAAE,AAGH,OAAQ,CAAC;IACP,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,GAAG,GACb;EAhBL,AAUK,OAVE,CAUL,EAAE,CAAC,EAAE,AAQH,WAAY,AAAA,OAAO,CAAC;IAClB,OAAO,EAAE,IAAI,GACd;;ACpBL,AAAA,eAAe,CAAC;EAQd,OAAO,EAAE,WAAW,GAmFrB;EAjFC,MAAM,EAAE,UAAU,EAAE,KAAK;IAV3B,AAWI,eAXW,CAWT;MACA,OAAO,EAAE,QAAQ,GAClB;EAbL,AAgBE,eAhBa,CAgBb,qBAAqB,CAAC;IACpB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,IAAI;IACb,MAAM,EAlBQ,IAAI;IAmBlB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAClB,KAAK,ET2DkB,KAAiC,GS9CzD;IAXC,MAAM,EAAE,SAAS,EAAE,KAAK;MAxB5B,AAgBE,eAhBa,CAgBb,qBAAqB,CAAC;QASlB,KAAK,ETyDa,KAAiC,GS/CtD;IAPC,MAAM,EAAE,SAAS,EAAE,KAAK;MA5B5B,AAgBE,eAhBa,CAgBb,qBAAqB,CAAC;QAalB,KAAK,ETsDc,KAAiC,GShDvD;IAHC,MAAM,EAAE,SAAS,EAAE,KAAK;MAhC5B,AAgBE,eAhBa,CAgBb,qBAAqB,CAAC;QAiBlB,KAAK,ETmDa,KAAiC,GSjDtD;EAnCH,AAqCE,eArCa,CAqCb,KAAK,CAAC;IACJ,UAAU,EAAE,sCAAsC,CAAC,yBAAyB,CAnCxD,IAAI,CAmC0E,MAAM,CAAC,SAAS;IAClH,eAAe,EArCE,IAAI;IAsCrB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,iCAAiC;IACnD,UAAU,ERvBK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO,ES2BkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CTApC,mBAAI;ISCR,SAAS,EAAE,IAAI;IACf,uBAAuB,EAAE,IAAI;IAC7B,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,CAAC;IACV,kBA