Index: content/404.org
===================================================================
--- content/404.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/404.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,1 @@
+Страница не найдена
Index: content/about.org
===================================================================
--- content/about.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/about.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,48 @@
+#+Title: Обо мне: Кириллов Михаил
+
+#+BEGIN_EXPORT html
+<article>
+<div class="row">
+<div class="col-sm-12 col-md-3">
+  <img src="/public/images/w96k.png" class="shadowed rounded" style="max-width: 180px; width: 100%;">
+  <div>
+    <img src="/public/images/fsf.png" class="shadowed rounded">
+  </div>
+</div>
+<div class="col-sm-12 col-md-9">
+  <h2>Кириллов Михаил</h2>
+
+  <p style="position: relative; margin-top: -0.75em;">
+      <span class="icon-location"></span>
+      <a href="https://www.openstreetmap.org/relation/2555133">Россия, Москва</a>
+  </p>
+
+  <p>Разработчик. Люблю функциональное
+программирование, LISP и движение за свободное программное
+обеспечение.</p>
+
+<div class="row">
+<div class="col-sm">
+  <p>Связь:</p>
+  <ul>
+    <li><span class="icon-mail"></span> Email: <a href="mailto:w96k@posteo.net">
+       w96k@posteo.net</a></li>
+    <li><span class="icon-share"></span> Mastodon: <a href="https://fosstodon.org/@w96k">@w96k</a></li>
+  </ul>
+</div>
+<div class="col-sm">
+  <p>Код:</p>
+  <ul>
+    <li><span class="icon-link"></span> Sourcehut: <a href="https://git.sr.ht/~w96k/">
+       @w96k</a></li>
+    <li><span class="icon-link"></span> Github: <a href="https://github.com/w96k">
+       @w96k</a></li>
+  </ul>  
+</div>
+
+</div>
+
+</div>
+</div>
+</article>
+#+END_EXPORT
Index: content/index.org
===================================================================
--- content/index.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/index.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,4 @@
+#+TITLE: @w96k
+#+OPTIONS: toc:nil
+
+* Посты
Index: content/posts/dobryakov.sxml
===================================================================
--- content/posts/dobryakov.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/dobryakov.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,284 @@
+;;; -*- scheme -*-
+
+(use-modules (haunt utils))
+
+`((title . "Григорий Добряков об устройстве на работу")
+  (date . ,(string->date* "2019-03-20 12:00"))
+  (tags "Выдержка" "Hexlet" "Найм")
+  (summary . "Григорий Добряков провел вебинар с заголовком «Как
+составить резюме мечты и пройти собеседование».")
+  
+  (content
+
+   (p "Григорий Добряков провел вебинар с заголовком «Как составить
+резюме мечты и пройти собеседование». Вебинар показали на
+YouTube-канале " (a (@ (href "https://hexlet.io")) "Хекслет") ",
+онлайн-площадке, обучающей программированию.")
+
+   (p (a (@ (href "https://www.dobryakov.com/")) "Григорий
+Добряков") " — Project Manager с 20-летним стажем. Он собеседует,
+нанимает и руководит людьми. Он рассказывает о том, как составлять
+резюме, что делать на собеседовании и как влиться в коллектив.")
+
+;;; Webinar
+   (p (@ (class "video"))
+      (iframe
+       (@ (src "https://youtube.com/embed/lJiWvv5Krbk"))))
+
+   (p "Далее представляю запись его ключевых идей. Некоторые идеи могут быть
+искажены моей редактурой, но в целом всё в том или ином виде есть в
+записи.")
+
+   (h3 "Что писать в резюме")
+
+   (p "Пишите ваше желания, к чему вы стремитесь. Так вы выделитесь
+среди большинства. Унылое резюме — это резюме, где указано только то,
+что ты умеешь делать.")
+
+   (p "Укажите ту область, в которой вам интересно работать. Например
+интернет-магазин, развлекательный проект, ритейл, геймдев и так
+далее. Таким образом вы отсеете людей, у которых явно не то что вам
+надо. Вы сэкономите время.")
+
+   (p "Если у вас есть релевантное образование, то указывайте и
+его. Если вы учились профессии, которая никак не связана с желаемой
+работой, то не стоит.")
+
+   (p "Также не забудьте:")
+
+   (ul
+    (li "Ссылку на Github")
+    (li "Готовность к релокейту")
+    (li "Возраст")
+    (li "Контакты")
+    (li "Желаемая ЗП")
+    (li "Опыт работы в компаниях и проекты"))
+
+   (p "Что касается размеров, в США стандарт — 1-2 страницы, в Европе
+2 страницы. В целом короткие резюме лучше, потому что читать все
+леняться.")
+
+   (h3 "Как писать о предыдущей работе")
+
+   (p "Дайте краткое описание о сфере деятельности компании и ее
+размере. Размер можно указать в количестве юзеров, продуктов или
+доходе компании. Люди, которые смотрят ваше резюме, не пойдут гуглить
+и узнавать информацию.")
+
+   (p "Укажите вашу роль в организации и сферу вашей
+ответственности. Что происходило в бизнесе благодаря вашей
+работе. Когда ваше резюме читают, ваши предыдущие действия хотят
+сопоставить с тем какие цели стоят у компании сейчас.")
+
+   (p "Вас нанимают не для того, чтобы писать код, а для того, чтобы
+решать бизнес-задачи. Потому никогда не пишите просто списки рутинных
+задач вроде “исправлял баги” и “делал фичи”. Пишите о пользе
+бизнесу.")
+
+   (h3 "Стоит ли указывать различные курсы")
+
+   (p" Обязательно указывайте, что вы учитесь, что вы читаете книги,
+что вы интересуетесь, потому что ленивых жоп в мире очень
+много. Самообучение — это очень мощный драйвер для того, чтобы вас
+выделить среди толпы.")
+
+   (h3 "Кто кого выбирает при найме")
+
+   (p "Найм — двусторонний процесс с небольшим дисбалансом в
+зависимости от того джун вы или нет. Необходимо выбирать
+компанию-работодателя также тщательно как выбирают вас. Вас исследуют
+при найме и вы исследуйте. Например вы можете узнать юридические
+данные компании, чтобы понять все ли с ней в порядке.")
+
+   (h3 "Что происходит на стороне работодателя при получении резюме")
+
+   (p "Самая главная ошибка — думать, что на стороне заказчика есть
+какой-то хорошо отлаженный конвейер, через который проходит каждое
+резюме. В большинстве компаний HR по тем или иным причинам не
+обрабатывает все резюме, потому при отправке учитывайте, что ваше
+резюме может быть просто не прочитано. Если вам не ответили, это не
+значит, что у вас неподходящая квалификация или плохое резюме.")
+   
+   (h3 "Когда обновлять резюме")
+
+   (p "Резюме надо обновлять не в тот момент, когда вы запарились на
+текущей работе, а в тот день, что вы пришли на новую работу. Это нужно
+для фиксации активностей, достижений и стека технологий. По мере роста
+как специалиста этот список будет расширяться, держать все детали в
+голове станет сложно.")
+
+   (h3 "Узнайте об отношениях внутри команды")
+
+   (p "Вы можете попросить присоединить к собеседованию членов той
+команды, в которой вам предстоит работать, и их руководителя. Таким
+образом вы сможете узнать отношения руководства к
+подчиненным. Руководитель может прессовать и хамить, а может давать
+высказаться и прислушиваться к мнению подчиненных. Вы сможете
+спроецировать то, как этот человек в будущем будет общаться с
+вами. Привлекательные технологии и бонусы не стоят того, чтобы
+работать с плохим начальством.")
+
+   (h3 "Что делать если не умеешь себя презентовать")
+
+   (p "Чтобы себя презентовать, нужно быть в себе уверенным:")
+
+   (ul
+    (li "надо уметь себя ценить")
+    (li "надо понимать чего ты стоишь")
+    (li "надо понимать, что ты человек, а не винтик в чужой машине."))
+
+   (p "Нужно дать понять, что ты пришел поговорить. Ты пришел не
+просить о работе, ты не пришел из-за того, что тебе нечего есть. Ты
+пришел поговорить как равным с равным. Ты идешь на сделку,
+договариваться. Если тебя прессуют, если тебе говорят, что ты джун и
+ты не заслужил еще человеческого отношения, вставай - уходи.")
+
+   (h3 "Что насчет удаленной работы")
+
+   (p "Я считаю, что сейчас надо всем работать удаленно. Я сам работаю
+последние четыре года удаленно в качестве руководителя, консультанта
+или приглашаемого специалиста. Не стоит бояться удаленки.")
+
+   (p "Для удаленной работы надо быть дисциплинированным и дать
+работодателю понять, что вы можете работать в то время, которое
+обозначаете, что у вас есть рабочее место и вам никто не мешает, что
+над вами не нужно стоять над душой.")
+
+   (h3 "Почему вы ушли с предыдущего места работы")
+
+   (p "Единственная причина, по которой вы меняете работу — потому что
+вы захотели. Вы — хозяин своей жизни. Обозначайте уход с места работы,
+как позитивное подведение итогов. Даже если это не так, даже если
+начальник был полный дятел.")
+
+   (h3 "Методика STAR")
+
+   (p "Situation, Task, Action, Result. Эта методика для описания
+места работы.")
+
+   (p "Situation — это профессиональные ситуации, которые вы даете
+работодателю, чтобы он сравнил их с тем, что есть у него.")
+
+   (p "Task — это задачи, которые перед вами поставили. Допустим, есть
+кривое апи продукта, задача — сделать его хорошим.")
+
+   (p "Actions — это то, что вы предприняли для достижения
+   Task. Нельзя просто писать “Я кодил код”, “Я исправлял ошибки”, “Я
+   делал новые фичи”.")
+
+   (p "Result — это то, что поменялось в продукте, в бизнесе после
+   того как вы пришли и накодили.")
+
+   (p "Если вы используете STAR, вы описываете ситуацию в целом, ваш
+   опыт работы с точки зрения бизнеса. Это демонстрирует работодателю,
+   что вы осознанно подходите к делу и выполняете конкретные
+   бизнес-задачи.")
+
+   (h3 "Как планировать график собеседований")
+
+   (p "Если вы активно работаете над поиском работы, то у вас может
+быть по 2-3 собеседования в день. Существуют сервисы, которые
+облегчают организацию графика собеседований.")
+
+   (ul
+    (li (a (@ (href "https://youcanbook.me/")) "YouCanBookMe"))
+    (li (a (@ (href "https://calendly.com/")) "Calendly"))
+    (li (a (@ (href "https://doodle.com/")) "Doodle")))
+
+   (p "Эти сервисы позволяют гибко назначать время вместе с HR’ом. Вы
+кидаете ссылку, HR выбирает подходящее время. Эти сервисы
+интегрируются с Google Calendar.")
+
+   (p "Таким образом вы избегаете лишнего общения с уточнением деталей
+встреч.")
+
+   (h3 "Советы")
+
+   (h4 "Запись собеседований")
+
+   (p "Полезно делать записи skype-собеседований. Позже вы сможете их
+переслушать, пересмотреть, увидеть в себе какие-то недостатки и
+сделать необходимые выводы.  Уточняйте кто будет на собеседовании")
+
+   (p "Уточните имена тех, кто будет собеседовать. Зачем это нужно? Вы
+сможете прогуглить эти имена и выяснить чем они живут. Так будет легче
+найти точки соприкосновения.")
+
+   (p "Если не удалось выяснить имена, вы можете взять блокнот и
+записать имена уже непосредственно на собеседовании.")
+
+   (h4 "Процесс онбординга")
+
+   (p "Онбординг — процесс вовлечения сотрудника в проект. Спросите
+есть ли он, как и кто вам будет помогать вовлекаться в новый вид
+деятельности. В подавляющем большинстве мелких компаний процесс
+онбординга отсутствует.")
+   
+   (h4 "Узнайте о допустимом уровне самодеятельности")
+
+   (p "В некоторых компаниях программиста считают за человека, который
+должен делать только то, что ему говорят. В таких компаниях у вас
+скорее всего будет отсутствовать профессиональный рост. Это называется
+“нанять рабов на галеру и заставить грести”.")
+   
+   (h4 "Контактируйте с гуманитариями")
+
+   (p "К сожалению, многие программисты не любят гуманитариев,
+некоторые думают, что это существа с другой планеты. Контактируя с
+гуманитариями, вы сможете получать обратную связь с точки зрения
+бизнеса. То есть какой профит приносит бизнесу ваша деятельность,
+потому что именно это выгодно подавать в вашем резюме.")
+
+   (p "Недостаточно презентовать себя с технической точки зрения,
+необходимо помимо этого показывать работодателю какую конкретно пользу
+вы можете принести компании.")
+
+   (h4 "Помоги HR’у")
+
+   (p "HR’ы очень часто перегружены, им платят маленькие зарплаты, они
+испытывают давление от заказчика, другими словами находятся в
+постоянном стрессе. Они могут не понимать технических деталей вакансии
+и путать термины. Вы можете использовать это и помочь HR’у, подсказать
+термин, попросить подходящую вакансию. Обратная связь с HR окупится
+очень быстро.")
+
+   (h4 "Переработки")
+
+   (p "Вы — не раб, не прислуга, не любовница. Вы продаете 8 часов
+своего рабочего времени в обмен на деньги. Все, что вы хотите давать
+сверху этого — это жест доброй воли, а не обязанность. Вас не должно
+грызть чувство вины, если вы покидаете рабочее место вовремя без
+переработки. Работодатель просто выжмет все соки за сверхурочные часы
+и ничего не даст взамен.")
+
+   (p "Очень важно уметь заботиться и ценить себя. С точки зрения
+менеджмента, человек, который умеет заботиться о себе, ставить границы
+и говорить нет, более выгоден, потому что он может рассчитать свои
+силы и не покинет проект посередине. Человек же, который говорит, что
+готов работать сверхурочно, скорее всего в какой-то момент опустит
+руки.")
+
+   (h4 "Выгорание")
+
+   (p "Выгорание происходит когда ты занимаешься тем, чем не
+хочешь. По-моему мнению, почва для выгорания — это недостаток
+осознанности своего “Я”, своих личных глубоких потребностей. Чтобы
+предотвратить выгорание, вам нужно научиться уважать себя и уметь
+говорить “нет”.")
+
+   (p "Не пытайтесь бороться народными средствами. Не надо пить,
+уходить в отпуск на год и так далее. Это не работает. Если вам это
+помогло, то это не выгорание, а усталость.")
+
+   (p "Выгорание — это медицинское явление, гормональный сбой, который
+происходит в голове. Желательно сходить к врачу. Этот недуг
+исправляется только таблетками.")
+
+   (p "Если вы не преступаете себя, свои интересы и моральные
+принципы, то у вас не будет выгорания.")
+
+   (h3 "Заключение")
+
+   (p "Спасибо Григорию и команде Хекслета за вебинар. Большая часть
+стрима была посвещена ответам на вопросы зрителей, которые не попали в
+эту выдержку. Они повторялись и были слишком короткими.")))
Index: content/posts/libreboot-x200t.org
===================================================================
--- content/posts/libreboot-x200t.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/libreboot-x200t.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,23 @@
+#+Title: Libreboot X200T
+
+* Libreboot X200T
+
+Вот уже несколько месяцев я использую Thinkpad X200T в качестве
+основной рабочей машины. Этот ноутбук убивает желание иметь дома
+настольный комьпютер и учит ценить ограниченный вычислительный
+ресурс. После покупки я полностью отказался от использования мыши. Его
+удобно таскать с собой, он быстро загружается и держит заряд 4 часа.
+
+** Libreboot
+
+   Libreboot — свободная альтернатива BIOS и UEFI. Многие любят
+   свободный софт, но исторически сложилось так, что программы,
+   отвечающие за инициализацию системы полностью закрыты.
+
+   Активисты свободного ПО создали открытую реализацию BIOS / UEFI,
+   которая помимо того, что открыта для всех желающих и расширяема, так
+   еще работает быстрее встроенных закрытых систем. Одна из таких
+   реализаций называется Coreboot, она содержит проприоритарные блобы от
+   производителей железа, а Libreboot является версией Coreboot без
+   блобов и входит в проект GNU. Libreboot не является форком Coreboot,
+   это отдельная поставка Coreboot.
Index: content/posts/libreboot-x200t.sxml
===================================================================
--- content/posts/libreboot-x200t.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/libreboot-x200t.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,287 @@
+;;; -*- scheme -*-
+
+(use-modules (haunt utils))
+
+`((title . "Libreboot X200T")
+  (date . ,(string->date* "2019-03-17 12:00"))
+  (tags "Железо")
+  (summary . "Ноутбук с свободным BIOS")
+  
+  (content
+   
+   ((p "Вот уже несколько месяцев я использую x200t в качестве
+основной рабочей машины. Этот ноутбук убивает желание иметь дома
+настольный комьпютер и учит ценить ограниченный вычислительный
+ресурс. После покупки я полностью отказался от использования мыши. Его
+удобно таскать с собой, он быстро загружается и держит заряд 4 часа.")
+
+    (h3 "Libreboot")
+
+    (p "Libreboot — свободная альтернатива BIOS и UEFI. Многие любят
+свободный софт, но исторически сложилось так, что программы,
+отвечающие за инициализацию системы полностью закрыты.")
+
+    (p "Активисты свободного ПО создали открытую реализацию BIOS /
+UEFI, которая помимо того, что открыта для всех желающих и расширяема,
+так еще работает быстрее встроенных закрытых систем. Одна из таких
+реализаций называется Coreboot, она содержит проприоритарные блобы от
+производителей железа, а Libreboot является версией Coreboot без
+блобов и входит в проект GNU. Libreboot не является форком Coreboot,
+это отдельная поставка Coreboot.")
+
+    ;;; Leah Rowe about Libreboot
+    (p (@ (class "video"))
+       (iframe
+        (@ (src "https://youtube.com/embed/W1ta--tHenE"))))
+
+    (p "Libreboot был создан Leah Rowe. Он несколько раз выступал с
+докладами про свое детище.")
+
+    (h3 "Чем закрытые системы опасны")
+
+    (p "Используя закрытый софт, люди доверяют целиком и полностью
+производителю, на его совести безопасность и функционал
+системы. Эксплуатация подобной системы напоминает ящик пандоры, мы
+знаем, что система должна делать, но не уверены, что она делает именно
+то, что необходимо и только то, что необходимо.")
+
+    (p "Начиная с 2008 года Intel начала встраивать подсистему Intel
+ME в чипсеты. А AMD с 2013 года начала встраивать AMD PSP в свои. Эти
+обе подсистемы действует примерно одинаково, они созданы для
+мониторинга работы процессора, они автономны, они закрыты, их нельзя
+выключить. В этих системах всплывают дыры в безопасности, которые
+может исправить только сам производитель.")
+
+    (p "Libreboot позволяет избавиться от этих подсистем, но работает
+он на " (a (@ (href "https://libreboot.org/docs/hardware/")) "очень
+ограниченном ряде устройств") " и требует использования программатора,
+внешнего устройства для записи данных в BIOS. Только Thinkpad T60
+позволяет прошить Libreboot, используя программные средства.")
+
+    (h3 "Ноутбук")
+
+    (p (a (@ (href "https://minifree.org/product/libreboot-x200-tablet/")) "Libreboot
+X200T") " — это восстановленный ThinkPad X200T с прошитым на Libreboot
+BIOS. Помимо этого в нем заменена сетевая карта для совместимости с
+открытыми драйверами. ThinkPad известен своей надежностью и
+модульностью. Суффикс T в конце обозначает, что это Tablet версия
+ноутбука, здесь IPS монитор от Wacom, когда в X200 обычный TFT, и
+сенсорный экран, который можно разворачивать на 180 градусов и делать
+из ноутбука планшет.")
+
+    (p "Несмотря на то, что данная модель вышла в 2009 году, она
+пригодна для использования даже спустя 10 лет. Geoff
+Greer " (a (@ (href "https://geoff.greer.fm/2017/01/23/oldest-viable-laptop/")) "называет")
+" ThinkPad X60 - самой старой моделью ноутбука, которым можно
+пользовать и по сей день. Это другой ноутбук, он вышел еще раньше чем
+x200t. Его
+пост " (a (@ (href "https://news.ycombinator.com/item?id=19246406")) "запустил
+ветку обсуждений на HackerNews")", в котором комментаторы делятся
+своим опытом использования старых машин в настоящее время.")
+
+    (h3 "Характеристики")
+
+    (table
+     (thead
+      (tr
+       (th "Комплектующие")
+       (th "Описание")))
+     (tbody
+      (tr
+       (td "CPU")
+       (td "Intel Core 2 Duo SL9400"))
+      (tr
+       (td "GPU")
+       (td "Intel GMA 4500MHD"))
+      (tr
+       (td "Screen")
+       (td "12.1″ 1280×800 TFT LCD (IPS panel)"))
+      (tr
+       (td "LAN")
+       (td "Gigabit ethernet as standard"))
+      (tr
+       (td "Ports")
+       (td "1x VGA, 3x USB 2.0, 1x Headphone, 1x Microphone, 1x
+Gigabit Ethernet, 1x ExpressCard/54"))
+      (tr
+       (td "WIFI")
+       (td "Upgraded with an 802.11n wireless card (Atheros AR5B95,
+AR9285 chipset), ensuring full compatibility with free drivers in
+GNU+Linux."))))
+
+    (p "Я использую GNU/Debian, Ratpoison, Emacs и Firefox, эта связка
+ест не больше 1GB RAM при обычном использование и не больше 2GB при
+разработке. Видеочип позволяет без труда выводить FullHD на внешний
+монитор. А процессорной мощности вполне хватает, чтобы компилировать
+программы и манипулировать текстом в редакторе. Нехватку ресурсов
+скорее всего почувствуют люди, которым нужно редактировать видео или
+работать с 3D.")
+
+    (p "Возможно данный воркфлоу подойдет не всем, а ограничение
+ресурсов станет решающим фактором для отказа от использования
+устройства.")
+
+    (h3 "Преимущества")
+
+    (ul
+     (li
+      (h4 "Прочный")
+      (p "Корпус сделан из прочного пластика, имеющий магниевый
+каркас. Ноутбук дольше служит и меньше подвержен внешним
+разрушениям. Если загуглить “Thinkpad Torture Test”, то найдете видео,
+где люди тщетно пытаются вывести ноутбук из строя."))
+     (li
+      (h4 "Модульный")
+      (p "ThinkPad’ы в разы легче чинить чем монолитных современников
+вроде MacBook. До некоторых комплектующих можно добраться, не разбирая
+весь ноутбук благодаря удобному делению на сектора."))
+     (li
+      (h4 "Док-станция")
+      (p "Ноутбук имеет док-станцию, в которой содержатся
+дополнительные порты, dvd-привод или дополнительные накопители. Ее
+удобно использовать, если часто таскать ноутбук с собой, приходя
+домой, вам не нужно переподключать тонну кабелей, вставили в док и все
+работает. Представьте Nintendo Switch."))
+     (li
+      (h4 "Совместимость с Unix")
+      (p "Ноутбук позволяет без проблем установить и использовать
+UNIX-совместимые операционные системы. Необходимые драйвера либо уже в
+ядре, либо лежат в открытом доступе."))
+     (li
+      (h4 "Trackpoint")
+      (p "Также известен как “клитор”. Это
+резиновый манипулятор, заменяющий мышь, который находится между
+клавишами “G”, “H” и “B”. Убирает усталость рук из-за вечного
+переключения между мышью и клавиатурой. После покупки я перестал
+использовать мышь вовсе, рекомендую попробовать работать только c
+TrackPoint.")
+      (img (@ (src /images/trackpoint.png))))
+     (li
+      (h4 "Клавиатура")
+      (p "Полноценная 7-строчная клавиатура. Ход клавиш не такой как у
+большинства ноутбучных клавиатур, нажать что-то случайно практически
+невозможно. Расположение клавиш немного изменено, но не так радикально
+как на MacBook’ах."))
+     (li
+      (h4 "Планшет")
+      (p "Экран от Wacom и стилус. Перо хранится прямо в корпусе
+ноутбука в специальном отсеке. Экран можно развернуть на 180 градусов
+и положить на клавиатуру. Скорее всего это самый дешевый вариант для
+“планшета с экраном”."))
+     (li
+      (h4 "Экран")
+      (p "В отличии от других Libreboot-моделей, X200T имеет IPS
+матрицу вместо TFT. Экран отлично передает цвета и не подвержен
+ШИМ’у. Хотя всего-лишь HD."))
+     (li
+      (h4 "Отсутствие тачпада")
+      (p "Только TrackPoint, никаких случайных задеваний
+тачпада. Впрочем на большинстве ThinkPad’ов тачпад присутствует."))
+     (li
+      (h4 "Тихий и холодный")
+      (p "Не шумит. Во всяком случае из библиотеки вас вряд ли
+прогонят, если начнете что-то компилировать. Куллер обеспечивает
+нужный сброс температуры. В простое +40°C, под нагрузкой максимум
++70°C."))
+     (li
+      (h4 "Мобильность")
+      (p "Несмотря на толщину, сам ноутбук по ширине и длине не
+занимает много места. Легко брать с собой.")))
+
+    (h3 "Недостатки")
+
+    (ul
+     (li
+      (h4 "Нельзя редактировать поведение железа в биос")
+      (p "В качестве фронтенда Libreboot использует Grub. В нем
+отсутствует возможность изменения работы железа, только возможность
+выбрать с чего загружать систему."))
+     (li
+      (h4 "Батарея")
+      (p "Держит 4 часа, что по меркам современных ноутбуков
+мало. Батареи продают часто уже просевшие."))
+     (li
+      (h4 "Нет HDMI / DVI порта")
+      (p "На самом ноутбуке присутствует только VGA порт. В
+док-станции есть DisplayPort. Потому если используете внешний монитор
+и хотите цифровой сигнал, то придется приобрести док-станцию и
+переходник DisplayPort -> HDMI / DVI."))
+     (li
+      (h4 "Только Б/У")
+      (p "Так как производство данных ноутбуков уже давно закрыто, то
+его возможно приобрести только с рук. Из-за этого на ноутбуке могут
+присутствовать потертости и другие дефекты."))
+     (li
+      (h4 "Слабое железо")
+      (p "Для меня это не недостаток, но многие могут испытать
+трудности в эксплуатации. Часто приходится сталкиваться с жирным
+софтом, который очень нерационально тратит ресурсы компьютера, если
+такой софт перестать использовать, то проблем в использовании не
+возникнет.")))
+
+    (h3 "Где достать")
+
+    (p "Ноутбук можно достать на Б/У рынке, Авито, Юла, Ebay. Прошить
+Libreboot можно самому. Для самостоятельной прошивки вам понадобится
+программатор и инструкция по перепрошивке BIOS. Проблема в том, что
+эти два процесса сопряжены с рисками, да и в целом достаточно
+времязатратны, потому существуют организации, которые облегчают этот
+процесс.")
+
+    (p "Одна из таких организаций
+— " (a (@ (href "https://minifree.org/")) "MiniFree") ". MiniFree
+берет название из популярного романа антиутопии 1984 и
+расшифровывается как Ministry of Freedom (Министерство Свободы). Эта
+организация была основана главным разработчиком Libreboot, существует
+на его деньги и деньги с покупок ноутбуков. Помимо того, что Minifree
+прошивает Libreboot, магазин предлагает апгрейд RAM и накопителей.")
+
+    (p "Магазин принимает SWIFT-платежи и доставляет при помощи службы
+UPS. UPS — не самая хорошая служба доставки, особенно в РФ. В моем
+опыте ребята задержали заказ на несколько недель + мне пришлось
+заплатить дополнительную плату в размере ~1200 рублей за растаможню
+ноутбука. Но в конце концов всё пришло в целости и сохранности.")
+
+    (h3 "Другие модели")
+
+    (p "X200T достаточно дорогой, а на Б/У рынке еще достаточно
+редкий. Есть альтернативы для ноутбука с Libreboot.")
+
+    (p "Рассмотрите: "
+       (mark "x200") " "
+       (mark "t400") " "
+       (mark "x60") " "
+       (mark "t60"))
+
+    (p "Если вам необязательно наличие Libreboot, то рассмотрите: "
+       (mark "x220") " "
+       (mark "t410") " "
+       (mark "t420"))
+
+    ;;; Luke Smith about choosing Thinkpad
+    (p (@ (class "video"))
+       (iframe
+        (@ (src "https://youtube.com/embed/La3sb5y7e-k"))))
+
+    (h3 "Полезные ссылки")
+
+    (ul
+     (li (a (@ (href "https://libreboot.org/"))
+            "Свободный BIOS/UEFI Libreboot"))
+     (li (a (@ (href "https://libreboot.org/docs/hardware/#list-of-supported-hardware"))
+            "Список устройств с поддержкой Libreboot"))
+     (li (a (@ (href "https://minifree.org/"))
+            "Организация Minifree"))
+     (li (a (@ (href "https://www.truefla.me/free-stuff/used-thinkpad-buyers-guide"))
+            "Гайд по покупке Thinkpad"))
+     (li (a (@ (href "https://www.thinkwiki.org/wiki/ThinkWiki"))
+            "Thinkpad Wiki"))
+     (li (a (@ (href "https://ru.wikipedia.org/wiki/ThinkPad"))
+            "Статья на википедии"))
+     )
+
+    (h3 "Обновление")
+
+    (p "Сейчас (06.05.2019) я использую GNU/GuixSD, Emacs, EXWM (WM в emacs) и Icecat.")
+
+    )))
Index: content/posts/pirogov-o-fp.sxml
===================================================================
--- content/posts/pirogov-o-fp.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/pirogov-o-fp.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,296 @@
+;;; -*- scheme -*-
+
+(use-modules (haunt utils))
+
+`((title . "Алексей Пирогов про ФП")
+  (date . ,(string->date* "2019-03-22 12:00"))
+  (tags "Выдержка" "Hexlet" "ФП")
+  (summary . "Алексей Пирогов провел вебинар на тему «Функциональное
+программирование как парадигма: цели, способы, применимость».")
+  
+  (content
+
+   (p "Алексей Пирогов провел вебинар на тему «Функциональное
+программирование как парадигма: цели, способы, применимость». Вебинар
+был транслирован на YouTube-канале Hexlet, автоматизированной площадке
+обучающей программированию.")
+
+   (p "Алексей Пирогов — хаскеллист, в прошлом питонист. Недавно он
+пополнил ряды преподавателей Hexlet и теперь готовит курс по Python на
+этой площадке. Он сделал мини-курс
+на " (a (@ (href "https://code-basics.ru/languages/python")) "Code-Basics")
+". Имеет канал
+в " (a (@ (href "https://t.me/brain%5Fdump%5Fetc")) "Telegram") " и на "
+(a (@ (href "https://www.youtube.com/channel/UCXk1kxTjZwluYLyijyKVsAA")) "Youtube") ",
+а также он является соорганизатором " (a (@ (href "http://prog.msk.ru/")) "«Клуба Программистов в Москве»")
+". В " (a (@ (href "https://hexlet-ru.slack.com/")) "слак-канале
+Hexlet") " Алексея можно найти под ником @astynax.")
+
+;;; Webinar
+   (p (@ (class "video"))
+      (iframe
+       (@ (src "https://youtube.com/embed/0GX4JRAGEzc"))))
+
+   (p "Этот вебинар рассматривает тему обзорно. Он будет полезен тем,
+   кто не знает, что такое ФП и зачем оно существует или знает о нем
+   недостаточно много. Далее представляю набор ключевых идей с
+   трансляции. Информация в том или ином виде сказана на трансляции.")
+
+
+   (h3 "Что такое ФП")
+
+   (p (i "Функциональное программирование") " — это отделение чистого кода от
+   кода с побочными эффектами.")
+
+(p "Чистые функции похожи на функции из математики. Они возвращают
+   всегда один и тот же результат при одинаковых аргументах. Это их
+   главное свойство. Они не затрагивают все то, что находится за их
+   телом. Не пишут в консоль, не трогают БД, не генерят случайные
+   числа.")
+
+(p "Функция, которая оперирует с “внешним миром”, то есть вне
+   своего тела, производит " (i "побочные эффекты") ". Побочные эффекты,
+   они же сайд-эффекты, это как правило операции ввода-вывода, хождение в
+   сеть, диск. Эти операции возможно делать в небольших участках
+   программы, а логику описывать функционально.")
+
+(p "В языках с единственной доступной парадигмой функционального
+   программирования есть четкое разделение чистого кода от
+   нечистого. Такое разделение всячески поощряется. В большинстве языков
+   с элементами функционального программирования нельзя проверить
+   является ли функция чистой или нет.")
+
+(h3 "Ключевые свойства")
+
+(ul
+ (li "Функции высшего порядка")
+ (li "Иммутабельные структуры данных"))
+
+(p (i "Функции высшего порядка") " — возможность возвращать и передавать
+   функцию в качестве аргумента.")
+
+(p (i "Имутабельные структуры данных") " — данные, которые нельзя изменить
+   на уровне языка. Оперируя над такими данными, мы не можем изменить
+   саму структуру, а можем вернуть новую версию этой
+   структуры. Иммутабельные структуры данных реализованы везде
+   по-разному. В современных компиляторах они оптимизированы и работают
+   быстро.")
+
+(h3 "Чистый код просто:")
+
+(ul
+ (li "Анализировать")
+
+ (p "Самое важное свойство ФП — способность рассуждать о
+    функциях. Человеку легче оперировать с тем, что находится вблизи
+    него. В ФП легче держать весь контекст функции в голове. Не надо
+    думать о глобальных переменных, которые могут быть изменены после
+    вызова функции. Посмотрев тело функции, можно легко понять все, что с
+    ней происходит.")
+
+ (li "Тестировать")
+
+ (p "Тут все просто. Если мы знаем, что функция всегда возвращает
+    одинаковое значение при одинаковых аргументах — значит ее легче
+    тестировать. Не нужно учитывать внешний мир, от которого она может
+    зависеть.")
+
+ (li "Переиспользовать")
+
+ (p "Чистый код легко переиспользовать, потому что мы можем код
+    спокойно копировать. Он не зависит от контекста.")
+
+ (li "Вычислять параллельно и/или конкурентно")
+
+ (p "Большинство проблем при запуске параллельных функций связаны с
+    разделением данных, которые изменяются. Мы вынуждены делать семафоры,
+    локи и так далее, потому что у нас есть процессы, которые могут менять
+    общие данные произвольно.")
+
+ (p "В чистых функциях, работающих с иммутабельными структурами
+    данных нет таких проблем. Мы можем отдать структуру десяти разным
+    процессам и они ее не смогут поменять."))
+
+(h3 "Удобно писать")
+
+(ul
+ 
+ (li "Компиляторы, парсеры, генераторы чего-либо")
+
+ (li "Сложную логику, ложащуюся на DSL (Например Sigma)")
+
+ (li "Высококонкурентный код (Например код на Erlang)")
+
+ (li "GUI (Например React)"))
+
+(h3 "Как научиться")
+
+(p "Чтобы научиться настоящему ФП, нужно изучить Haskell.")
+
+(h3 "Почему Haskell?")
+
+(p "Haskell – чистый функциональный язык, который позволяет изучить
+   ФП как подход и писать идиоматический для ФП код. Есть другой вариант
+   для изучения, например Standart ML, но этот язык мертвый. Haskell же
+   хорош тем, что у него есть живое сообщество. Помимо этого Haskell —
+   статически-типизированный язык, который заодно научит интересному
+   подходу к типам, отличающегося от типов в других языках.")
+
+(p "Функциональное программирование можно изучить в вузе под
+   руководством преподавателя на каком-то другом языке, хоть на
+   Python. Но здесь потребуется именно преподаватель.")
+
+(p "Фишка брать функциональный язык в том, что мы не сможем
+   схалявничать и использовать старые знакомые нам подходы. Уроки,
+   которые мы получим изучив Haskell, могут быть применены в повседневной
+   жизни потом, вне зависимости от языка программирования.")
+
+(h3 "Теория категорий")
+
+(p "Есть такой миф, что в Haskell не стоит лезть, если не знаешь
+   теорию категорий. Это неправда. Я из теории категорий примерно знаю
+   содержание первых двух страниц типичной книги и это мне это не мешает
+   писать production-код на Haskell.")
+
+(p "Теория категорий — это приятная штука для развития мозгов в
+   первую очередь, она даже не про программирование. Она может помочь
+   стать лучше как программист, а может и не помочь.")
+
+
+(h3 "Что еще из языков")
+
+(ul
+ (li "Изучите Clojure (ибо LISP и макросы)")
+
+ (p "Потому что современный живой лисп в функциональной парадигме.")
+
+ (li "Изучите Erlang (ибо акторы)")
+
+ (p "Erlang — не язык, который создавался, чтобы быть функциональным, а создавался для того, чтобы быть надежным. Функциональная парадигма в нем применяется, чтобы создавать устойчивые к отказам программы. Поэтому в языке не очень хорошо с выразительностью.")
+
+ (p "После Erlang можно пописать на Elixir. Он похож на Ruby с рельсами."))
+
+(h3 "Про парадигмы")
+
+(p "Существует мнение, что стоит изучать по одной новой парадигме в
+   год. Изучать их нужно на максимально ярких для этих парадигм
+   языках. Хотим изучить ФП — берем Haskell. Хотим изучить ООП — берем
+   SmallTalk. Хотим изучить Мета-программирование — берем лиспы. Хотим
+   логическое программирование — берем Prolog.")
+
+(p "Какая парадигма лучше всего? Никакая, все парадигмы клевые.")
+
+(p "Изучать новые парадигмы всегда сложно, но это интересно. Чем
+   больше мы сформируем отличных друг от друга навыков, тем будем ценнее
+   вне зависимости от того, что мы будем делать. Это происходит, потому
+   что разные парадигмы позволяют нам бо́льшими способами решить задачу.")
+
+(h3 "Для каких задач не подходит ФП")
+
+(p "Функциональные языки общего назначения являются версиями
+   лямбда-исчислений. Так как мы знаем, что лямбда-исчисление может
+   выразить любую вычислительную задачу, на ФП языке мы можно решить
+   любую задачу.")
+
+(p "Функциональные языки хорошо себя чувствуют в тех областях, где
+   можно использовать много памяти. Потому ФП не подходит для
+   встраиваемых систем и всему тому, что должно быть близко к железу.")
+(h3 "О типизации")
+
+("Лямбда-исчисление как таковое является безтиповым. Все типы — это
+   хитро-сделанные функции в оригинальном лямбда-исчислении.")
+
+(p "Очень круто пописать на типизированных функциональных
+   языках. Если я знаю, что в функцию будут приходить только строчки, а
+   выходить только числа, то это позволяется мне проще рассуждать о
+   функции. Не нужно думать, что придет что-то не то.")
+
+(p "Также круто пописать на динамически-типизированных
+   языках. Например Clojure.")
+
+(h3 "Про работу")
+
+(p "Все люди, которых я знаю, если хотят писать на Haskell, то
+   пишут на Haskell за деньги. Люди, которые ищут отговорки, продолжают
+   писать на чем-то ином. Я в этом убежден. Работа есть.")
+
+(p "Если технология не мертва, значит она кому-то нужна.")
+
+(p " Сейчас, когда можно работать удаленно, найти работу по Haskell
+   не составляет сложности. Если ты вчерашний студент, можно очень круто
+   устроиться. Раз в полгода приходят вакансии от Tesla идти в
+   магистратуру в Штаты, чтобы потом писать на Haskell ПО, которое
+   анализирует метрики приходящие с автомобиля.")
+
+(h3 "Ответы на вопросы")
+
+(h4 "Lisp — функциональный язык")
+
+(p "Это неправда. Лисп — не функциональный язык. Код на лиспе
+   содержит присваивание и измененных структур данных. Это процедурный
+   код.")
+
+(p "SICP — это не книжка по функциональному программированию. Она
+   использует некоторые моменты, свойственные ФП. Это книга про
+   информатику в общем. В самой книге присутствуют термин “Процедура”, а
+   не “Функция”.")
+
+(p "Clojure — это Lisp-подобный язык, но функциональный. Clojure вдохновлялась Lisp’ом на этапе зарождения концепций, но в отличии от него это functional-first язык. Все структуры данных иммутабельные. Разделения на чистые и грязные функции там нет, тем не менее в нем отсутствует практика злоупотреблять побочными эффектами.")
+
+(h4 "Применяются ли ФП-элементы в Python")
+
+(p "Применяются, но в Python принято их избегать
+   исторически. Использование только map, filter, reduce не делает код
+   функциональным. Это синтаксический сахар для пайплайнов, которые их
+   обрабатывают.")
+
+(h4 "ООП vs ФП")
+
+(p "Нельзя сказать что ООП очень сильно противоречит ФП. Они про
+   разное. Они не противоположны, они ортогональны.  Что важнее для
+   создания продукта парадигма языка или библиотеки?")
+
+(p "Библиотеки, конечно же, важны, но приходится и самому писать
+   код. Лучше писать код, понимая, что ты делаешь. Порой сами библиотеки
+   могут быть плохо спроектированы и вам придется самому что-то
+   писать. Лучше иметь возможность смотреть на задачу шире.")
+
+(p "Если вдруг у кого-то работа связана только со склеиванием
+   библиотек и не приходится писать свой код, то не важно какая парадигма
+   будет использована. Но такое происходит редко.")
+
+(h3 "Материалы для изучения")
+(ul
+ (li (a (@ (href "https://www.manning.com/books/exploring-haskell"))
+        "Книга Exploring Haskell"))
+ (li (a (@ (href "https://stepik.org/course/75/"))
+        "Курс по Haskell на Stepic"))
+ (li (a (@ (href "https://www.ohaskell.guide/"))
+        "Книга О Haskell по-человечески")))
+
+(h3 "Задачи")
+(ul
+ (li (a (@ (href "https://www.codewars.com/"))
+        "Codewars"))
+ (li (a (@ (href "http://www.4clojure.com/"))
+        "4clojure")))
+
+(h3 "Другие ссылки")
+
+(ul
+ (li (a (@ (href "https://www.meetup.com/Moscow-Clojure-Script-Meetup/"))
+        "Clojure DOJO"))
+ (li (a (@ (href "https://t.me/haskellru"))
+        "Сообщество Haskell в Telegram")))
+
+(h3 "Заключение")
+
+(p "На стриме присутствовали звуковые искажения, которые порой
+   останавливали повествование Алексея. Надеюсь что-нибудь с этим
+   сделают. Помимо этого у Натальи, представляющей докладчика ведущей, на
+   записи присутствовало эхо.")
+
+(p "Тем не менее спасибо Алексею и команде Hexlet за
+   вебинар. Человека для создания курса по питону наверное лучше не
+   найти, с нетерпением жду нового материала от него. Было бы круто
+   дополнить раздел с книгами.")))
Index: content/posts/reproducible-computing-environments.sxml
===================================================================
--- content/posts/reproducible-computing-environments.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/reproducible-computing-environments.sxml	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,85 @@
+;;; -*- scheme -*-
+
+(use-modules (haunt utils))
+
+`((title . "Что если лишиться компьютера")
+  (date . ,(string->date* "2019-09-25 23:00"))
+  (tags "Информационная безопасность")
+  (summary . "Размышления о воспроизводимых вычислительных окружениях")
+  
+  (content
+   (p "Это вольный перевод. ")
+
+   (p
+    (b "Автор: ")
+    (a (@ (href
+           "https://ambrevar.xyz/reproducible-computing-environments/index.html"))
+       "Pierre Neidhardt")
+    (br)
+    (b "Оригинальная статья: ")
+    (a (@ (href
+           "https://ambrevar.xyz/reproducible-computing-environments/index.html"))
+       "What if you lost your computer just now?"))
+   
+   (p "Размышления о воспроизводимых вычислительных окружениях")
+
+   (h3 "Скрывающаяся проблема")
+   
+   (p "Несколько лет назад моя подруга, позитивный и довольно
+беспечный человек, разбудила меня однажды утром и попросила о помощи:
+Она горько плакала из-за утери смартфона. Было уже поздно, а она
+только в этот момент осознала какие ужасные последствия были у этого
+события: ее банковский аккаунт, контакты, работа, паспортные данные,
+подпись, всё это было в смартфоне и теперь доступно счастливчику,
+который нашел его день назад.")
+
+   (p "Оглядываясь назад, это может показаться очевидным, и было бы
+правильнее спросить: «Зачем вообще ставить себя в такую шаткую
+ситуацию. Надо было принять меры предосторожности, ведь так?»")
+
+   (p "Выходит, что не так очевидно для большинства из нас. В самом
+деле, присядьте и подумайте вот о чём:")
+
+   (p (quote "«Что если я потеряю свой компьютер (или смартфон, или
+любое другое устройство с персональными данными) прямо сейчас? Каковы
+были бы последствия?»"))
+
+   (p "Эти последствия становятся явны только тогда, когда мы с ними
+сталкиваемся. Потому вот список того, что вы предположительно можете
+потерять:")
+
+   (ul
+    (li "Учетные данные (логин и пароль от веб-сайта)")
+    (li "Деньги (учетные данные банка или кошелек с криптовалютой)")
+    (li "Личные данные (фотографии и видео)")
+    (li "Рабочие данные")
+    (li "Контакты")
+    (li "Переписки (email)")
+    (li "И скорее всего что-то еще"))
+
+   (p "Потеря может быть следующих категорий:")
+
+   (ul
+    (li "Уничтожение. Данных нет. Вопрос: «Можете ли вы точно знать
+какие файлы были уничтожены?»")
+    (li "Кража. Кто-то имеет доступ к вашим данным, возможно это
+учетные данные, личные фотографии, деньги и т.д.")
+    (li "Неизвестно. Вы не знаете, что произошло с устройством. Данные
+на нем могли быть уничтожены или украдены, как сказано выше. Незнание
+может сильно обеспокоить. Предполагайте худшее: Кража."))
+
+   (p "В конце-концов она нашла свой телефон под кроватью. Счастливый
+конец, который преподал небольшой урок... Или не преподал? Я не думаю,
+что она приняла меры предосторожности после. Но кто ее может винить?
+Пока ты не технический специалист достаточно сложно даже начать с
+этими предосторожностями.")
+
+   (p "Приложенные усилия того не стоят, нужно ли нам тогда вообще об
+этом тревожиться? Или лучше принять всё таким каким есть?")
+
+   (h3 "Это не произойдет со мной!")
+
+   (p "Мы естественно так подумаем. Это распространенное заблуждение и
+мы не должны обманывать себя, никто не защищен от краж или потерь.")
+
+   ))
Index: content/posts/test.org
===================================================================
--- content/posts/test.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/test.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,5 @@
+#+TITLE: Test
+
+* Test
+
+Meow >^.^<
Index: content/posts/web.cm
===================================================================
--- content/posts/web.cm	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/posts/web.cm	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,47 @@
+title: Веб: Вредные советы
+date: 2019-11-18 1:00
+tags: web, javascript
+---
+
+
+* Использование SPA или отсутствие функциональности без Javascript
+* Отсутствие функциональности через веб и перенаправление на "мобильное приложение"
+* Использование HTTP вместо HTTPS
+* Использование медленного интерпретируемого языка программирования
+для сервера с ловлей ошибок в рантайме
+* Ответ сервера дольше 10ms
+* Несоблюдение стандартов W3C
+* Минимизирование и обфусцирование Javascript и CSS
+* Низкое качество клиентского кода
+* Пренебрежение семантикой HTML (излишние использование тегов,
+неподходящие теги)
+* Не использование свойства каскадности каскадных стилей
+* Бандлы c Javascript весят больше мегабайта
+* Интенсивное использование CPU/GPU при помощи javascript и различных
+css-прибамбасов (подтормаживание прорисовки)
+* Подгрузка изображения при помощи Javascript
+* Подгрузка текста при помощи Javascript (gitlab подгружает код при помощи javascript)
+* Подгрузка при помощи Javascript других страницы веб-сайта
+* Использование запросов на сайты других доменов от третьих лиц (также
+использование CDN)
+* Полное игнорирование лицензий, используемого кода
+* Подгрузка кастомных шрифтов
+* Отсутствие функциональности при работе в текстовом браузере
+* Отсутствие функциональности для слабослышащих при помощи голосового
+синтезатора
+* Отсутствие функциональности для слабовидящих из-за неконтрастной
+цветовой темы или отсутствие отдельного раздела для слабовидящих
+* Использование нелицензируемых материалов на самом сайте
+* Использование cookie и обязательное уведомление о нём
+* Переопределение стандартных элементов интерфейса системы
+* Капча, не работающая без Javascript
+* Отсутствие анонимного использования ресурса (для любого действия необходима авторизация)
+* Отсутствие возможности удаления аккаунта через веб-интерфейс
+* Отсутствие политики обработки данных
+* Использование определения географического положения при помощи IP
+* Использование уведомлений (есть в API браузера)
+* Использование закрытых кодеков для видео и аудио, а также использование DRM систем
+* Авторизация через сторонний ресурс (при удалении аккаунта на
+  стороннем ресурсе - теряется аккаунт на вашем)
+* Формы, не работающие без javascript (например поиск)
+* Использование смс / номера мобильного телефона для авторизации
Index: content/sitemap.org
===================================================================
--- content/sitemap.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ content/sitemap.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,8 @@
+#+TITLE: @w96k
+
+- [[file:about.org][about]]
+- [[file:index.org][@w96k]]
+- [[file:404.org][404]]
+- posts
+  - [[file:posts/libreboot-x200t.org][libreboot-x200t]]
+  - [[file:posts/test.org][test]]
Index: s/custom.css
===================================================================
--- css/custom.css	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,68 +1,0 @@
-body {
-    
-}
-
-article {
-    max-width: calc(70ch + 2em);
-    border-radius: 0.25em;
-    padding: 1em;
-    padding-bottom: 1.5em;
-    margin: 1em 0;
-    background: #fefefe;
-    box-shadow: 0 1px 3px rgba(0,0,0,.25);
-    text-align: justify;
-    hyphens: auto;
-}
-
-#about {
-    text-align: left;
-}
-
-article h1:first-child,
-article h2:first-child,
-article h3:first-child,
-article h4:first-child,
-article h5:first-child,
-article h6:first-child {
-    margin-top: 0;
-    padding: 0;
-}
-
-.navbar {
-    background: #fefefe;
-    box-shadow: 0 1px 3px rgba(0,0,0,.1);
-    border: 0;
-}
-
-.navbar .button {
-    background: #fefefe;
-}
-
-/* 16:9 */
-.video {
-    padding-top: 56.25%;
-    position: relative;
-    width: calc(100% - 1em);
-}
-
-iframe {
-    width: 100%;
-    height: 100%;
-    position:  absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    right: 0;
-}
-
-.cover {
-    margin: 0.5em 0;
-    border: 1px solid rgba(0,0,0,.3);
-    border-radius: 0.1em;
-}
-
-#youmu {
-    position: relative;
-    top: 1em;
-    max-width: 100%;
-}
Index: s/mini.css
===================================================================
--- css/mini.css	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,1 +1,0 @@
-﻿:root{--fore-color:#111;--secondary-fore-color:#444;--back-color:#f8f8f8;--secondary-back-color:#f0f0f0;--blockquote-color:#f57c00;--pre-color:#1565c0;--border-color:#aaa;--secondary-border-color:#ddd;--heading-ratio:1.19;--universal-margin:.5rem;--universal-padding:.5rem;--universal-border-radius:.125rem;--a-link-color:#0277bd;--a-visited-color:#01579b}html{font-size:16px}a,b,del,em,i,ins,q,span,strong,u{font-size:1em}html,*{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, sans-serif;line-height:1.4;-webkit-text-size-adjust:100%}*{font-size:1rem}body{margin:0;color:var(--fore-color);background:var(--back-color)}details{display:block}summary{display:list-item}abbr[title]{border-bottom:none;text-decoration:underline dotted}input{overflow:visible}img{max-width:100%;height:auto}h1,h2,h3,h4,h5,h6{line-height:1.2;margin:calc(1.5 * var(--universal-margin)) var(--universal-margin);font-weight:500}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:var(--secondary-fore-color);display:block;margin-top:-.25rem}h1{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio))}h2{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio))}h3{font-size:calc(1rem * var(--heading-ratio) * var(--heading-ratio))}h4{font-size:calc(1rem * var(--heading-ratio))}h5{font-size:1rem}h6{font-size:calc(1rem / var(--heading-ratio))}p{margin:var(--universal-margin)}ol,ul{margin:var(--universal-margin);padding-left:calc(2 * var(--universal-margin))}b,strong{font-weight:700}hr{box-sizing:content-box;border:0;line-height:1.25em;margin:var(--universal-margin);height:.0625rem;background:linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent)}blockquote{display:block;position:relative;font-style:italic;color:var(--secondary-fore-color);margin:var(--universal-margin);padding:calc(3 * var(--universal-padding));border:.0625rem solid var(--secondary-border-color);border-left:.375rem solid var(--blockquote-color);border-radius:0 var(--universal-border-radius) var(--universal-border-radius) 0}blockquote:before{position:absolute;top:calc(0rem - var(--universal-padding));left:0;font-family:sans-serif;font-size:3rem;font-weight:700;content:"\201c";color:var(--blockquote-color)}blockquote[cite]:after{font-style:normal;font-size:.75em;font-weight:700;content:"\a—  " attr(cite);white-space:pre}code,kbd,pre,samp{font-family:Menlo, Consolas, monospace;font-size:.85em}code{background:var(--secondary-back-color);border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}kbd{background:var(--fore-color);color:var(--back-color);border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}pre{overflow:auto;background:var(--secondary-back-color);padding:calc(1.5 * var(--universal-padding));margin:var(--universal-margin);border:.0625rem solid var(--secondary-border-color);border-left:.25rem solid var(--pre-color);border-radius:0 var(--universal-border-radius) var(--universal-border-radius) 0}sup,sub,code,kbd{line-height:0;position:relative;vertical-align:baseline}small,sup,sub,figcaption{font-size:.75em}sup{top:-.5em}sub{bottom:-.25em}figure{margin:var(--universal-margin)}figcaption{color:var(--secondary-fore-color)}a{text-decoration:none}a:link{color:var(--a-link-color)}a:visited{color:var(--a-visited-color)}a:hover,a:focus{text-decoration:underline}.container{margin:0 auto;padding:0 calc(1.5 * var(--universal-padding))}.row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-flow:row wrap}.col-sm,[class^='col-sm-'],[class^='col-sm-offset-'],.row[class*='cols-sm-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-sm,.row.cols-sm>*{max-width:100%;flex-grow:1;flex-basis:0}.col-sm-1,.row.cols-sm-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-sm-offset-0{margin-left:0}.col-sm-2,.row.cols-sm-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-3,.row.cols-sm-3>*{max-width:25%;flex-basis:25%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-4,.row.cols-sm-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-sm-offset-3{margin-left:25%}.col-sm-5,.row.cols-sm-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-6,.row.cols-sm-6>*{max-width:50%;flex-basis:50%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-7,.row.cols-sm-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-sm-offset-6{margin-left:50%}.col-sm-8,.row.cols-sm-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-9,.row.cols-sm-9>*{max-width:75%;flex-basis:75%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-10,.row.cols-sm-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-sm-offset-9{margin-left:75%}.col-sm-11,.row.cols-sm-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-12,.row.cols-sm-12>*{max-width:100%;flex-basis:100%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-normal{order:initial}.col-sm-first{order:-999}.col-sm-last{order:999}@media screen and (min-width: 768px){.col-md,[class^='col-md-'],[class^='col-md-offset-'],.row[class*='cols-md-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-md,.row.cols-md>*{max-width:100%;flex-grow:1;flex-basis:0}.col-md-1,.row.cols-md-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-md-offset-0{margin-left:0}.col-md-2,.row.cols-md-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-md-offset-1{margin-left:8.33333%}.col-md-3,.row.cols-md-3>*{max-width:25%;flex-basis:25%}.col-md-offset-2{margin-left:16.66667%}.col-md-4,.row.cols-md-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-md-offset-3{margin-left:25%}.col-md-5,.row.cols-md-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-md-offset-4{margin-left:33.33333%}.col-md-6,.row.cols-md-6>*{max-width:50%;flex-basis:50%}.col-md-offset-5{margin-left:41.66667%}.col-md-7,.row.cols-md-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-md-offset-6{margin-left:50%}.col-md-8,.row.cols-md-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-md-offset-7{margin-left:58.33333%}.col-md-9,.row.cols-md-9>*{max-width:75%;flex-basis:75%}.col-md-offset-8{margin-left:66.66667%}.col-md-10,.row.cols-md-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-md-offset-9{margin-left:75%}.col-md-11,.row.cols-md-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-md-offset-10{margin-left:83.33333%}.col-md-12,.row.cols-md-12>*{max-width:100%;flex-basis:100%}.col-md-offset-11{margin-left:91.66667%}.col-md-normal{order:initial}.col-md-first{order:-999}.col-md-last{order:999}}@media screen and (min-width: 1280px){.col-lg,[class^='col-lg-'],[class^='col-lg-offset-'],.row[class*='cols-lg-']>*{box-sizing:border-box;flex:0 0 auto;padding:0 calc(var(--universal-padding) / 2)}.col-lg,.row.cols-lg>*{max-width:100%;flex-grow:1;flex-basis:0}.col-lg-1,.row.cols-lg-1>*{max-width:8.33333%;flex-basis:8.33333%}.col-lg-offset-0{margin-left:0}.col-lg-2,.row.cols-lg-2>*{max-width:16.66667%;flex-basis:16.66667%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-3,.row.cols-lg-3>*{max-width:25%;flex-basis:25%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-4,.row.cols-lg-4>*{max-width:33.33333%;flex-basis:33.33333%}.col-lg-offset-3{margin-left:25%}.col-lg-5,.row.cols-lg-5>*{max-width:41.66667%;flex-basis:41.66667%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-6,.row.cols-lg-6>*{max-width:50%;flex-basis:50%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-7,.row.cols-lg-7>*{max-width:58.33333%;flex-basis:58.33333%}.col-lg-offset-6{margin-left:50%}.col-lg-8,.row.cols-lg-8>*{max-width:66.66667%;flex-basis:66.66667%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-9,.row.cols-lg-9>*{max-width:75%;flex-basis:75%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-10,.row.cols-lg-10>*{max-width:83.33333%;flex-basis:83.33333%}.col-lg-offset-9{margin-left:75%}.col-lg-11,.row.cols-lg-11>*{max-width:91.66667%;flex-basis:91.66667%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-12,.row.cols-lg-12>*{max-width:100%;flex-basis:100%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-normal{order:initial}.col-lg-first{order:-999}.col-lg-last{order:999}}:root{--card-back-color:#f8f8f8;--card-fore-color:#111;--card-border-color:#ddd}.card{display:flex;flex-direction:column;justify-content:space-between;align-self:center;position:relative;width:100%;background:var(--card-back-color);color:var(--card-fore-color);border:.0625rem solid var(--card-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin);overflow:hidden}@media screen and (min-width: 320px){.card{max-width:320px}}.card>.section{background:var(--card-back-color);color:var(--card-fore-color);box-sizing:border-box;margin:0;border:0;border-radius:0;border-bottom:.0625rem solid var(--card-border-color);padding:var(--universal-padding);width:100%}.card>.section.media{height:200px;padding:0;-o-object-fit:cover;object-fit:cover}.card>.section:last-child{border-bottom:0}@media screen and (min-width: 240px){.card.small{max-width:240px}}@media screen and (min-width: 480px){.card.large{max-width:480px}}.card.fluid{max-width:100%;width:auto}.card.warning{--card-back-color:#ffca28;--card-border-color:#e8b825}.card.error{--card-back-color:#b71c1c;--card-fore-color:#f8f8f8;--card-border-color:#a71a1a}.card>.section.dark{--card-back-color:#e0e0e0}.card>.section.double-padded{padding:calc(1.5 * var(--universal-padding))}:root{--form-back-color:#f0f0f0;--form-fore-color:#111;--form-border-color:#ddd;--input-back-color:#f8f8f8;--input-fore-color:#111;--input-border-color:#ddd;--input-focus-color:#0288d1;--input-invalid-color:#d32f2f;--button-back-color:#e2e2e2;--button-hover-back-color:#dcdcdc;--button-fore-color:#212121;--button-border-color:rgba(0,0,0,0);--button-hover-border-color:rgba(0,0,0,0);--button-group-border-color:rgba(124,124,124,0.54)}form{background:var(--form-back-color);color:var(--form-fore-color);border:.0625rem solid var(--form-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin);padding:calc(2 * var(--universal-padding)) var(--universal-padding)}fieldset{border:.0625rem solid var(--form-border-color);border-radius:var(--universal-border-radius);margin:calc(var(--universal-margin) / 4);padding:var(--universal-padding)}legend{box-sizing:border-box;display:table;max-width:100%;white-space:normal;font-weight:700;padding:calc(var(--universal-padding) / 2)}label{padding:calc(var(--universal-padding) / 2) var(--universal-padding)}.input-group{display:inline-block}.input-group.fluid{display:flex;align-items:center;justify-content:center}.input-group.fluid>input{max-width:100%;flex-grow:1;flex-basis:0px}@media screen and (max-width: 767px){.input-group.fluid{align-items:stretch;flex-direction:column}}.input-group.vertical{display:flex;align-items:stretch;flex-direction:column}.input-group.vertical>input{max-width:100%;flex-grow:1;flex-basis:0px}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input:not([type]),[type="text"],[type="email"],[type="number"],[type="search"],[type="password"],[type="url"],[type="tel"],[type="checkbox"],[type="radio"],textarea,select{box-sizing:border-box;background:var(--input-back-color);color:var(--input-fore-color);border:.0625rem solid var(--input-border-color);border-radius:var(--universal-border-radius);margin:calc(var(--universal-margin) / 2);padding:var(--universal-padding) calc(1.5 * var(--universal-padding))}input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover,input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus,textarea:hover,textarea:focus,select:hover,select:focus{border-color:var(--input-focus-color);box-shadow:none}input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid,input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid,textarea:invalid,textarea:focus:invalid,select:invalid,select:focus:invalid{border-color:var(--input-invalid-color);box-shadow:none}input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly],textarea[readonly],select[readonly]{background:var(--secondary-back-color)}select{max-width:100%}option{overflow:hidden;text-overflow:ellipsis}[type="checkbox"],[type="radio"]{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;height:calc(1rem + var(--universal-padding) / 2);width:calc(1rem + var(--universal-padding) / 2);vertical-align:text-bottom;padding:0;flex-basis:calc(1rem + var(--universal-padding) / 2) !important;flex-grow:0 !important}[type="checkbox"]:checked:before,[type="radio"]:checked:before{position:absolute}[type="checkbox"]:checked:before{content:'\2713';font-family:sans-serif;font-size:calc(1rem + var(--universal-padding) / 2);top:calc(0rem - var(--universal-padding));left:calc(var(--universal-padding) / 4)}[type="radio"]{border-radius:100%}[type="radio"]:checked:before{border-radius:100%;content:'';top:calc(.0625rem + var(--universal-padding) / 2);left:calc(.0625rem + var(--universal-padding) / 2);background:var(--input-fore-color);width:0.5rem;height:0.5rem}:placeholder-shown{color:var(--input-fore-color)}::-ms-placeholder{color:var(--input-fore-color);opacity:0.54}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button{overflow:visible;text-transform:none}button,[type="button"],[type="submit"],[type="reset"],a.button,label.button,.button,a[role="button"],label[role="button"],[role="button"]{display:inline-block;background:var(--button-back-color);color:var(--button-fore-color);border:.0625rem solid var(--button-border-color);border-radius:var(--universal-border-radius);padding:var(--universal-padding) calc(1.5 * var(--universal-padding));margin:var(--universal-margin);text-decoration:none;cursor:pointer;transition:background 0.3s}button:hover,button:focus,[type="button"]:hover,[type="button"]:focus,[type="submit"]:hover,[type="submit"]:focus,[type="reset"]:hover,[type="reset"]:focus,a.button:hover,a.button:focus,label.button:hover,label.button:focus,.button:hover,.button:focus,a[role="button"]:hover,a[role="button"]:focus,label[role="button"]:hover,label[role="button"]:focus,[role="button"]:hover,[role="button"]:focus{background:var(--button-hover-back-color);border-color:var(--button-hover-border-color)}input:disabled,input[disabled],textarea:disabled,textarea[disabled],select:disabled,select[disabled],button:disabled,button[disabled],.button:disabled,.button[disabled],[role="button"]:disabled,[role="button"][disabled]{cursor:not-allowed;opacity:.75}.button-group{display:flex;border:.0625rem solid var(--button-group-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin)}.button-group>button,.button-group [type="button"],.button-group>[type="submit"],.button-group>[type="reset"],.button-group>.button,.button-group>[role="button"]{margin:0;max-width:100%;flex:1 1 auto;text-align:center;border:0;border-radius:0;box-shadow:none}.button-group>:not(:first-child){border-left:.0625rem solid var(--button-group-border-color)}@media screen and (max-width: 767px){.button-group{flex-direction:column}.button-group>:not(:first-child){border:0;border-top:.0625rem solid var(--button-group-border-color)}}button.primary,[type="button"].primary,[type="submit"].primary,[type="reset"].primary,.button.primary,[role="button"].primary{--button-back-color:#1976d2;--button-fore-color:#f8f8f8}button.primary:hover,button.primary:focus,[type="button"].primary:hover,[type="button"].primary:focus,[type="submit"].primary:hover,[type="submit"].primary:focus,[type="reset"].primary:hover,[type="reset"].primary:focus,.button.primary:hover,.button.primary:focus,[role="button"].primary:hover,[role="button"].primary:focus{--button-hover-back-color:#1565c0}button.secondary,[type="button"].secondary,[type="submit"].secondary,[type="reset"].secondary,.button.secondary,[role="button"].secondary{--button-back-color:#d32f2f;--button-fore-color:#f8f8f8}button.secondary:hover,button.secondary:focus,[type="button"].secondary:hover,[type="button"].secondary:focus,[type="submit"].secondary:hover,[type="submit"].secondary:focus,[type="reset"].secondary:hover,[type="reset"].secondary:focus,.button.secondary:hover,.button.secondary:focus,[role="button"].secondary:hover,[role="button"].secondary:focus{--button-hover-back-color:#c62828}button.tertiary,[type="button"].tertiary,[type="submit"].tertiary,[type="reset"].tertiary,.button.tertiary,[role="button"].tertiary{--button-back-color:#308732;--button-fore-color:#f8f8f8}button.tertiary:hover,button.tertiary:focus,[type="button"].tertiary:hover,[type="button"].tertiary:focus,[type="submit"].tertiary:hover,[type="submit"].tertiary:focus,[type="reset"].tertiary:hover,[type="reset"].tertiary:focus,.button.tertiary:hover,.button.tertiary:focus,[role="button"].tertiary:hover,[role="button"].tertiary:focus{--button-hover-back-color:#277529}button.inverse,[type="button"].inverse,[type="submit"].inverse,[type="reset"].inverse,.button.inverse,[role="button"].inverse{--button-back-color:#212121;--button-fore-color:#f8f8f8}button.inverse:hover,button.inverse:focus,[type="button"].inverse:hover,[type="button"].inverse:focus,[type="submit"].inverse:hover,[type="submit"].inverse:focus,[type="reset"].inverse:hover,[type="reset"].inverse:focus,.button.inverse:hover,.button.inverse:focus,[role="button"].inverse:hover,[role="button"].inverse:focus{--button-hover-back-color:#111}button.small,[type="button"].small,[type="submit"].small,[type="reset"].small,.button.small,[role="button"].small{padding:calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding));margin:var(--universal-margin)}button.large,[type="button"].large,[type="submit"].large,[type="reset"].large,.button.large,[role="button"].large{padding:calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding));margin:var(--universal-margin)}:root{--header-back-color:#f8f8f8;--header-hover-back-color:#f0f0f0;--header-fore-color:#444;--header-border-color:#ddd;--nav-back-color:#f8f8f8;--nav-hover-back-color:#f0f0f0;--nav-fore-color:#444;--nav-border-color:#ddd;--nav-link-color:#0277bd;--footer-fore-color:#444;--footer-back-color:#f8f8f8;--footer-border-color:#ddd;--footer-link-color:#0277bd;--drawer-back-color:#f8f8f8;--drawer-hover-back-color:#f0f0f0;--drawer-border-color:#ddd;--drawer-close-color:#444}header{height:3.1875rem;background:var(--header-back-color);color:var(--header-fore-color);border-bottom:.0625rem solid var(--header-border-color);padding:calc(var(--universal-padding) / 4) 0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}header.row{box-sizing:content-box}header .logo{color:var(--header-fore-color);font-size:1.75rem;padding:var(--universal-padding) calc(2 * var(--universal-padding));text-decoration:none}header button,header [type="button"],header .button,header [role="button"]{box-sizing:border-box;position:relative;top:calc(0rem - var(--universal-padding) / 4);height:calc(3.1875rem + var(--universal-padding) / 2);background:var(--header-back-color);line-height:calc(3.1875rem - var(--universal-padding) * 1.5);text-align:center;color:var(--header-fore-color);border:0;border-radius:0;margin:0}header button:hover,header button:focus,header [type="button"]:hover,header [type="button"]:focus,header .button:hover,header .button:focus,header [role="button"]:hover,header [role="button"]:focus{background:var(--header-hover-back-color)}nav{background:var(--nav-back-color);color:var(--nav-fore-color);border:.0625rem solid var(--nav-border-color);border-radius:var(--universal-border-radius);margin:var(--universal-margin)}nav *{padding:var(--universal-padding) calc(1.5 * var(--universal-padding))}nav a,nav a:visited{display:block;color:var(--nav-link-color);border-radius:var(--universal-border-radius);transition:background 0.3s}nav a:hover,nav a:focus,nav a:visited:hover,nav a:visited:focus{text-decoration:none;background:var(--nav-hover-back-color)}nav .sublink-1{position:relative;margin-left:calc(2 * var(--universal-padding))}nav .sublink-1:before{position:absolute;left:calc(var(--universal-padding) - 1 * var(--universal-padding));top:-.0625rem;content:'';height:100%;border:.0625rem solid var(--nav-border-color);border-left:0}nav .sublink-2{position:relative;margin-left:calc(4 * var(--universal-padding))}nav .sublink-2:before{position:absolute;left:calc(var(--universal-padding) - 3 * var(--universal-padding));top:-.0625rem;content:'';height:100%;border:.0625rem solid var(--nav-border-color);border-left:0}footer{background:var(--footer-back-color);color:var(--footer-fore-color);border-top:.0625rem solid var(--footer-border-color);padding:calc(2 * var(--universal-padding)) var(--universal-padding);font-size:.875rem}footer a,footer a:visited{color:var(--footer-link-color)}header.sticky{position:-webkit-sticky;position:sticky;z-index:1101;top:0}footer.sticky{position:-webkit-sticky;position:sticky;z-index:1101;bottom:0}.drawer-toggle:before{display:inline-block;position:relative;vertical-align:bottom;content:'\00a0\2261\00a0';font-family:sans-serif;font-size:1.5em}@media screen and (min-width: 768px){.drawer-toggle:not(.persistent){display:none}}[type="checkbox"].drawer{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}[type="checkbox"].drawer+*{display:block;box-sizing:border-box;position:fixed;top:0;width:320px;height:100vh;overflow-y:auto;background:var(--drawer-back-color);border:.0625rem solid var(--drawer-border-color);border-radius:0;margin:0;z-index:1110;right:-320px;transition:right 0.3s}[type="checkbox"].drawer+* .drawer-close{position:absolute;top:var(--universal-margin);right:var(--universal-margin);z-index:1111;width:2rem;height:2rem;border-radius:var(--universal-border-radius);padding:var(--universal-padding);margin:0;cursor:pointer;transition:background 0.3s}[type="checkbox"].drawer+* .drawer-close:before{display:block;content:'\00D7';color:var(--drawer-close-color);position:relative;font-family:sans-serif;font-size:2rem;line-height:1;text-align:center}[type="checkbox"].drawer+* .drawer-close:hover,[type="checkbox"].drawer+* .drawer-close:focus{background:var(--drawer-hover-back-color)}@media screen and (max-width: 320px){[type="checkbox"].drawer+*{width:100%}}[type="checkbox"].drawer:checked+*{right:0}@media screen and (min-width: 768px){[type="checkbox"].drawer:not(.persistent)+*{position:static;height:100%;z-index:1100}[type="checkbox"].drawer:not(.persistent)+* .drawer-close{display:none}}:root{--table-border-color:#aaa;--table-border-separator-color:#666;--table-head-back-color:#e6e6e6;--table-head-fore-color:#111;--table-body-back-color:#f8f8f8;--table-body-fore-color:#111;--table-body-alt-back-color:#eee}table{border-collapse:separate;border-spacing:0;margin:0;display:flex;flex:0 1 auto;flex-flow:row wrap;padding:var(--universal-padding);padding-top:0}table caption{font-size:1.5rem;margin:calc(2 * var(--universal-margin)) 0;max-width:100%;flex:0 0 100%}table thead,table tbody{display:flex;flex-flow:row wrap;border:.0625rem solid var(--table-border-color)}table thead{z-index:999;border-radius:var(--universal-border-radius) var(--universal-border-radius) 0 0;border-bottom:.0625rem solid var(--table-border-separator-color)}table tbody{border-top:0;margin-top:calc(0 - var(--universal-margin));border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}table tr{display:flex;padding:0}table th,table td{padding:calc(2 * var(--universal-padding))}table th{text-align:left;background:var(--table-head-back-color);color:var(--table-head-fore-color)}table td{background:var(--table-body-back-color);color:var(--table-body-fore-color);border-top:.0625rem solid var(--table-border-color)}table:not(.horizontal){overflow:auto;max-height:400px}table:not(.horizontal) thead,table:not(.horizontal) tbody{max-width:100%;flex:0 0 100%}table:not(.horizontal) tr{flex-flow:row wrap;flex:0 0 100%}table:not(.horizontal) th,table:not(.horizontal) td{flex:1 0 0%;overflow:hidden;text-overflow:ellipsis}table:not(.horizontal) thead{position:sticky;top:0}table:not(.horizontal) tbody tr:first-child td{border-top:0}table.horizontal{border:0}table.horizontal thead,table.horizontal tbody{border:0;flex:.2 0 0;flex-flow:row nowrap}table.horizontal tbody{overflow:auto;justify-content:space-between;flex:.8 0 0;margin-left:0;padding-bottom:calc(var(--universal-padding) / 4)}table.horizontal tr{flex-direction:column;flex:1 0 auto}table.horizontal th,table.horizontal td{width:auto;border:0;border-bottom:.0625rem solid var(--table-border-color)}table.horizontal th:not(:first-child),table.horizontal td:not(:first-child){border-top:0}table.horizontal th{text-align:right;border-left:.0625rem solid var(--table-border-color);border-right:.0625rem solid var(--table-border-separator-color)}table.horizontal thead tr:first-child{padding-left:0}table.horizontal th:first-child,table.horizontal td:first-child{border-top:.0625rem solid var(--table-border-color)}table.horizontal tbody tr:last-child td{border-right:.0625rem solid var(--table-border-color)}table.horizontal tbody tr:last-child td:first-child{border-top-right-radius:0.25rem}table.horizontal tbody tr:last-child td:last-child{border-bottom-right-radius:0.25rem}table.horizontal thead tr:first-child th:first-child{border-top-left-radius:0.25rem}table.horizontal thead tr:first-child th:last-child{border-bottom-left-radius:0.25rem}@media screen and (max-width: 767px){table,table.horizontal{border-collapse:collapse;border:0;width:100%;display:table}table thead,table th,table.horizontal thead,table.horizontal th{border:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}table tbody,table.horizontal tbody{border:0;display:table-row-group}table tr,table.horizontal tr{display:block;border:.0625rem solid var(--table-border-color);border-radius:var(--universal-border-radius);background:#fafafa;padding:var(--universal-padding);margin:var(--universal-margin);margin-bottom:calc(2 * var(--universal-margin))}table th,table td,table.horizontal th,table.horizontal td{width:auto}table td,table.horizontal td{display:block;border:0;text-align:right}table td:before,table.horizontal td:before{content:attr(data-label);float:left;font-weight:600}table th:first-child,table td:first-child,table.horizontal th:first-child,table.horizontal td:first-child{border-top:0}table tbody tr:last-child td,table.horizontal tbody tr:last-child td{border-right:0}}:root{--table-body-alt-back-color:#eee}table.striped tr:nth-of-type(2n)>td{background:var(--table-body-alt-back-color)}@media screen and (max-width: 768px){table.striped tr:nth-of-type(2n){background:var(--table-body-alt-back-color)}}:root{--table-body-hover-back-color:#90caf9}table.hoverable tr:hover,table.hoverable tr:hover>td,table.hoverable tr:focus,table.hoverable tr:focus>td{background:var(--table-body-hover-back-color)}@media screen and (max-width: 768px){table.hoverable tr:hover,table.hoverable tr:hover>td,table.hoverable tr:focus,table.hoverable tr:focus>td{background:var(--table-body-hover-back-color)}}:root{--mark-back-color:#0277bd;--mark-fore-color:#fafafa}mark{background:var(--mark-back-color);color:var(--mark-fore-color);font-size:.95em;line-height:1em;border-radius:var(--universal-border-radius);padding:calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2)}mark.inline-block{display:inline-block;font-size:1em;line-height:1.4;padding:calc(var(--universal-padding) / 2) var(--universal-padding)}:root{--toast-back-color:#424242;--toast-fore-color:#fafafa}.toast{position:fixed;bottom:calc(var(--universal-margin) * 3);left:50%;transform:translate(-50%, -50%);z-index:1111;color:var(--toast-fore-color);background:var(--toast-back-color);border-radius:calc(var(--universal-border-radius) * 16);padding:var(--universal-padding) calc(var(--universal-padding) * 3)}:root{--tooltip-back-color:#212121;--tooltip-fore-color:#fafafa}.tooltip{position:relative;display:inline-block}.tooltip:before,.tooltip:after{position:absolute;opacity:0;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);transition:all 0.3s;z-index:1010;left:50%}.tooltip:not(.bottom):before,.tooltip:not(.bottom):after{bottom:75%}.tooltip.bottom:before,.tooltip.bottom:after{top:75%}.tooltip:hover:before,.tooltip:hover:after,.tooltip:focus:before,.tooltip:focus:after{opacity:1;clip:auto;-webkit-clip-path:inset(0%);clip-path:inset(0%)}.tooltip:before{content:'';background:transparent;border:var(--universal-margin) solid transparent;left:calc(50% - var(--universal-margin))}.tooltip:not(.bottom):before{border-top-color:#212121}.tooltip.bottom:before{border-bottom-color:#212121}.tooltip:after{content:attr(aria-label);color:var(--tooltip-fore-color);background:var(--tooltip-back-color);border-radius:var(--universal-border-radius);padding:var(--universal-padding);white-space:nowrap;transform:translateX(-50%)}.tooltip:not(.bottom):after{margin-bottom:calc(2 * var(--universal-margin))}.tooltip.bottom:after{margin-top:calc(2 * var(--universal-margin))}:root{--modal-overlay-color:rgba(0,0,0,0.45);--modal-close-color:#444;--modal-close-hover-color:#f0f0f0}[type="checkbox"].modal{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}[type="checkbox"].modal+div{position:fixed;top:0;left:0;display:none;width:100vw;height:100vh;background:var(--modal-overlay-color)}[type="checkbox"].modal+div .card{margin:0 auto;max-height:50vh;overflow:auto}[type="checkbox"].modal+div .card .modal-close{position:absolute;top:0;right:0;width:1.75rem;height:1.75rem;border-radius:var(--universal-border-radius);padding:var(--universal-padding);margin:0;cursor:pointer;transition:background 0.3s}[type="checkbox"].modal+div .card .modal-close:before{display:block;content:'\00D7';color:var(--modal-close-color);position:relative;font-family:sans-serif;font-size:1.75rem;line-height:1;text-align:center}[type="checkbox"].modal+div .card .modal-close:hover,[type="checkbox"].modal+div .card .modal-close:focus{background:var(--modal-close-hover-color)}[type="checkbox"].modal:checked+div{display:flex;flex:0 1 auto;z-index:1200}[type="checkbox"].modal:checked+div .card .modal-close{z-index:1211}:root{--collapse-label-back-color:#e8e8e8;--collapse-label-fore-color:#212121;--collapse-label-hover-back-color:#f0f0f0;--collapse-selected-label-back-color:#ececec;--collapse-border-color:#ddd;--collapse-content-back-color:#fafafa;--collapse-selected-label-border-color:#0277bd}.collapse{width:calc(100% - 2 * var(--universal-margin));opacity:1;display:flex;flex-direction:column;margin:var(--universal-margin);border-radius:var(--universal-border-radius)}.collapse>[type="radio"],.collapse>[type="checkbox"]{height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%)}.collapse>label{flex-grow:1;display:inline-block;height:1.5rem;cursor:pointer;transition:background 0.3s;color:var(--collapse-label-fore-color);background:var(--collapse-label-back-color);border:.0625rem solid var(--collapse-border-color);padding:calc(1.5 * var(--universal-padding))}.collapse>label:hover,.collapse>label:focus{background:var(--collapse-label-hover-back-color)}.collapse>label+div{flex-basis:auto;height:1px;width:1px;margin:-1px;overflow:hidden;position:absolute;clip:rect(0 0 0 0);-webkit-clip-path:inset(100%);clip-path:inset(100%);transition:max-height 0.3s;max-height:1px}.collapse>:checked+label{background:var(--collapse-selected-label-back-color);border-bottom-color:var(--collapse-selected-label-border-color)}.collapse>:checked+label+div{box-sizing:border-box;position:relative;width:100%;height:auto;overflow:auto;margin:0;background:var(--collapse-content-back-color);border:.0625rem solid var(--collapse-border-color);border-top:0;padding:var(--universal-padding);clip:auto;-webkit-clip-path:inset(0%);clip-path:inset(0%);max-height:400px}.collapse>label:not(:first-of-type){border-top:0}.collapse>label:first-of-type{border-radius:var(--universal-border-radius) var(--universal-border-radius) 0 0}.collapse>label:last-of-type:not(:first-of-type){border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}.collapse>label:last-of-type:first-of-type{border-radius:var(--universal-border-radius)}.collapse>:checked:last-of-type:not(:first-of-type)+label{border-radius:0}.collapse>:checked:last-of-type+label+div{border-radius:0 0 var(--universal-border-radius) var(--universal-border-radius)}mark.secondary{--mark-back-color:#d32f2f}mark.tertiary{--mark-back-color:#308732}mark.tag{padding:calc(var(--universal-padding)/2) var(--universal-padding);border-radius:1em}:root{--progress-back-color:#ddd;--progress-fore-color:#555}progress{display:block;vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:.75rem;width:calc(100% - 2 * var(--universal-margin));margin:var(--universal-margin);border:0;border-radius:calc(2 * var(--universal-border-radius));background:var(--progress-back-color);color:var(--progress-fore-color)}progress::-webkit-progress-value{background:var(--progress-fore-color);border-top-left-radius:calc(2 * var(--universal-border-radius));border-bottom-left-radius:calc(2 * var(--universal-border-radius))}progress::-webkit-progress-bar{background:var(--progress-back-color)}progress::-moz-progress-bar{background:var(--progress-fore-color);border-top-left-radius:calc(2 * var(--universal-border-radius));border-bottom-left-radius:calc(2 * var(--universal-border-radius))}progress[value="1000"]::-webkit-progress-value{border-radius:calc(2 * var(--universal-border-radius))}progress[value="1000"]::-moz-progress-bar{border-radius:calc(2 * var(--universal-border-radius))}progress.inline{display:inline-block;vertical-align:middle;width:60%}:root{--spinner-back-color:#ddd;--spinner-fore-color:#555}@keyframes spinner-donut-anim{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.spinner{display:inline-block;margin:var(--universal-margin);border:.25rem solid var(--spinner-back-color);border-left:.25rem solid var(--spinner-fore-color);border-radius:50%;width:1.25rem;height:1.25rem;animation:spinner-donut-anim 1.2s linear infinite}progress.primary{--progress-fore-color:#1976d2}progress.secondary{--progress-fore-color:#d32f2f}progress.tertiary{--progress-fore-color:#308732}.spinner.primary{--spinner-fore-color:#1976d2}.spinner.secondary{--spinner-fore-color:#d32f2f}.spinner.tertiary{--spinner-fore-color:#308732}span[class^='icon-']{display:inline-block;height:1em;width:1em;vertical-align:-0.125em;background-size:contain;margin:0 calc(var(--universal-margin) / 4)}span[class^='icon-'].secondary{-webkit-filter:invert(25%);filter:invert(25%)}span[class^='icon-'].inverse{-webkit-filter:invert(100%);filter:invert(100%)}span.icon-alert{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E")}span.icon-bookmark{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E")}span.icon-calendar{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E")}span.icon-credit{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E")}span.icon-edit{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E")}span.icon-link{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E")}span.icon-help{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E")}span.icon-home{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E")}span.icon-info{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E")}span.icon-lock{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E")}span.icon-mail{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E")}span.icon-location{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E")}span.icon-phone{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E")}span.icon-rss{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E")}span.icon-search{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E")}span.icon-settings{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E")}span.icon-share{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E")}span.icon-cart{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E")}span.icon-upload{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E")}span.icon-user{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E")}:root{--generic-border-color:rgba(0,0,0,0.3);--generic-box-shadow:0 .25rem .25rem 0 rgba(0,0,0,0.125),0 .125rem .125rem -.125rem rgba(0,0,0,0.25)}.hidden{display:none !important}.visually-hidden{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}.bordered{border:.0625rem solid var(--generic-border-color) !important}.rounded{border-radius:var(--universal-border-radius) !important}.circular{border-radius:50% !important}.shadowed{box-shadow:var(--generic-box-shadow) !important}.responsive-margin{margin:calc(var(--universal-margin) / 4) !important}@media screen and (min-width: 768px){.responsive-margin{margin:calc(var(--universal-margin) / 2) !important}}@media screen and (min-width: 1280px){.responsive-margin{margin:var(--universal-margin) !important}}.responsive-padding{padding:calc(var(--universal-padding) / 4) !important}@media screen and (min-width: 768px){.responsive-padding{padding:calc(var(--universal-padding) / 2) !important}}@media screen and (min-width: 1280px){.responsive-padding{padding:var(--universal-padding) !important}}@media screen and (max-width: 767px){.hidden-sm{display:none !important}}@media screen and (min-width: 768px) and (max-width: 1279px){.hidden-md{display:none !important}}@media screen and (min-width: 1280px){.hidden-lg{display:none !important}}@media screen and (max-width: 767px){.visually-hidden-sm{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}@media screen and (min-width: 768px) and (max-width: 1279px){.visually-hidden-md{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}@media screen and (min-width: 1280px){.visually-hidden-lg{position:absolute !important;width:1px !important;height:1px !important;margin:-1px !important;border:0 !important;padding:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(100%) !important;clip-path:inset(100%) !important;overflow:hidden !important}}
Index: s/mini.scss
===================================================================
--- css/mini.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,144 +1,0 @@
-//  This is a flavor file. Duplicate it and edit it to create your own flavor. Read instructions carefully.
-//  Single-line comments, starting with '//' will not be included in your final CSS file. Multiline comments,
-//  structured like the flavor description below, will be included in your final CSS file.
-/*
-  Flavor name: Default (mini-default)
-  Author: Angelos Chalaris (chalarangelo@gmail.com)
-  Maintainers: Angelos Chalaris
-  mini.css version: v3.0.1
-*/
-$base-line-height:        1.4;         // Line height for most elements
-
-@import 'mini/core';
-@import 'mini/layout';
-
-/*
-  Custom elements for card elements.
-*/
-$card-small-name:              'small';            // Class name for small cards.
-$card-small-width:             240px;              // Width for small cards.
-@include make-card-alt-size ($card-small-name, $card-small-width);
-
-$card-large-name:              'large';            // Class name for large cards.
-$card-large-width:             480px;              // Width for large cards.
-@include make-card-alt-size ($card-large-name, $card-large-width);
-
-$card-fluid-name:              'fluid';            // Class name for fluid cards.
-$card-fluid-width:             100%;               // Width for fluid cards.
-@include make-card-alt-size ($card-fluid-name, $card-fluid-width);
-
-$card-warning-name:            'warning';          // Class name for card warnging color variant.
-$card-warning-back-color:      #ffca28;            // Background color for card warnging color variant.
-$card-warning-fore-color:      #111;               // Text color for card warnging color variant.
-$card-warning-border-color:    #e8b825;            // Border style for card warnging color variant.
-@include make-card-alt-color ($card-warning-name, $card-warning-back-color, $card-warning-fore-color, $card-warning-border-color);
-
-$card-error-name:              'error';            // Class name for card error color variant.
-$card-error-back-color:        #b71c1c;            // Background color for card error color variant.
-$card-error-fore-color:        #f8f8f8;            // Text color for card error color variant.
-$card-error-border-color:      #a71a1a;            // Border style for card error color variant.
-@include make-card-alt-color ($card-error-name, $card-error-back-color, $card-error-fore-color, $card-error-border-color);
-
-$card-section-dark-name:        'dark';            // Class name for card dark section variant.
-$card-section-dark-back-color:  #e0e0e0;           // Background color for card dark section variant.
-$card-section-dark-fore-color:  #111;              // Text color for card dark section variant.
-@include make-card-section-alt-color ($card-section-dark-name, $card-section-dark-back-color, $card-section-dark-fore-color);
-
-$card-section-double-padded-name:    'double-padded';   // Class name for card double-padded section variant.
-$card-section-double-padded-padding:  calc(1.5 * var(#{$universal-padding-var}));  // Padding for card sectiondouble-padded section variant.
-@include make-card-section-alt-style ($card-section-double-padded-name, $card-section-double-padded-padding);
-
-@import 'mini/input_control';
-
-/*
-  Custom elements for forms and input elements.
-*/
-$button-primary-name:            'primary';   // Class name for primary button color variant.
-$button-primary-back-color:      #1976d2;     // Background color for primary button color variant.
-$button-primary-hover-back-color:#1565c0;     // Background color for primary button color variant (hover).
-$button-primary-fore-color:      #f8f8f8;     // Text color for primary button color variant.
-@include make-button-alt-color ($button-primary-name, $button-primary-back-color, $button-primary-hover-back-color, $button-primary-fore-color);
-
-$button-secondary-name:            'secondary'; // Class name for secondary button color variant.
-$button-secondary-back-color:      #d32f2f;     // Background color for secondary button color variant.
-$button-secondary-hover-back-color:#c62828;     // Background color for secondary button color variant (hover).
-$button-secondary-fore-color:      #f8f8f8;     // Text color for secondary button color variant.
-@include make-button-alt-color ($button-secondary-name, $button-secondary-back-color, $button-secondary-hover-back-color, $button-secondary-fore-color);
-
-$button-tertiary-name:            'tertiary';  // Class name for tertiary button color variant.
-$button-tertiary-back-color:      #308732;     // Background color for tertiary button color variant.
-$button-tertiary-hover-back-color:#277529;     // Background color for tertiary button color variant (hover).
-$button-tertiary-fore-color:      #f8f8f8;     // Text color for tertiary button color variant.
-@include make-button-alt-color ($button-tertiary-name, $button-tertiary-back-color, $button-tertiary-hover-back-color, $button-tertiary-fore-color);
-
-$button-inverse-name:            'inverse';   // Class name for inverse button color variant.
-$button-inverse-back-color:      #212121;     // Background color for inverse button color variant.
-$button-inverse-hover-back-color:#111;        // Background color for inverse button color variant (hover).
-$button-inverse-fore-color:      #f8f8f8;     // Text color for inverse button color variant.
-@include make-button-alt-color ($button-inverse-name, $button-inverse-back-color, $button-inverse-hover-back-color, $button-inverse-fore-color);
-
-$button-small-name:    'small';              // Class name, padding and margin for small button size variant.
-$button-small-padding: calc(0.5 * var(#{$universal-padding-var})) calc(0.75 * var(#{$universal-padding-var}));
-$button-small-margin:  var(#{$universal-margin-var});
-@include make-button-alt-size ($button-small-name, $button-small-padding, $button-small-margin);
-
-$button-large-name:    'large';              // Class name, padding and margin for large button size variant.
-$button-large-padding: calc(1.5 * var(#{$universal-padding-var})) calc(2 * var(#{$universal-padding-var}));
-$button-large-margin:  var(#{$universal-margin-var});
-@include make-button-alt-size ($button-large-name, $button-large-padding, $button-large-margin);
-
-
-$_header-links-uppercase:     false; // [Hidden] Should header links and buttons be uppercase? (boolean)
-@import 'mini/navigation';
-
-
-@import 'mini/table';
-@import 'mini/contextual';
-
-/*
-  Custom elements for contextual background elements, toasts and tooltips.
-*/
-$mark-secondary-name:            'secondary'; // Class name for secondary <mark> color variant.
-$mark-secondary-back-color:      #d32f2f;     // Background color for secondary <mark> color variant.
-@include make-mark-alt-color ($mark-secondary-name, $mark-secondary-back-color);
-
-$mark-tertiary-name:            'tertiary';  // Class name for tertiary <mark> color variant.
-$mark-tertiary-back-color:      #308732;     // Background color for tertiary <mark> color variant.
-@include make-mark-alt-color ($mark-tertiary-name, $mark-tertiary-back-color);
-
-$mark-tag-name:                 'tag';       // Class name, padding and border radius for tag <mark> size variant.
-$mark-tag-padding:      calc(var(#{$universal-padding-var})/2) var(#{$universal-padding-var});
-$mark-tag-border-radius:        1em;
-@include make-mark-alt-size ($mark-tag-name, $mark-tag-padding, $mark-tag-border-radius);
-
-@import 'mini/progress';
-
-/*
-  Custom elements for progress bars and spinners.
-*/
-$progress-primary-name:         'primary';   // Class name for primary <progress> color variant.
-$progress-primary-fore-color:   #1976d2;     // Foreground color for primary <progress> color variant.
-@include make-progress-alt-color ($progress-primary-name, $progress-primary-fore-color);
-
-$progress-secondary-name:     'secondary';   // Class name for secondary <progress> color variant.
-$progress-secondary-fore-color: #d32f2f;     // Foreground color for secondary <progress> color variant.
-@include make-progress-alt-color ($progress-secondary-name, $progress-secondary-fore-color);
-
-$progress-tertiary-name:       'tertiary';   // Class name for tertiary <progress> color variant.
-$progress-tertiary-fore-color:   #308732;    // Foreground color for tertiary <progress> color variant.
-@include make-progress-alt-color ($progress-tertiary-name, $progress-tertiary-fore-color);
-
-$spinner-donut-primary-name:         'primary';   // Class name for primary spinner donutcolor variant.
-$spinner-donut-primary-fore-color:   #1976d2;     // Foreground color for primary spinner donut color variant.
-@include make-spinner-donut-alt-color ($spinner-donut-primary-name, $spinner-donut-primary-fore-color);
-
-$spinner-donut-secondary-name:     'secondary';   // Class name for secondary spinner donut color variant.
-$spinner-donut-secondary-fore-color: #d32f2f;     // Foreground color for secondary spinner donut color variant.
-@include make-spinner-donut-alt-color ($spinner-donut-secondary-name, $spinner-donut-secondary-fore-color);
-
-$spinner-donut-tertiary-name:       'tertiary';   // Class name for tertiary spinner donut color variant.
-$spinner-donut-tertiary-fore-color:   #308732;    // Foreground color for tertiary spinner donut color variant.
-@include make-spinner-donut-alt-color ($spinner-donut-tertiary-name, $spinner-donut-tertiary-fore-color);
-
-@import 'mini/icon';
-@import 'mini/utility';
Index: s/mini/_contextual.scss
===================================================================
--- css/mini/_contextual.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,354 +1,0 @@
-/*
-  Definitions for contextual background elements, toasts and tooltips.
-*/
-$mark-back-color:        #0277bd !default;       // Background color for <mark>
-$mark-fore-color:        #fafafa !default;       // Text color for <mark>
-$mark-font-size:         0.95em !default;        // Font size for <mark>
-$mark-line-height:       1em !default;           // Line height for <mark>
-$mark-inline-block-name: 'inline-block' !default;// Class name for inline-block <mark>
-$_include-toast:         true !default;          // [Hidden] Should toasts be included? (boolean)
-$toast-name:             'toast' !default;       // Class name for toast component
-$toast-back-color:       #424242 !default;       // Background color for toast component
-$toast-fore-color:       #fafafa !default;       // Text color for toast component
-$_include-tooltip:       true !default;          // [Hidden] Should tooltips be included? (boolean)
-$tooltip-name:           'tooltip' !default;     // Class name for tooltip component
-$tooltip-bottom-name:    'bottom' !default;      // Bottom tooltip class name
-$tooltip-back-color:      #212121 !default;      // Background color for tooltip component
-$tooltip-fore-color:      #fafafa !default;      // Text color for tooltip component
-$_include-modal:          true !default;         // [Hidden] Should modal dialogs be included? (boolean)
-$modal-name:              'modal' !default;      // Class name for modal dialog component
-$modal-overlay-color: rgba(0, 0, 0, 0.45) !default; // Overlay color for modal dialog component
-$modal-close-name:        'modal-close' !default;// Class name for modal dialog close button
-$modal-close-color:       #444 !default;         // Text color for the close button of the modal dialog component
-$modal-close-hover-back-color: #f0f0f0 !default; // Background color for the close button of the modal dialog component (on hover/focus)
-$modal-close-size:        1.75rem !default;      // Font size for the close button of the modal dialog component
-$_include-collapse:       true !default;         // [Hidden] Should collapse components be included? (boolean)
-$collapse-name:           'collapse' !default;   // Class name for collapse component
-$collapse-label-height:   1.5rem !default;       // Height for the labels in the collapse component
-$collapse-content-max-height: 400px !default;    // Max height for the content panes in the collapse component
-$collapse-label-back-color:     #e8e8e8 !default;// Background color for labels in the collapse component
-$collapse-label-fore-color:     #212121 !default;// Text color for labels in the collapse component
-$collapse-label-hover-back-color:#f0f0f0 !default;// Background color for labels in the collapse component (hover)
-$collapse-selected-label-back-color:#ececec !default;// Background color for selected labels in the collapse component
-$collapse-border-color:   #ddd !default;          // Border color for collapse component
-$collapse-selected-label-border-color:   #0277bd !default;  // Border color for collapse component's selected labels
-$collapse-content-back-color: #fafafa !default;   // Background color for collapse component's content panes
-// CSS variable name definitions [exercise caution if modifying these]
-$mark-back-color-var:         '--mark-back-color' !default;
-$mark-fore-color-var:         '--mark-fore-color' !default;
-$toast-back-color-var:        '--toast-back-color' !default;
-$toast-fore-color-var:        '--toast-fore-color' !default;
-$tooltip-back-color-var:      '--tooltip-back-color' !default;
-$tooltip-fore-color-var:      '--tooltip-fore-color' !default;
-$modal-overlay-color-var:     '--modal-overlay-color' !default;
-$modal-close-color-var:       '--modal-close-color' !default;
-$modal-close-hover-back-color-var: '--modal-close-hover-color' !default;
-$collapse-label-back-color-var:    '--collapse-label-back-color' !default;
-$collapse-label-fore-color-var:    '--collapse-label-fore-color' !default;
-$collapse-label-hover-back-color-var:    '--collapse-label-hover-back-color' !default;
-$collapse-selected-label-back-color-var: '--collapse-selected-label-back-color' !default;
-$collapse-border-color-var:        '--collapse-border-color' !default;
-$collapse-content-back-color-var:  '--collapse-content-back-color' !default;
-$collapse-selected-label-border-color-var: '--collapse-selected-label-border-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $base-line-height:        1.5 !default;         // Line height for most elements
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-// Check the `_contextual_mixins.scss` file to find this module's mixins.
-@import '_contextual_mixins';
-/* Contextual module CSS variable definitions */
-:root {
-  #{$mark-back-color-var}: $mark-back-color;
-  #{$mark-fore-color-var}: $mark-fore-color;
-}
-// Default styling for mark. Use mixins for alternate styles.
-mark {
-  background: var(#{$mark-back-color-var});
-  color: var(#{$mark-fore-color-var});
-  font-size: $mark-font-size;
-  line-height: $mark-line-height;
-  border-radius: var(#{$universal-border-radius-var});
-  padding: calc(var(#{$universal-padding-var}) / 4) calc(var(#{$universal-padding-var}) / 2);
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  &.#{$mark-inline-block-name} {
-    display: inline-block;
-    // This is hardcoded, as we want inline-block <mark> elements to be styled as normal pieces of text, instead of look small and weird.
-    font-size: 1em;
-    // Line height is reset to the normal line-height from `core`. Also hardcoded for same reasons.
-    line-height: $base-line-height;
-    padding: calc(var(#{$universal-padding-var}) / 2) var(#{$universal-padding-var});
-  }
-}
-// Styling for toasts.  - No border styling, I think it's unnecessary anyways.
-@if $_include-toast {
-  :root {
-    #{$toast-back-color-var}: $toast-back-color;
-    #{$toast-fore-color-var}: $toast-fore-color;
-  }
-  .#{$toast-name} {
-    position: fixed;
-    bottom: calc(var(#{$universal-margin-var}) * 3);
-    left: 50%;
-    transform: translate(-50%, -50%);
-    z-index: 1111;
-    color: var(#{$toast-fore-color-var});
-    background: var(#{$toast-back-color-var});
-    border-radius: calc(var(#{$universal-border-radius-var}) * 16);
-    padding: var(#{$universal-padding-var}) calc(var(#{$universal-padding-var}) * 3);
-    @if $universal-box-shadow != none {
-      box-shadow: var(#{$universal-box-shadow-var});
-    }
-  }
-}
-// Styling for tooltips.
-@if $_include-tooltip {
-  :root {
-    #{$tooltip-back-color-var}: $tooltip-back-color;
-    #{$tooltip-fore-color-var}: $tooltip-fore-color;
-  }
-  .#{$tooltip-name} {
-    position: relative;
-    display: inline-block;
-    &:before, &:after {
-      position: absolute;
-      opacity: 0;
-      clip: rect(0 0 0 0);
-      -webkit-clip-path: inset(100%);
-              clip-path: inset(100%);
-      transition: all 0.3s;
-      // Remember to keep this index a lower value than the one used for stickies.
-      z-index: 1010;  // Deals with certain problems when combined with cards and tables.
-      left: 50%;
-    }
-    &:not(.#{$tooltip-bottom-name}):before, &:not(.#{$tooltip-bottom-name}):after { // Top (default) tooltip styling
-      bottom: 75%;
-    }
-    &.#{$tooltip-bottom-name}:before, &.#{$tooltip-bottom-name}:after { // Bottom tooltip styling
-      top: 75%;
-    }
-    &:hover, &:focus {
-      &:before, &:after {
-      opacity: 1;
-      clip: auto;
-      -webkit-clip-path: inset(0%);
-              clip-path: inset(0%);
-      }
-    }
-    &:before {  // This is the little tooltip triangle
-      content: '';
-      background: transparent;
-      border: var(#{$universal-margin-var}) solid transparent;
-      // Newer browsers will center the tail properly
-      left: calc(50% - var(#{$universal-margin-var}));
-    }
-    &:not(.#{$tooltip-bottom-name}):before { // Top (default) tooltip styling
-      border-top-color: $tooltip-back-color;
-    }
-    &.#{$tooltip-bottom-name}:before { // Bottom tooltip styling
-      border-bottom-color: $tooltip-back-color;
-    }
-    &:after {  // This is the actual tooltip's text block
-      content: attr(aria-label);
-      color: var(#{$tooltip-fore-color-var});
-      background: var(#{$tooltip-back-color-var});
-      border-radius: var(#{$universal-border-radius-var});
-      padding: var(#{$universal-padding-var});
-      @if $universal-box-shadow != none {
-        box-shadow: var(#{$universal-box-shadow-var});
-      }
-      white-space: nowrap;
-      transform: translateX(-50%);
-    }
-    &:not(.#{$tooltip-bottom-name}):after { // Top (default) tooltip styling
-      margin-bottom: calc(2 * var(#{$universal-margin-var}));
-    }
-    &.#{$tooltip-bottom-name}:after { // Bottom tooltip styling
-      margin-top: calc(2 * var(#{$universal-margin-var}));
-    }
-  }
-}
-// Styling for modal dialogs.
-@if $_include-modal {
-  :root {
-    #{$modal-overlay-color-var}: $modal-overlay-color;
-    #{$modal-close-color-var}: $modal-close-color;
-    #{$modal-close-hover-back-color-var}: $modal-close-hover-back-color;
-  }
-  [type="checkbox"].#{$modal-name} {
-    height: 1px;
-    width: 1px;
-    margin: -1px;
-    overflow: hidden;
-    position: absolute;
-    clip: rect(0 0 0 0);
-    -webkit-clip-path: inset(100%);
-    clip-path: inset(100%);
-    & + div {
-      position: fixed;
-      top: 0;
-      left: 0;
-      display: none;
-      width: 100vw;
-      height: 100vh;
-      background: var(#{$modal-overlay-color-var});
-      & .card {
-        margin: 0 auto;
-        max-height: 50vh;
-        overflow: auto;
-        & .#{$modal-close-name} {
-          position: absolute;
-          top: 0;
-          right: 0;
-          width: $modal-close-size;
-          height: $modal-close-size;
-          border-radius: var(#{$universal-border-radius-var});
-          padding: var(#{$universal-padding-var});
-          margin: 0;
-          cursor: pointer;
-          transition: background 0.3s;
-          &:before {
-            display: block;
-            content: '\00D7';
-            color: var(#{$modal-close-color-var});
-            position: relative;
-            font-family: sans-serif;
-            font-size: $modal-close-size;
-            line-height: 1;
-            text-align: center;
-          }
-          &:hover, &:focus {
-            background: var(#{$modal-close-hover-back-color-var});
-          }
-        }
-      }
-    }
-    &:checked + div {
-      display: flex;
-      flex: 0 1 auto;
-      z-index: 1200;
-      & .card {
-        & .#{$modal-close-name} {
-          z-index: 1211;
-        }
-      }
-    }
-  }
-}
-// Styling for collapse.
-@if $_include-collapse {
-  :root {
-    #{$collapse-label-back-color-var}:  $collapse-label-back-color;
-    #{$collapse-label-fore-color-var}:  $collapse-label-fore-color;
-    #{$collapse-label-hover-back-color-var}:  $collapse-label-hover-back-color;
-    #{$collapse-selected-label-back-color-var}: $collapse-selected-label-back-color;
-    #{$collapse-border-color-var}: $collapse-border-color;
-    #{$collapse-content-back-color-var} : $collapse-content-back-color;
-    #{$collapse-selected-label-border-color-var}: $collapse-selected-label-border-color;
-  }
-  .#{$collapse-name} {
-    width: calc(100% - 2 * var(#{$universal-margin-var}));
-    opacity: 1;
-    display: flex;
-    flex-direction: column;
-    margin: var(#{$universal-margin-var});
-    border-radius: var(#{$universal-border-radius-var});
-    @if $universal-box-shadow != none {
-      box-shadow: var(#{$universal-box-shadow-var});
-    }
-    & > [type="radio"], & > [type="checkbox"] {
-      height: 1px;
-      width: 1px;
-      margin: -1px;
-      overflow: hidden;
-      position: absolute;
-      clip: rect(0 0 0 0);
-      -webkit-clip-path: inset(100%);
-      clip-path: inset(100%);
-    }
-    & > label {
-      flex-grow: 1;
-      display: inline-block;
-      height: $collapse-label-height;
-      cursor: pointer;
-      transition: background 0.3s;
-      color: var(#{$collapse-label-fore-color-var});
-      background: var(#{$collapse-label-back-color-var});
-      border: $__1px solid var(#{$collapse-border-color-var});
-      padding: calc(1.5 * var(#{$universal-padding-var}));
-      &:hover, &:focus {
-        background: var(#{$collapse-label-hover-back-color-var});
-      }
-      + div {
-        flex-basis: auto;
-        height: 1px;
-        width: 1px;
-        margin: -1px;
-        overflow: hidden;
-        position: absolute;
-        clip: rect(0 0 0 0);
-        -webkit-clip-path: inset(100%);
-        clip-path: inset(100%);
-        transition: max-height 0.3s;
-        max-height: 1px;  // for transition
-      }
-    }
-    > :checked + label {
-      background: var(#{$collapse-selected-label-back-color-var});
-      // border: 0.0625rem solid #bdbdbd; // var it
-      border-bottom-color: var(#{$collapse-selected-label-border-color-var});
-      & + div {
-        box-sizing: border-box;
-        position: relative;
-        width: 100%;
-        height: auto;
-        overflow: auto;
-        margin: 0;
-        background: var(#{$collapse-content-back-color-var});
-        border: $__1px solid var(#{$collapse-border-color-var});
-        border-top: 0;
-        padding: var(#{$universal-padding-var});
-        clip: auto;
-        -webkit-clip-path: inset(0%);
-        clip-path: inset(0%);
-        max-height: $collapse-content-max-height;
-      }
-    }
-    & > label:not(:first-of-type) { // Keep these down here, as it overrides some other styles.
-      border-top: 0;
-    }
-    & > label:first-of-type {
-      border-radius: var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var}) 0 0;
-    }
-    & > label:last-of-type:not(:first-of-type) {
-      border-radius: 0 0 var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var});
-    }
-    & > label:last-of-type:first-of-type {
-      border-radius: var(#{$universal-border-radius-var});
-    }
-    & > :checked:last-of-type:not(:first-of-type) + label {
-      border-radius: 0;
-    }
-    & > :checked:last-of-type + label + div {
-      border-radius: 0 0 var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var});
-    }
-  }
-}
Index: s/mini/_contextual_mixins.scss
===================================================================
--- css/mini/_contextual_mixins.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,27 +1,0 @@
-// Contextual module's mixin definitions are here. For the module itself
-// check `_contextual.scss`.
-// Mark color variant mixin:
-//  $mark-alt-name: The name of the class used for the <mark> variant.
-//  $mark-alt-back-color: Background color for <mark> variant.
-//  $mark-alt-fore-color: Text color for <mark> variant.
-@mixin make-mark-alt-color ($mark-alt-name, $mark-alt-back-color : $mark-back-color,
-  $mark-alt-fore-color : $mark-fore-color) {
-  mark.#{$mark-alt-name} {
-    @if $mark-alt-back-color != $mark-back-color {
-      #{$mark-back-color-var}: $mark-alt-back-color;
-    }
-    @if $mark-alt-fore-color != $mark-fore-color{
-      #{$mark-fore-color-var}: $mark-alt-fore-color;
-    }
-  }
-}
-// Mark size variant mixin:
-//  $mark-alt-name: The name of the class used for the <mark> variant.
-//  $mark-alt-padding: The padding of the <mark> variant.
-//  $mark-alt-border-radius: The border radius of the <mark> variant.
-@mixin make-mark-alt-size ($mark-alt-name, $mark-alt-padding, $mark-alt-border-radius) {
-  mark.#{$mark-alt-name} {
-    padding: $mark-alt-padding;
-    border-radius: $mark-alt-border-radius;
-  }
-}
Index: s/mini/_core.scss
===================================================================
--- css/mini/_core.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,304 +1,0 @@
-/*
-  Browsers resets and base typography.
-*/
-@function rempx ($size) { @return 1px/$size;}   // Keep this, the generator breaks otherwise
-// TODO: Add fluid type and test thoroughly
-$base-root-font-size:     16px !default;        // Root font sizing for all elements (`px` only)
-$_apply-defaults-to-all:  true !default;        // [Hidden] Apply defaults to all elements? (boolean)
-$__1px: rempx($base-root-font-size) * 1rem !default;  // [Calculated] Calculated rem value of `1px`
-$base-font-family: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Ubuntu, \"Helvetica Neue\", Helvetica, sans-serif' !default;                           // Font stack for all elements
-$base-line-height:        1.5 !default;         // Line height for most elements
-$base-font-size:          1rem !default;        // Font sizing for all elements
-$_body-margin:            0 !default;           // [Hidden] Margin for body
-$fore-color:              #111 !default;        // Text & foreground color
-$secondary-fore-color:    #444 !default;        // Secondary text & foreground color
-$back-color:              #f8f8f8 !default;     // Background color
-$secondary-back-color:    #f0f0f0 !default;     // Secondary background color
-$blockquote-color:        #f57c00 !default;     // <blockquote> sidebar and quotation color
-$pre-color:               #1565c0 !default;     // <pre> sidebar color
-$border-color:            #aaa !default;        // Border color
-$secondary-border-color:  #ddd !default;        // Secondary border color
-$heading-line-height:     1.2 !default;         // Line height for headings
-$heading-ratio:           1.19 !default;        // Ratio for headings (strictly unitless)
-$subheading-font-size:    0.75em !default;      // Font sizing for <small> elements in headings
-$subheading-top-margin:   -0.25rem !default;    // Top margin of <small> elements in headings
-$universal-margin:        0.5rem !default;      // Universal margin for the most elements
-$universal-padding:       0.5rem !default;      // Universal padding for the most elements
-$universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-$universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-$small-font-size:         0.75em !default;      // Font sizing for <small> elements
-$heading-font-weight:     500 !default;         // Font weight for headings
-$bold-font-weight:        700 !default;         // Font weight for <b> and <strong>
-$horizontal-rule-line-height:  1.25em !default; // <hr> line height
-$blockquote-quotation-size:    3rem !default;   // Font size for the quotation of <blockquote>
-$blockquote-cite-size:         0.75em !default; // Font size for the [cite] of <blockquote>
-$code-font-family: 'Menlo, Consolas, monospace' !default; // Font stack for code elements
-$code-font-size:           0.85em !default;     // Font size for <code>, <kbd>
-$small-element-font-size:     0.75em !default;  // Font size for <small>, <sub>, <sup>
-$sup-top:                  -0.5em !default;     // <sup> top
-$sub-bottom:               -0.25em !default;    // <sub> bottom
-$a-link-color:             #0277bd !default;    // Color for <a>:link
-$a-visited-color:          #01579b !default;    // Color for <a>:visited
-// CSS variable name definitions [exercise caution if modifying these]
-$fore-color-var:                '--fore-color' !default;
-$secondary-fore-color-var:      '--secondary-fore-color' !default;
-$back-color-var:                '--back-color' !default;
-$secondary-back-color-var:      '--secondary-back-color' !default;
-$blockquote-color-var:          '--blockquote-color' !default;
-$pre-color-var:                 '--pre-color' !default;
-$border-color-var:              '--border-color' !default;
-$secondary-border-color-var:    '--secondary-border-color' !default;
-$heading-ratio-var:             '--heading-ratio' !default;
-$universal-margin-var:          '--universal-margin' !default;
-$universal-padding-var:         '--universal-padding' !default;
-$universal-border-radius-var:   '--universal-border-radius' !default;
-$universal-box-shadow-var:      '--universal-box-shadow' !default;
-$a-link-color-var:              '--a-link-color' !default;
-$a-visited-color-var:           '--a-visited-color' !default;
-/* Core module CSS variable definitions */
-:root {
-  #{$fore-color-var}: $fore-color;
-  #{$secondary-fore-color-var}: $secondary-fore-color;
-  #{$back-color-var}: $back-color;
-  #{$secondary-back-color-var}: $secondary-back-color;
-  #{$blockquote-color-var}: $blockquote-color;
-  #{$pre-color-var}: $pre-color;
-  #{$border-color-var}: $border-color;
-  #{$secondary-border-color-var}: $secondary-border-color;
-  #{$heading-ratio-var}: $heading-ratio;
-  #{$universal-margin-var}: $universal-margin;
-  #{$universal-padding-var}: $universal-padding;
-  #{$universal-border-radius-var}: $universal-border-radius;
-  #{$a-link-color-var} : $a-link-color;
-  #{$a-visited-color-var} : $a-visited-color;
-  @if $universal-box-shadow != none {
-    #{$universal-box-shadow-var}: $universal-box-shadow;
-  }
-}
-html {
-  font-size: $base-root-font-size;  // Set root's font sizing.
-}
-a, b, del, em, i, ins, q, span, strong, u {
-  font-size: 1em; // Fix for elements inside headings not displaying properly.
-}
-
-@if $_apply-defaults-to-all {
-  html, * {
-    font-family: #{$base-font-family};
-    line-height: $base-line-height;
-    // Prevent adjustments of font size after orientation changes in mobile.
-    -webkit-text-size-adjust: 100%;
-  }
-  * {
-    font-size: $base-font-size;
-  }
-}
-@else {
-  html {
-    font-family:  #{$base-font-family};
-    line-height: $base-line-height;
-    // Prevent adjustments of font size after orientation changes in mobile.
-    -webkit-text-size-adjust: 100%;
-  }
-}
-
-body {
-  margin: $_body-margin;
-  color: var(#{$fore-color-var});
-  background: var(#{$back-color-var});
-}
-
-// Correct display for Edge & Firefox.
-details {
-  display: block;
-}
-
-// Correct display in all browsers.
-summary {
-  display: list-item;
-}
-
-// Abbreviations
-abbr[title] {
-  border-bottom: none;           // Remove bottom border in Firefox 39-.
-  text-decoration: underline dotted;  // Opinionated style-fix for all browsers.
-}
-
-// Show overflow in Edge.
-input {
-  overflow: visible;
-}
-
-// Make images responsive by default.
-img {
-  max-width: 100%;
-  height: auto;
-}
-
-h1, h2, h3, h4, h5, h6 {
-  line-height: $heading-line-height;
-  margin: calc(1.5 * var(#{$universal-margin-var})) var(#{$universal-margin-var});
-  font-weight: $heading-font-weight;
-  small {
-    color: var(#{$secondary-fore-color-var});
-    display: block;
-    @if $subheading-top-margin != 0 {
-      margin-top: $subheading-top-margin;
-    }
-    @if $subheading-font-size != $small-font-size {
-      font-size: $subheading-font-size;
-    }
-  }
-}
-
-h1 {
-  font-size: calc(1rem * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}));
-}
-h2 {
-  font-size: calc(1rem * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}));
-}
-h3 {
-  font-size: calc(1rem * var(#{$heading-ratio-var}) * var(#{$heading-ratio-var}));
-}
-h4 {
-  font-size: calc(1rem * var(#{$heading-ratio-var}));
-}
-h5 {
-  font-size: 1rem;
-}
-h6 {
-  font-size: calc(1rem / var(#{$heading-ratio-var}));
-}
-
-p {
-  margin: var(#{$universal-margin-var});
-}
-
-ol, ul {
-  margin: var(#{$universal-margin-var});
-  padding-left: calc(2 * var(#{$universal-margin-var}));
-}
-
-b, strong {
-  font-weight: $bold-font-weight;
-}
-
-hr {
-  // Fixes and defaults for styling
-  box-sizing: content-box;
-  border: 0;
-  // Actual styling using variables
-  line-height: $horizontal-rule-line-height;
-  margin: var(#{$universal-margin-var});
-  height: $__1px;
-  background: linear-gradient(to right, transparent, var(#{$border-color-var}) 20%, var(#{$border-color-var}) 80%, transparent);
-}
-
-blockquote {  // Doesn't have a back color by default, can be added manually.
-  display: block;
-  position: relative;
-  font-style: italic;
-  color: var(#{$secondary-fore-color-var});
-  margin: var(#{$universal-margin-var});
-  padding: calc(3 * var(#{$universal-padding-var}));
-  border: $__1px solid var(#{$secondary-border-color-var});
-  border-left: 6*$__1px solid var(#{$blockquote-color-var});
-  border-radius: 0 var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var}) 0;
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  &:before {
-    position: absolute;
-    top: calc(0rem - var(#{$universal-padding-var}));
-    left: 0;
-    font-family: sans-serif;
-    font-size: $blockquote-quotation-size;
-    font-weight: 700;
-    content: "\201c";
-    color: var(#{$blockquote-color-var});
-  }
-  &[cite]:after{
-    font-style: normal;
-    font-size: $blockquote-cite-size;
-    font-weight: 700;
-    content: "\a—  " attr(cite);
-    white-space: pre;
-  }
-}
-
-code, kbd, pre, samp {
-  font-family: #{$code-font-family};     // Display fix should be applied manually!
-  font-size: $code-font-size;
-}
-
-code { // No border color by default and fore color is the default for text, can be altered manually.
-  background: var(#{$secondary-back-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  // This could be a bit counterintuitive and burden the codebase a bit, look into it again?
-  padding: calc(var(#{$universal-padding-var}) / 4) calc(var(#{$universal-padding-var}) / 2);
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-}
-
-kbd { // No border color by default, can be altered manually.
-  background: var(#{$fore-color-var});
-  color: var(#{$back-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  // This could be a bit counterintuitive and burden the codebase a bit, look into it again?
-  padding: calc(var(#{$universal-padding-var}) / 4) calc(var(#{$universal-padding-var}) / 2);
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-}
-
-pre { // Fore color is the default, can be altered manually.
-  overflow: auto; // Responsiveness
-  background: var(#{$secondary-back-color-var});
-  padding: calc(1.5 * var(#{$universal-padding-var}));
-  margin: var(#{$universal-margin-var});
-  border: $__1px solid var(#{$secondary-border-color-var});
-  border-left: 4*$__1px solid var(#{$pre-color-var});
-  border-radius: 0 var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var}) 0;
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-}
-
-// Prevent elements from affecting the line height in all browsers.
-sup, sub, code, kbd {
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-small, sup, sub, figcaption {
-  font-size: $small-element-font-size;
-}
-
-sup {
-  top: $sup-top;
-}
-sub {
-  bottom: $sub-bottom;
-}
-
-figure {
-  margin: var(#{$universal-margin-var});
-}
-figcaption {
-    color: var(#{$secondary-fore-color-var});
-}
-
-a {
-  text-decoration: none;
-  &:link{
-    color: var(#{$a-link-color-var});
-  }
-  &:visited {
-    color: var(#{$a-visited-color-var});
-  }
-  &:hover, &:focus {
-    text-decoration: underline;
-  }
-}
Index: s/mini/_icon.scss
===================================================================
--- css/mini/_icon.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,131 +1,0 @@
-/*
-  Definitions for icons - powered by Feather (https://feathericons.com/).
-*/
-$icon-prefix:            'icon' !default;        // Class name prefix for icons.
-$icon-alert-name:        'alert' !default;       // Class name suffix for alert icon.
-$icon-bookmark-name:     'bookmark' !default;    // Class name suffix for bookmark icon.
-$icon-calendar-name:     'calendar' !default;    // Class name suffix for calendar icon.
-$icon-credit-name:       'credit' !default;      // Class name suffix for credit icon.
-$icon-edit-name:         'edit' !default;        // Class name suffix for edit icon.
-$icon-link-name:         'link' !default;        // Class name suffix for link icon.
-$icon-help-name:         'help' !default;        // Class name suffix for help icon.
-$icon-home-name:         'home' !default;        // Class name suffix for home icon.
-$icon-info-name:         'info' !default;        // Class name suffix for info icon.
-$icon-lock-name:         'lock' !default;        // Class name suffix for lock icon.
-$icon-mail-name:         'mail' !default;        // Class name suffix for mail icon.
-$icon-location-name:     'location' !default;    // Class name suffix for location icon.
-$icon-phone-name:        'phone' !default;       // Class name suffix for phone icon.
-$icon-rss-name:          'rss' !default;         // Class name suffix for rss icon.
-$icon-search-name:       'search' !default;      // Class name suffix for search icon.
-$icon-settings-name:     'settings' !default;    // Class name suffix for settings icon.
-$icon-share-name:        'share' !default;       // Class name suffix for share icon.
-$icon-cart-name:         'cart' !default;        // Class name suffix for cart icon.
-$icon-upload-name:       'upload' !default;      // Class name suffix for upload icon.
-$icon-user-name:         'user' !default;        // Class name suffix for user icon.
-$icon-secondary-color-name: 'secondary' !default;// Class name for secondary color icons.
-$icon-inverse-color-name: 'inverse' !default;    // Class name for inverse color icons.
-/// Replace `$search` with `$replace` in `$string`
-/// @author Hugo Giraudel
-/// @param {String} $string - Initial string
-/// @param {String} $search - Substring to replace
-/// @param {String} $replace ('') - New value
-/// @return {String} - Updated string
-@function str-replace($string, $search, $replace: '') {
-  $index: str-index($string, $search);
-  @if $index {
-    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
-  }
-  @return $string;
-}
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $fore-color:              #111 !default;        // Text & foreground color
-// $universal-margin-var:          '--universal-margin' !default;
-// $fore-color-var:                '--fore-color' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$fore-color-var}: $fore-color;
-// }
-//
-// ============================================================
-// Base styling for icons.
-span[class^='#{$icon-prefix}-'] {
-  display: inline-block;
-  height: 1em;
-  width: 1em;
-  vertical-align: -0.125em; // fixes alignment issues
-  background-size: contain;
-  margin: 0 calc(var(#{$universal-margin-var}) / 4);
-  &.#{$icon-secondary-color-name}{
-    -webkit-filter: invert(25%);
-    filter: invert(25%);
-  }
-  &.#{$icon-inverse-color-name}{
-    -webkit-filter: invert(100%);
-    filter: invert(100%);
-  }
-}
-span{
-  $stroke-color: str-replace(#{$fore-color}, '#', '%23');
-  &.#{$icon-prefix}-#{$icon-alert-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-bookmark-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-calendar-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-credit-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-edit-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-link-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-help-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-home-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-info-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-lock-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-mail-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-location-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-phone-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-rss-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-search-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-settings-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-share-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-cart-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-upload-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-  &.#{$icon-prefix}-#{$icon-user-name}{
-    background-image: #{str-replace("url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E\")",'currentColor',$stroke-color)};
-  }
-}
Index: s/mini/_input_control.scss
===================================================================
--- css/mini/_input_control.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,317 +1,0 @@
-/*
-  Definitions for forms and input elements.
-*/
-// Different elements are styled based on the same set of rules.
-$input-group-name:           'input-group' !default;  // Class name for input groups.
-$_include-fluid-input-group: true !default;           // [Hidden] Should fluid input groups be included? (boolean)
-$input-group-fluid-name:     'fluid' !default;        // Class name for fluid input groups.
-$input-group-vertical-name:  'vertical' !default;     // Class name for vertical input groups.
-$input-group-mobile-breakpoint:   767px !default;     // Breakpoint for fluid input group mobile view.
-$button-class-name:           'button' !default;      // Class name for elements styled as buttons.
-$input-disabled-opacity:      0.75 !default;          // Opacity for input elements when disabled.
-$button-group-name:         'button-group' !default;  // Class name for button groups.
-$button-group-mobile-breakpoint: 767px !default;      // Mobile breakpoint for button groups.
-$form-back-color:             #f0f0f0 !default;       // Background color for forms.
-$form-fore-color:             #111 !default;          // Text color for forms.
-$form-border-color:           #ddd !default;          // Border color for forms.
-$input-back-color:            #f8f8f8 !default;       // Background color for input elements.
-$input-fore-color:            #111 !default;          // Text color for input elements.
-$input-border-color:          #ddd !default;          // Border color for input elements.
-$input-focus-color:           #0288d1 !default;       // Border color for focused input elements.
-$input-invalid-color:         #d32f2f !default;       // Border color for invalid input elements.
-$button-back-color:           #e2e2e2 !default;       // Background color for buttons.
-$button-hover-back-color:     #dcdcdc !default;       // Background color for buttons (hover).
-$button-fore-color:           #212121 !default;       // Text color for buttons.
-$button-border-color:         transparent !default;   // Border color for buttons.
-$button-hover-border-color:   transparent !default;   // Border color for buttons (hover).
-$button-group-border-color:  rgba(124,124,124, 0.54) !default;  // Border color for button groups.
-// CSS variable name definitions [exercise caution if modifying these]
-$form-back-color-var:         '--form-back-color' !default;
-$form-fore-color-var:         '--form-fore-color' !default;
-$form-border-color-var:       '--form-border-color' !default;
-$input-back-color-var:        '--input-back-color' !default;
-$input-fore-color-var:        '--input-fore-color' !default;
-$input-border-color-var:      '--input-border-color' !default;
-$input-focus-color-var:       '--input-focus-color' !default;
-$input-invalid-color-var:     '--input-invalid-color' !default;
-$button-back-color-var:       '--button-back-color' !default;
-$button-hover-back-color-var: '--button-hover-back-color' !default;
-$button-fore-color-var:       '--button-fore-color' !default;
-$button-border-color-var:       '--button-border-color' !default;
-$button-hover-border-color-var: '--button-hover-border-color' !default;
-$button-group-border-color-var: '--button-group-border-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $base-font-size:          1rem !default;        // Font sizing for all elements
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-// Check the `_input_control_mixins.scss` file to find this module's mixins.
-@import 'input_control_mixins';
-/* Input_control module CSS variable definitions */
-:root {
-  #{$form-back-color-var}: $form-back-color;
-  #{$form-fore-color-var}: $form-fore-color;
-  #{$form-border-color-var}: $form-border-color;
-  #{$input-back-color-var}: $input-back-color;
-  #{$input-fore-color-var}: $input-fore-color;
-  #{$input-border-color-var}: $input-border-color;
-  #{$input-focus-color-var}: $input-focus-color;
-  #{$input-invalid-color-var}: $input-invalid-color;
-  #{$button-back-color-var}: $button-back-color;
-  #{$button-hover-back-color-var}: $button-hover-back-color;
-  #{$button-fore-color-var}: $button-fore-color;
-  #{$button-border-color-var}: $button-border-color;
-  #{$button-hover-border-color-var}: $button-hover-border-color;
-  #{$button-group-border-color-var}: $button-group-border-color;
-}
-// Base form styling
-form {  // Text color is the default, this can be changed manually.
-  background: var(#{$form-back-color-var});
-  color: var(#{$form-fore-color-var});
-  border: $__1px solid var(#{$form-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: var(#{$universal-margin-var});
-  padding: calc(2 * var(#{$universal-padding-var})) var(#{$universal-padding-var});
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-}
-// Fieldset styling
-fieldset {
-  // Apply always to overwrite defaults for all of the below.
-  border: $__1px solid var(#{$form-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: calc(var(#{$universal-margin-var}) / 4);
-  padding: var(#{$universal-padding-var});
-}
-// Legend styling.
-legend {
-  // Edge fixes.
-  box-sizing: border-box;
-  display: table;
-  max-width: 100%;
-  white-space: normal;
-  // Actual styling.
-  font-weight: $bold-font-weight;
-  padding: calc(var(#{$universal-padding-var}) / 2);
-}
-// Label syling. - Basically just padding, but there might be more in the future.
-label {
-  padding: calc(var(#{$universal-padding-var}) / 2) var(#{$universal-padding-var});
-}
-// Input group styling.
-.#{$input-group-name} {
-  display: inline-block;
-  // Fluid input groups
-  @if $_include-fluid-input-group {
-    &.#{$input-group-fluid-name} {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      & > input {
-        max-width: 100%;
-        flex-grow: 1;
-        flex-basis: 0px;
-      }
-      // On mobile
-      @media screen and (max-width: #{$input-group-mobile-breakpoint}) {
-        align-items: stretch;
-        flex-direction: column;
-      }
-    }
-    // Vertical input groups
-    &.#{$input-group-vertical-name} {
-      display: flex;
-      align-items: stretch;
-      flex-direction: column;
-      & > input {
-        max-width: 100%;
-        flex-grow: 1;
-        flex-basis: 0px;
-      }
-    }
-  }
-}
-// Correct the cursor style of increment and decrement buttons in Chrome.
-[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-// Correct style in Chrome and Safari.
-[type="search"] {
-  -webkit-appearance: textfield;
-  outline-offset: -2px;
-}
-// Correct style in Chrome and Safari.
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-// Common textual input styling. - Avoid using box-shadow with these.
-input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"],
-[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select {
-  box-sizing: border-box;
-  // Background, color and border should not be unassigned, as the browser defaults will apply.
-  background: var(#{$input-back-color-var});
-  color: var(#{$input-fore-color-var});
-  border: $__1px solid var(#{$input-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: calc(var(#{$universal-margin-var}) / 2);
-  padding: var(#{$universal-padding-var}) calc(1.5 * var(#{$universal-padding-var}));
-}
-// Hover, focus, disabled, readonly, invalid styling for common textual inputs.
-input:not([type="button"]):not([type="submit"]):not([type="reset"]), textarea, select {
-  &:hover, &:focus {
-    border-color: var(#{$input-focus-color-var});
-    box-shadow: none;
-  }
-  &:invalid, &:focus:invalid{
-    border-color: var(#{$input-invalid-color-var});
-    box-shadow: none;
-  }
-  &[readonly]{
-    background: var(#{$secondary-back-color-var});
-  }
-}
-// Fix for select and option elements overflowing their parent container.
-select {
-  max-width: 100%;
-}
-option {
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-// Styling for checkboxes and radio buttons.
-[type="checkbox"], [type="radio"] {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none;
-  position: relative;
-  height: calc(#{$base-font-size} + var(#{$universal-padding-var}) / 2);
-  width: calc(#{$base-font-size} + var(#{$universal-padding-var}) / 2);
-  vertical-align: text-bottom;
-  padding: 0; // Remove padding added from previous styles.
-  flex-basis: calc(#{$base-font-size} + var(#{$universal-padding-var}) / 2) !important; // Override fluid input-group styling.
-  flex-grow: 0 !important;  // Using with fluid input-groups is not recommended.
-  &:checked:before {
-    position: absolute;
-  }
-}
-[type="checkbox"] {
-  &:checked:before {
-    content: '\2713';
-    font-family: sans-serif;
-    font-size: calc(#{$base-font-size} + var(#{$universal-padding-var}) / 2);
-    top: calc(0rem - var(#{$universal-padding-var}));
-    left: calc(var(#{$universal-padding-var}) / 4);
-  }
-}
-[type="radio"] {
-  border-radius: 100%;
-  &:checked:before {
-    border-radius: 100%;
-    content: '';
-    top: calc(#{$__1px} + var(#{$universal-padding-var}) / 2);
-    left: calc(#{$__1px} + var(#{$universal-padding-var}) / 2);
-    background: var(#{$input-fore-color-var});
-    width: 0.5rem;
-    height: 0.5rem;
-  }
-}
-// Placeholder styling (keep browser-specific definitions separated, they do not play well together).
-:placeholder-shown {
-  color: var(#{$input-fore-color-var});
-}
-::-ms-placeholder {
-  color: var(#{$input-fore-color-var});
-  opacity: 0.54;
-}
-// Definitions for the button and button-like elements.
-// Different elements are styled based on the same set of rules.
-// Reset for Firefox focusing on button elements.
-button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
-  border-style: none;
-  padding: 0;
-}
-// Fixes for Android 4, iOS and Safari.
-button, html [type="button"], [type="reset"], [type="submit"] {
-  -webkit-appearance: button;
-}
-// Other fixes.
-button {
-  overflow: visible;      // Show the overflow in IE.
-  text-transform: none;    // Remove inheritance of text-transform in Edge, Firefox, and IE.
-}
-// Default styling
-button, [type="button"], [type="submit"], [type="reset"],
-a.#{$button-class-name}, label.#{$button-class-name}, .#{$button-class-name},
-a[role="button"], label[role="button"], [role="button"] {
-  display: inline-block;
-  background: var(#{$button-back-color-var});
-  color: var(#{$button-fore-color-var});
-  border: $__1px solid var(#{$button-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  padding: var(#{$universal-padding-var}) calc(1.5 * var(#{$universal-padding-var}));
-  margin: var(#{$universal-margin-var});
-  text-decoration: none;
-  cursor: pointer;
-  transition: background 0.3s;
-  &:hover, &:focus {
-    background: var(#{$button-hover-back-color-var});
-    border-color: var(#{$button-hover-border-color-var});
-  }
-}
-// Disabled styling for input and button elements.
-input, textarea, select, button, .#{$button-class-name}, [role="button"] {
-  // .button[disabled] is actually higher specificity than a.button, so no need for more than that
-  &:disabled, &[disabled] {
-    cursor: not-allowed;
-    opacity: $input-disabled-opacity;
-  }
-}
-// Button group styling.
-.#{$button-group-name} {
-  display: flex;
-  border: $__1px solid var(#{$button-group-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: var(#{$universal-margin-var});
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  & > button, [type="button"], & > [type="submit"], & > [type="reset"],
-  & > .#{$button-class-name}, & > [role="button"] {
-    margin: 0;
-    max-width: 100%;
-    flex: 1 1 auto;
-    text-align: center;
-    border: 0;
-    border-radius: 0;
-    box-shadow: none;
-  }
-  & > :not(:first-child) {
-    border-left: $__1px solid var(#{$button-group-border-color-var});
-  }
-  // Responsiveness for button groups
-  @media screen and (max-width: #{$button-group-mobile-breakpoint}) {
-    flex-direction: column;
-    & > :not(:first-child) {
-      border: 0;    // Reapply to remove the left border from elements.
-      border-top: $__1px solid var(#{$button-group-border-color-var});
-    }
-  }
-}
Index: s/mini/_input_control_mixins.scss
===================================================================
--- css/mini/_input_control_mixins.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,46 +1,0 @@
-// Input_control module's mixin definitions are here. For the module itself
-// check `_input_control.scss`.
-// Button color variant mixin:
-//  $button-alt-name: The name of the class used for the button variant.
-//  $button-alt-back-color: Background color for button variant.
-//  $button-alt-hover-back-color: Background color for button variant (hover).
-//  $button-alt-fore-color: Text color for button variant.
-//  $button-alt-border-color: Border color for button variant.
-//  $button-alt-hover-border-color: Border color for button variant (hover).
-@mixin make-button-alt-color ($button-alt-name, $button-alt-back-color : $button-back-color,
-  $button-alt-hover-back-color : $button-hover-back-color, $button-alt-fore-color : $button-fore-color,
-  $button-alt-border-color : $button-border-color, $button-alt-hover-border-color : $button-hover-border-color) {
-    button, [type="button"], [type="submit"], [type="reset"], .#{$button-class-name}, [role="button"] {
-      &.#{$button-alt-name} {
-        @if $button-alt-back-color != $button-back-color {
-          #{$button-back-color-var}: $button-alt-back-color;
-        }
-        @if $button-alt-fore-color != $button-fore-color{
-          #{$button-fore-color-var}: $button-alt-fore-color;
-        }
-        @if $button-alt-border-color != $button-border-color{
-          #{$button-border-color-var}: $button-alt-border-color;
-        }
-        &:hover, &:focus {
-          @if $button-alt-hover-back-color != $button-hover-back-color{
-            #{$button-hover-back-color-var}: $button-alt-hover-back-color;
-          }
-          @if $button-alt-hover-border-color != $button-hover-border-color{
-            #{$button-hover-border-color-var}: $button-alt-hover-border-color;
-          }
-        }
-      }
-    }
-}
-// Button size variant mixin:
-//  $button-alt-name: The name of the class used for the button variant.
-//  $button-alt-padding: The padding of the button variant.
-//  $button-alt-margin The margin of the button variant.
-@mixin make-button-alt-size ($button-alt-name, $button-alt-padding, $button-alt-margin) {
-  button, [type="button"], [type="submit"], [type="reset"], .#{$button-class-name}, [role="button"] {
-    &.#{$button-alt-name} {
-      padding: $button-alt-padding;
-      margin: $button-alt-margin;
-    }
-  }
-}
Index: s/mini/_layout.scss
===================================================================
--- css/mini/_layout.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,199 +1,0 @@
-/*
-  Definitions for the grid system, cards and containers.
-*/
-// The grid system uses the flexbox module, meaning it might be incompatible with certain browsers.
-$_include-parent-layout:        true !default;        // [Hidden] Flag for rows defining column layouts (`true`/`false`).
-$grid-column-count:            12 !default;           // Number of columns in the grid (integer value only).
-$grid-container-name:          'container' !default;  // Class name for the grid system container.
-$grid-row-name:                'row' !default;        // Class name for the grid system rows.
-$grid-row-parent-layout-prefix:'cols' !default;       // Class name prefix for the grid's row parents.
-$grid-column-prefix:           'col' !default;        // Class name prefix for the grid's columns.
-$grid-column-offset-suffix:    'offset' !default;     // Class name suffix for the grid's offsets.
-$grid-order-normal-suffix:     'normal' !default;     // Class name suffix for grid columns with normal priority.
-$grid-order-first-suffix:      'first' !default;      // Class name suffix for grid columns with highest priority.
-$grid-order-last-suffix:       'last' !default;       // Class name suffix for grid columns with lowest priorty.
-$grid-small-prefix:            'sm' !default;         // Small screen class prefix for grid.
-$grid-medium-prefix:           'md' !default;         // Medium screen class prefix for grid.
-$grid-large-prefix:            'lg' !default;         // Large screen class prefix for grid.
-$grid-medium-breakpoint:       768px !default;        // Medium screen breakpoint for grid.
-$grid-large-breakpoint:        1280px !default;       // Large screen breakpoint for grid.
-$card-name:                    'card' !default;       // Class name for the cards.
-$card-section-name:            'section' !default;    // Class name for the cards' sections.
-$card-section-media-name:      'media' !default;      // Class name for the cards' sections (media cotent).
-$card-normal-width:            320px !default;        // Width for normal cards.
-$card-section-media-height:    200px !default;        // Height for cards' media sections.
-$card-fore-color:              #111 !default;         // Text color for the cards.
-$card-back-color:              #f8f8f8 !default;      // Background color for the cards.
-$card-border-color:            #ddd !default;         // Border color for the cards.
-// CSS variable name definitions [exercise caution if modifying these]
-$card-fore-color-var:          '--card-fore-color' !default;
-$card-back-color-var:          '--card-back-color' !default;
-$card-border-color-var:        '--card-border-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-// Check the `_layout_mixins.scss` file to find this module's mixins.
-@import 'layout_mixins';
-// Fluid grid system container definition.
-.#{$grid-container-name} {
-  margin: 0 auto;
-  padding: 0 calc(1.5 * var(#{$universal-padding-var}));
-}
-// Grid row definition.
-.#{$grid-row-name} {
-  box-sizing: border-box;
-  display: flex;
-  flex: 0 1 auto;
-  flex-flow: row wrap;
-}
-// Inline mixin, used to generate class definitions for each grid step.
-@mixin generate-grid-size ($size-prefix){
-  @if $_include-parent-layout {
-    .#{$grid-column-prefix}-#{$size-prefix},
-    [class^='#{$grid-column-prefix}-#{$size-prefix}-'],
-    [class^='#{$grid-column-prefix}-#{$size-prefix}-#{$grid-column-offset-suffix}-'],
-    .#{$grid-row-name}[class*='#{$grid-row-parent-layout-prefix}-#{$size-prefix}-'] > * {
-      box-sizing: border-box;
-      flex: 0 0 auto;
-      padding: 0 calc(var(#{$universal-padding-var}) / 2);
-    }
-    // Grid column specific definition for flexible column.
-    .#{$grid-column-prefix}-#{$size-prefix},
-    .#{$grid-row-name}.#{$grid-row-parent-layout-prefix}-#{$size-prefix} > *  {
-      max-width: 100%;
-      flex-grow: 1;
-      flex-basis: 0;
-    }
-  }
-  @else {
-    // Grid column generic definitions.
-    .#{$grid-column-prefix}-#{$size-prefix},
-    [class^='#{$grid-column-prefix}-#{$size-prefix}-'],
-    [class^='#{$grid-column-prefix}-#{$size-prefix}-#{$grid-column-offset-suffix}-'] {
-      flex: 0 0 auto;
-      padding: 0 calc(var(#{$universal-padding-var}) / 2);
-    }
-    // Grid column specific definition for flexible column.
-    .#{$grid-column-prefix}-#{$size-prefix} {
-      max-width: 100%;
-      flex-grow: 1;
-      flex-basis: 0;
-    }
-  }
-  // Grid column specific definitions for predefined columns.
-  @for $i from 1 through $grid-column-count {
-    @if $_include-parent-layout {
-      .#{$grid-column-prefix}-#{$size-prefix}-#{$i},
-      .#{$grid-row-name}.#{$grid-row-parent-layout-prefix}-#{$size-prefix}-#{$i} > * {
-        max-width: #{($i * 100% / $grid-column-count)};
-        flex-basis: #{($i * 100% / $grid-column-count)};
-      }
-    }
-    @else {
-      .#{$grid-column-prefix}-#{$size-prefix}-#{$i} {
-        max-width: #{($i * 100% / $grid-column-count)};
-        flex-basis: #{($i * 100% / $grid-column-count)};
-      }
-    }
-    // Offest definitions.
-    .#{$grid-column-prefix}-#{$size-prefix}-#{$grid-column-offset-suffix}-#{($i - 1)} {
-      @if ($i - 1) == 0 {
-        margin-left: 0;
-      }
-      @else {
-        margin-left: #{(($i - 1) * 100% / $grid-column-count)};
-      }
-    }
-  }
-  // Reordering definitions.
-  .#{$grid-column-prefix}-#{$size-prefix}-#{$grid-order-normal-suffix} {
-    order: initial;
-  }
-  .#{$grid-column-prefix}-#{$size-prefix}-#{$grid-order-first-suffix}  {
-    order: -999;
-  }
-  .#{$grid-column-prefix}-#{$size-prefix}-#{$grid-order-last-suffix} {
-    order: 999;
-  }
-}
-// Definitions for smaller screens.
-@include generate-grid-size($grid-small-prefix);
-// Definitions for medium screens.
-@media screen and (min-width: #{$grid-medium-breakpoint}){
-  @include generate-grid-size($grid-medium-prefix);
-}
-// Definitions for large screens.
-@media screen and (min-width: #{$grid-large-breakpoint}){
-  @include generate-grid-size($grid-large-prefix);
-}
-/* Card component CSS variable definitions */
-:root {
-  #{$card-back-color-var}: $card-back-color;
-  #{$card-fore-color-var}: $card-fore-color;
-  #{$card-border-color-var}: $card-border-color;
-}
-// Card styling
-.#{$card-name} {
-  // New syntax
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  align-self: center;
-  position: relative;
-  width: 100%;
-  // Actual styling for the cards
-  background: var(#{$card-back-color-var});
-  color: var(#{$card-fore-color-var});
-  border: $__1px solid var(#{$card-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: var(#{$universal-margin-var});
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  overflow: hidden;   // Hide overflow from section borders
-  // Responsiveness (if the screen is larger than card, set max-width)
-  @media screen and (min-width: #{$card-normal-width}) {
-    max-width: $card-normal-width;
-  }
-  // Card sections
-  & > .#{$card-section-name} {
-    // Reapply background and foreground colors, so that mixins can be applied properly.
-    background: var(#{$card-back-color-var});
-    color: var(#{$card-fore-color-var});
-    box-sizing: border-box;
-    margin: 0;
-    border: 0;        // Clean borders and radiuses for any element-based sections
-    border-radius: 0; // Clean borders and radiuses for any element-based sections
-    border-bottom: $__1px solid var(#{$card-border-color-var});
-    padding: var(#{$universal-padding-var});
-    width: 100%;
-    // Card media sections
-    &.#{$card-section-media-name} {
-      height: $card-section-media-height;
-      padding: 0;
-      -o-object-fit: cover;
-         object-fit: cover;
-    }
-  }
-  // Card sections - last
-  & > .#{$card-section-name}:last-child {
-    border-bottom: 0;  // Clean the extra border for last section
-  }
-}
Index: s/mini/_layout_mixins.scss
===================================================================
--- css/mini/_layout_mixins.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,62 +1,0 @@
-// Layout (card) module's mixin definitions are here. For the module itself
-// check `_layout.scss`.
-// Mixin for alternate card sizes:
-//  $card-alt-size-name: The name of the class used for the alternate size card.
-//  $card-alt-size-width: The width of the alternate size card.
-@mixin make-card-alt-size ($card-alt-size-name, $card-alt-size-width) {
-  @if type-of($card-alt-size-width) == 'number' and unit($card-alt-size-width) == '%' {
-    .#{$card-name}.#{$card-alt-size-name} {
-      max-width: $card-alt-size-width;
-      width: auto;
-    }
-  }
-  @else {
-    @media screen and (min-width: #{$card-alt-size-width}) {
-      .#{$card-name}.#{$card-alt-size-name} {
-        max-width: $card-alt-size-width;
-      }
-    }
-  }
-}
-// Mixin for alternate cards (card color variants):
-//  $card-alt-name: The name of the class used for the alternate card.
-//  $card-alt-back-color: The background color of the alternate card.
-//  $card-alt-fore-color: The text color of the alternate card.
-//  $card-alt-border-color: The border style of the alternate card.
-@mixin make-card-alt-color ($card-alt-name, $card-alt-back-color : $card-back-color,
-  $card-alt-fore-color : $card-fore-color, $card-alt-border-color : $card-border-color) {
-  .#{$card-name}.#{$card-alt-name} {
-    @if $card-alt-back-color != $card-back-color {
-      #{$card-back-color-var}: $card-alt-back-color;
-    }
-    @if $card-alt-fore-color != $card-fore-color {
-      #{$card-fore-color-var}: $card-alt-fore-color;
-    }
-    @if $card-alt-border-color != $card-border-color {
-      #{$card-border-color-var}: $card-alt-border-color;
-    }
-  }
-}
-// Mixin for alternate card sections (card section color variants):
-//  $card-section-alt-name: The name of the class used for the alternate card section.
-//  $card-section-alt-back-color: The background color of the alternate card section.
-//  $card-section-alt-fore-color: The text color of the alternate card section.
-@mixin make-card-section-alt-color ($card-section-alt-name, $card-section-alt-back-color : $card-back-color,
-  $card-section-alt-fore-color : $card-fore-color) {
-  .#{$card-name} > .#{$card-section-name}.#{$card-section-alt-name} {
-    @if $card-section-alt-back-color != $card-back-color {
-      #{$card-back-color-var}: $card-section-alt-back-color;
-    }
-    @if $card-section-alt-fore-color != $card-fore-color {
-      #{$card-fore-color-var}: $card-section-alt-fore-color;
-    }
-  }
-}
-// Mixin for alternate card sections (card section padding variants):
-//  $card-section-alt-name: The name of the class used for the alternate card section.
-//  $card-section-alt-padding: The padding of the alternate card section.
-@mixin make-card-section-alt-style ($card-section-alt-name, $card-section-alt-padding) {
-  .#{$card-name} > .#{$card-section-name}.#{$card-section-alt-name} {
-    padding: $card-section-alt-padding;
-  }
-}
Index: s/mini/_navigation.scss
===================================================================
--- css/mini/_navigation.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,314 +1,0 @@
-/*
-  Definitions for navigation elements.
-*/
-// Different elements are styled based on the same set of rules.
-$header-height:     3.1875rem !default;      // Height of the header element.
-$header-back-color: #f8f8f8 !default;        // Background color for the header element.
-$header-hover-back-color: #f0f0f0 !default;  // Background color for the header element (hover).
-$header-fore-color:   #444 !default;         // Text color for the header element.
-$header-border-color: #ddd !default;         // Border color for the header element.
-$nav-back-color:      #f8f8f8 !default;      // Background color for the nav element.
-$nav-hover-back-color: #f0f0f0 !default;     // Background color for the nav element (hover).
-$nav-fore-color:      #444 !default;         // Text color for the nav element.
-$nav-border-color:    #ddd !default;         // Border color for the nav element.
-$nav-link-color:      #0277bd !default;      // Color for link in the nav element.
-$footer-fore-color:   #444 !default;         // Text color for the footer element.
-$footer-back-color:   #f8f8f8 !default;      // Background color for footer nav element.
-$footer-border-color: #ddd !default;         // Border color for the footer element.
-$footer-link-color:   #0277bd !default;      // Color for link in the footer element.
-$drawer-back-color:   #f8f8f8 !default;      // Background color for the drawer component.
-$drawer-border-color: #ddd !default;         // Border color for the drawer component.
-$drawer-hover-back-color: #f0f0f0 !default;  // Background color for the drawer component's close (hover).
-$drawer-close-color:  #444 !default;         // Color of the close element for the drawer component.
-$_header-only-bottom-border:  true !default; // [Hidden] Apply styling only to the bottom border of header? (boolean)
-$_header-links-uppercase:     true !default; // [Hidden] Should header links and buttons be uppercase? (boolean)
-$header-logo-name:    'logo' !default;       // Class name for the header logo element.
-$header-logo-font-size: 1.75rem !default;    // Font ize for the header logo element.
-$nav-sublink-prefix:   'sublink' !default;   // Prefix for the subcategory tabs in nav.
-$nav-sublink-depth:    2 !default;           // Amount of subcategory classes to add.
-$_footer-only-top-border:  true !default;    // [Hidden] Apply styling only to the top border of footer? (boolean)
-$footer-font-size:    0.875rem !default;     // Font size for text in footer element.
-$sticky-name:         'sticky' !default;     // Class name for sticky headers and footers.
-$drawer-name:         'drawer' !default;     // Class name for the drawer component.
-$drawer-toggle-name: 'drawer-toggle' !default; // Class name for the drawer component's toggle.
-$drawer-toggle-font-size: 1.5em !default;    // Font size for the drawer component's toggle. (prefer em units)
-$drawer-mobile-breakpoint: 768px !default;   // Mobile breakpoint for the drawer component.
-$_drawer-right:     true !default;           // [Hidden] Should the drawer appear on the right side of the screen?
-$drawer-persistent-name: 'persistent' !default; // Class name for the persisten variant of the drawer component.
-$drawer-width:      320px !default;          // Width of the drawer component.
-$drawer-close-name: 'drawer-close' !default; // Class name of the close element for the drawer component.
-$drawer-close-size: 2rem !default;           // Size of the close element for the drawer component.
-// CSS variable name definitions [exercise caution if modifying these]
-$header-fore-color-var:          '--header-fore-color' !default;
-$header-back-color-var:          '--header-back-color' !default;
-$header-hover-back-color-var:    '--header-hover-back-color' !default;
-$header-border-color-var:        '--header-border-color' !default;
-$nav-fore-color-var:             '--nav-fore-color' !default;
-$nav-back-color-var:             '--nav-back-color' !default;
-$nav-hover-back-color-var:       '--nav-hover-back-color' !default;
-$nav-border-color-var:           '--nav-border-color' !default;
-$nav-link-color-var:             '--nav-link-color' !default;
-$footer-fore-color-var:          '--footer-fore-color' !default;
-$footer-back-color-var:          '--footer-back-color' !default;
-$footer-border-color-var:        '--footer-border-color' !default;
-$footer-link-color-var:          '--footer-link-color' !default;
-$drawer-back-color-var:          '--drawer-back-color' !default;
-$drawer-border-color-var:        '--drawer-border-color' !default;
-$drawer-hover-back-color-var:    '--drawer-hover-back-color' !default;
-$drawer-close-color-var:         '--drawer-close-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-/* Navigation module CSS variable definitions */
-:root {
-  #{$header-back-color-var}: $header-back-color;
-  #{$header-hover-back-color-var}: $header-hover-back-color;
-  #{$header-fore-color-var}: $header-fore-color;
-  #{$header-border-color-var}: $header-border-color;
-  #{$nav-back-color-var}: $nav-back-color;
-  #{$nav-hover-back-color-var}: $nav-hover-back-color;
-  #{$nav-fore-color-var}: $nav-fore-color;
-  #{$nav-border-color-var}: $nav-border-color;
-  #{$nav-link-color-var}: $nav-link-color;
-  #{$footer-fore-color-var}: $footer-fore-color;
-  #{$footer-back-color-var}: $footer-back-color;
-  #{$footer-border-color-var}: $footer-border-color;
-  #{$footer-link-color-var}: $footer-link-color;
-  #{$drawer-back-color-var}: $drawer-back-color;
-  #{$drawer-hover-back-color-var}: $drawer-hover-back-color;
-  #{$drawer-border-color-var}: $drawer-border-color;
-  #{$drawer-close-color-var}: $drawer-close-color;
-}
-// Header styling. - No box-shadow as it causes lots of weird bugs in Chrome. No margin as it shouldn't have any.
-header {
-  height: $header-height;
-  background: var(#{$header-back-color-var}); // Always apply background color to avoid shine through
-  color: var(#{$header-fore-color-var});
-  @if $_header-only-bottom-border {
-    border-bottom: $__1px solid var(#{$header-border-color-var});
-  }
-  @else {
-    border: $__1px solid var(#{$header-border-color-var});
-  }
-  padding: calc(var(#{$universal-padding-var}) / 4) 0;
-  // Responsiveness for smaller displays, scrolls horizontally.
-  white-space: nowrap;
-  overflow-x: auto;
-  overflow-y: hidden;
-  // Fix for responsive header, using the grid system's row and column alignment.
-  &.#{$grid-row-name} {
-    box-sizing: content-box;
-  }
-  // Header logo styling.
-  .#{$header-logo-name} {
-    color: var(#{$header-fore-color-var});
-    font-size: $header-logo-font-size;
-    padding: var(#{$universal-padding-var}) calc(2 * var(#{$universal-padding-var}));
-    text-decoration: none;
-  }
-  // Link styling.
-  button, [type="button"], .#{$button-class-name}, [role="button"] {
-    box-sizing: border-box;
-    position: relative;
-    top: calc(0rem - var(#{$universal-padding-var}) / 4);  // Use universal-padding to offset the padding of the header.
-    height: calc(#{$header-height} + var(#{$universal-padding-var}) / 2);  // Fill header.
-    background: var(#{$header-back-color-var});        // Apply color regardless to override styling from other things.
-    line-height: calc(#{$header-height} - var(#{$universal-padding-var}) * 1.5);
-    text-align: center;
-    color: var(#{$header-fore-color-var});
-    border: 0;
-    border-radius: 0;
-    margin: 0;
-    @if $_header-links-uppercase {
-      text-transform: uppercase;
-    }
-    &:hover, &:focus {
-      background: var(#{$header-hover-back-color-var});
-    }
-  }
-}
-// Navigation sidebar styling.
-nav {
-  background: var(#{$nav-back-color-var});
-  color: var(#{$nav-fore-color-var});
-  border: $__1px solid var(#{$nav-border-color-var});
-  border-radius: var(#{$universal-border-radius-var});
-  margin: var(#{$universal-margin-var});
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  * {
-    padding: var(#{$universal-padding-var}) calc(1.5 * var(#{$universal-padding-var}));
-  }
-  a, a:visited {
-    display: block;
-    color: var(#{$nav-link-color-var});    // Apply regardless to de-stylize visited links.
-    border-radius: var(#{$universal-border-radius-var});
-    transition: background 0.3s;
-    &:hover, &:focus {
-      text-decoration: none;
-      background: var(#{$nav-hover-back-color-var});
-    }
-  }
-  // Subcategories in navigation.
-  @for $i from 1 through $nav-sublink-depth {
-    .#{$nav-sublink-prefix}-#{$i} {
-      position: relative;
-      margin-left: calc(#{$i * 2} * var(#{$universal-padding-var}));
-      &:before {
-        position: absolute;
-        left: calc(var(#{$universal-padding-var}) - #{1 + ($i - 1)*2} * var(#{$universal-padding-var}));
-        top: -#{$__1px};
-        content: '';
-        height: 100%;
-        border: $__1px solid var(#{$nav-border-color-var});
-        border-left: 0;
-      }
-    }
-  }
-}
-// Footer styling.
-footer {
-  background: var(#{$footer-back-color-var}); // Always apply background color to avoid shine through
-  color: var(#{$footer-fore-color-var});
-  @if $_footer-only-top-border {
-    border-top: $__1px solid var(#{$footer-border-color-var});
-  }
-  @else {
-    border: $__1px solid var(#{$footer-border-color-var});
-  }
-  // margin: $footer-margin;
-  padding: calc(2 * var(#{$universal-padding-var})) var(#{$universal-padding-var});
-  font-size: $footer-font-size;
-  a, a:visited {
-    color: var(#{$footer-link-color-var});
-  }
-}
-// Definitions for sticky headers and footers.
-header.#{$sticky-name} {
-  position: -webkit-sticky; // One of the rare instances where prefixes are necessary.
-  position: sticky;
-  z-index: 1101;  // Deals with certain problems when combined with cards and tables.
-  top: 0;
-}
-footer.#{$sticky-name} {
-  position: -webkit-sticky; // One of the rare instances where prefixes are necessary.
-  position: sticky;
-  z-index: 1101;  // Deals with certain problems when combined with cards and tables.
-  bottom: 0;
-}
-// Responsive drawer component.
-.#{$drawer-toggle-name} {
-  &:before {  // No color specified, should use the color of its surroundings!
-    display: inline-block;
-    position: relative;
-    vertical-align: bottom;
-    content: '\00a0\2261\00a0'; // Spaces ensure compatibility with buttons that have text and that textless buttons will have some extra padding.
-    font-family: sans-serif;
-    font-size: $drawer-toggle-font-size;   // Almost hardcoded, should be fully compatible with its surroundings.
-  }
-  @media screen and (min-width: #{$drawer-mobile-breakpoint}){
-    &:not(.#{$drawer-persistent-name}) {
-      display: none;
-    }
-  }
-}
-[type="checkbox"].#{$drawer-name} {
-  height: 1px;
-  width: 1px;
-  margin: -1px;
-  overflow: hidden;
-  position: absolute;
-  clip: rect(0 0 0 0);
-  -webkit-clip-path: inset(100%);
-  clip-path: inset(100%);
-  + * {
-    display: block;
-    box-sizing: border-box;
-    position: fixed;
-    top: 0;
-    width: $drawer-width;
-    height: 100vh;
-    overflow-y: auto;
-    background: var(#{$drawer-back-color-var});
-    border: $__1px solid var(#{$drawer-border-color-var});
-    border-radius: 0; // Set to 0 to override the value from `nav`.
-    margin: 0;        // Set to 0 to override the value from `nav`.
-    @if $universal-box-shadow != none {
-      box-shadow: var(#{$universal-box-shadow-var});
-    }
-    z-index: 1110;
-    @if $_drawer-right {
-      right: -$drawer-width;
-      transition: right 0.3s;
-    }
-    @else {
-      left: -$drawer-width;
-      transition: left 0.3s;
-    }
-    & .#{$drawer-close-name} {
-      position: absolute;
-      top: var(#{$universal-margin-var});
-      right: var(#{$universal-margin-var});
-      z-index: 1111;
-      width: $drawer-close-size;
-      height: $drawer-close-size;
-      border-radius: var(#{$universal-border-radius-var});
-      padding: var(#{$universal-padding-var});
-      margin: 0; // Fixes the offset from label
-      cursor: pointer;
-      transition: background 0.3s;
-      &:before {    // Transparent background unless hovered over. Does not block text behind it.
-        display: block;
-        content: '\00D7';
-        color: var(#{$drawer-close-color-var});
-        position: relative;
-        font-family: sans-serif;
-        font-size: $drawer-close-size;
-        line-height: 1;   // Setting to 1 seems to center the 'X' properly.
-        text-align: center;
-      }
-      &:hover, &:focus {
-        background: var(#{$drawer-hover-back-color-var});
-      }
-    }
-    @media screen and (max-width: #{$drawer-width}) {
-      width: 100%;
-    }
-  }
-  &:checked + * {
-    @if $_drawer-right {
-      right: 0;
-    }
-    @else {
-      left: 0;
-    }
-  }
-  @media screen and (min-width: #{$drawer-mobile-breakpoint}){
-    &:not(.#{$drawer-persistent-name}) + * {
-      position: static;
-      height: 100%;
-      z-index: 1100;
-      & .#{$drawer-close-name} {
-        display: none;
-      }
-    }
-  }
-}
Index: s/mini/_progress.scss
===================================================================
--- css/mini/_progress.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
-  Definitions for progress elements and spinners.
-*/
-$progress-back-color:     #ddd !default;           // Background color of <progress>.
-$progress-fore-color:     #555 !default;           // Foreground color of <progress>.
-$progress-height:         0.75rem !default;        // Height of <progress>.
-$progress-max-value:      1000 !default;           // Arithmetic max value of <progress> - use integer values.
-$progress-inline-name:    'inline' !default;       // Class name for inline <progress> elements.
-$progress-inline-width:   60% !default;            // Width of inline <progress> elements.
-$_include-spinner-donut:  true !default;           // [Hidden] Should spinner donuts be included? (boolean)
-$spinner-donut-name:      'spinner' !default;      // Class name for spinner donuts
-$spinner-donut-size:      1.25rem !default;        // Size of the spinner donuts
-$spinner-donut-border-thickness: 0.25rem !default; // Border thickness for spinner donuts
-$spinner-donut-back-color:     #ddd !default;      // Background color for spinner donuts
-$spinner-donut-fore-color:     #555 !default;      // Foreground color for spinner donuts
-// CSS variable name definitions [exercise caution if modifying these]
-$progress-back-color-var: '--progress-back-color' !default;
-$progress-fore-color-var: '--progress-fore-color' !default;
-$spinner-donut-back-color-var: '--spinner-back-color' !default;
-$spinner-donut-fore-color-var: '--spinner-fore-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-// Check the `_progress_mixins.scss` file to find this module's mixins.
-@import '_progress_mixins';
-/* Progess module CSS variable definitions */
-:root {
-  #{$progress-back-color-var}: $progress-back-color;
-  #{$progress-fore-color-var}: $progress-fore-color;
-}
-// Default styling for progress. Use mixins for alternate styles
-progress {
-  display: block;
-  vertical-align: baseline; // Correct vertical alignment in some browsers.
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none;
-  height: $progress-height;
-  width: calc(100% - 2 * var(#{$universal-margin-var}));
-  margin: var(#{$universal-margin-var});
-  border: 0; // Removes default border
-  border-radius: calc(2 * var(#{$universal-border-radius-var}));
-  @if $universal-box-shadow != none {
-    box-shadow: var(#{$universal-box-shadow-var});
-  }
-  background: var(#{$progress-back-color-var});
-  color: var(#{$progress-fore-color-var});
-  // Foreground color on webkit browsers
-  &::-webkit-progress-value {
-    background: var(#{$progress-fore-color-var});
-    border-top-left-radius: calc(2 * var(#{$universal-border-radius-var}));
-    border-bottom-left-radius: calc(2 * var(#{$universal-border-radius-var}));
-  }
-  // Background color on webkit browser
-  &::-webkit-progress-bar {
-    background: var(#{$progress-back-color-var});
-  }
-  // Foreground color on Firefox
-  &::-moz-progress-bar {
-    background: var(#{$progress-fore-color-var});
-    border-top-left-radius: calc(2 * var(#{$universal-border-radius-var}));
-    border-bottom-left-radius: calc(2 * var(#{$universal-border-radius-var}));
-  }
-  &[value="#{$progress-max-value}"] {
-    &::-webkit-progress-value {
-      border-radius: calc(2 * var(#{$universal-border-radius-var}));
-    }
-    &::-moz-progress-bar {
-      border-radius: calc(2 * var(#{$universal-border-radius-var}));
-    }
-  }
-  &.#{$progress-inline-name} {
-    display: inline-block;
-    vertical-align: middle;   // Align progress bar vertically to look better with text next to it.
-    width: $progress-inline-width;
-  }
-}
-// Style for donut spinner
-@if $_include-spinner-donut {
-  :root {
-    #{$spinner-donut-back-color-var}: $spinner-donut-back-color;
-    #{$spinner-donut-fore-color-var}: $spinner-donut-fore-color;
-  }
-  // Donut spinner animation
-  @keyframes spinner-donut-anim {
-    0% { transform: rotate(0deg); }
-    100% { transform: rotate(360deg);}
-  }
-  .#{$spinner-donut-name} {
-    display: inline-block;
-    margin: var(#{$universal-margin-var});
-    border: $spinner-donut-border-thickness solid var(#{$spinner-donut-back-color-var});
-    border-left: $spinner-donut-border-thickness solid var(#{$spinner-donut-fore-color-var});
-    border-radius: 50%;
-    width: $spinner-donut-size;
-    height: $spinner-donut-size;
-    animation: spinner-donut-anim 1.2s linear infinite;
-  }
-}
Index: s/mini/_progress_mixins.scss
===================================================================
--- css/mini/_progress_mixins.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// Progress module's mixin definitions are here. For the module itself
-// check `progress.scss`.
-// Progress color variant mixin:
-//  $progress-alt-name: The name of the class used for the <progress> variant.
-//  $progress-alt-fore-color: Foregound color for <progress> variant.
-//  $progress-alt-back-color: Background color for <progress> variant.
-@mixin make-progress-alt-color ($progress-alt-name, $progress-alt-fore-color : $progress-fore-color,
-  $progress-alt-back-color : $progress-back-color) {
-  progress.#{$progress-alt-name} {
-    @if $progress-alt-fore-color != $progress-fore-color{
-      #{$progress-fore-color-var}: $progress-alt-fore-color;
-    }
-    @if $progress-alt-back-color != $progress-back-color {
-      #{$progress-back-color-var}: $progress-alt-back-color;
-    }
-  }
-}
-// Spinner donut color variant mixin:
-//  $spinner-donut-alt-name: The name of the class used for the spinner donut variant.
-//  $spinner-donut-alt-fore-color: Text color for spinner donut variant.
-//  $spinner-donut-alt-back-color: Background color for spinner donut variant.
-@mixin make-spinner-donut-alt-color ($spinner-donut-alt-name, $spinner-donut-alt-fore-color : $spinner-donut-fore-color,
-  $spinner-donut-alt-back-color : $spinner-donut-back-color) {
-  .#{$spinner-donut-name}.#{$spinner-donut-alt-name} {
-    @if $spinner-donut-alt-fore-color != $spinner-donut-fore-color{
-      #{$spinner-donut-fore-color-var}: $spinner-donut-alt-fore-color;
-    }
-    @if $spinner-donut-alt-back-color != $spinner-donut-back-color {
-      #{$spinner-donut-back-color-var}: $spinner-donut-alt-back-color;
-    }
-  }
-}
Index: s/mini/_table.scss
===================================================================
--- css/mini/_table.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,372 +1,0 @@
-/*
-  Definitions for the responsive table component.
-*/
-// The tables use the common table elements and syntax - <tfoot> is not supported.
-$table-mobile-breakpoint:     768px !default;       // Breakpoint for <table> mobile view.
-$table-max-height:            400px !default;       // Maximum height of <table> elements (non-horizontal).
-$table-caption-font-size:     1.5rem !default;      // Font size for <caption> elements.
-$table-mobile-card-label:  'data-label' !default;   // Attribute used to replace column headers in mobile view.
-$table-mobile-label-font-weight: 600 !default;      // Font weight for column header labels in mobile view.
-$table-border-color:           #aaa !default;       // Border color for <table> elements.
-$table-border-separator-color: #666 !default;       // Border color for the border between <thead> and <tbody>.
-$table-th-back-color:          #e6e6e6 !default;    // Background color for <th> elements.
-$table-th-fore-color:          #111 !default;       // Text color for <th> elements.
-$table-td-back-color:          #f8f8f8 !default;    // Background color for <td> elements.
-$table-td-fore-color:          #111 !default;       // Text color for <td> elements.
-$_include-horizontal-table:    true !default;       // [Hidden] Flag for horizontal tables (`true`/`false`).
-$table-horizontal-name: 'horizontal' !default;      // Class name for horizontal <table> elements.
-$_include-striped-table:       true !default;       // [Hidden] Flag for striped tables.
-$table-striped-name: 'striped' !default;            // Class name for striped <table> elements.
-$table-td-alt-back-color:      #eee !default;       // Alternative background color for <td> elements in striped tables.
-$_include-hoverable-table:     true !default;       // [Hidden] Flag for striped tables.
-$table-hoverable-name: 'hoverable' !default;        // Class name for hoverable <table> elements.
-$table-td-hover-back-color:    #90caf9 !default;    // Hover background color for <td> elements in hoverable tables.
-// CSS variable name definitions [exercise caution if modifying these]
-$table-border-color-var:           '--table-border-color' !default;
-$table-border-separator-color-var: '--table-border-separator-color' !default;
-$table-th-back-color-var:          '--table-head-back-color' !default;
-$table-th-fore-color-var:          '--table-head-fore-color' !default;
-$table-td-back-color-var:          '--table-body-back-color' !default;
-$table-td-fore-color-var:          '--table-body-fore-color' !default;
-$table-td-alt-back-color-var:      '--table-body-alt-back-color' !default;
-$table-td-hover-back-color-var:      '--table-body-hover-back-color' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-/* Table module CSS variable definitions. */
-:root {
-  #{$table-border-color-var}: $table-border-color;
-  #{$table-border-separator-color-var}: $table-border-separator-color;
-  #{$table-th-back-color-var}: $table-th-back-color;
-  #{$table-th-fore-color-var}: $table-th-fore-color;
-  #{$table-td-back-color-var}: $table-td-back-color;
-  #{$table-td-fore-color-var}: $table-td-fore-color;
-  #{$table-td-alt-back-color-var}: $table-td-alt-back-color;
-}
-// Desktop view (scrollable vertical tables).
-table {
-  border-collapse: separate;
-  border-spacing: 0;
-  margin: 0;
-  display: flex;
-  flex: 0 1 auto;
-  flex-flow: row wrap;
-  padding: var(#{$universal-padding-var});
-  padding-top: 0;
-  @if not($_include-horizontal-table) {
-    overflow: auto;
-    max-height: $table-max-height;
-  }
-  caption {
-    font-size: $table-caption-font-size;
-    margin: calc(2 * var(#{$universal-margin-var})) 0;
-    max-width: 100%;
-    flex: 0 0 100%;
-  }
-  thead, tbody {
-    display: flex;
-    flex-flow: row wrap;
-    border: $__1px solid var(#{$table-border-color-var});
-    @if not($_include-horizontal-table) {
-      max-width: 100%;
-      flex: 0 0 100%;
-    }
-  }
-  thead {
-    z-index: 999;  // Fixes the visibility of the element.
-    border-radius: var(#{$universal-border-radius-var}) var(#{$universal-border-radius-var}) 0 0;
-    border-bottom: $__1px solid var(#{$table-border-separator-color-var});
-    @if not($_include-horizontal-table) {
-      position: sticky;
-      top: 0;
-    }
-  }
-  tbody {
-    border-top: 0;
-    margin-top: calc(0 - var(#{$universal-margin-var}));
-    border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius);
-  }
-  tr {
-    display: flex;
-    padding: 0; // Apply always to overwrite default.
-    @if not($_include-horizontal-table) {
-      flex-flow: row wrap;
-      flex: 0 0 100%;
-    }
-  }
-  th, td {
-    padding: calc(2 * var(#{$universal-padding-var}));    // Apply always to overwrite default.
-    @if not($_include-horizontal-table) {
-      flex: 1 0 0%;
-      overflow: hidden;
-      text-overflow: ellipsis;
-    }
-  }
-  th {
-    text-align: left;
-    background: var(#{$table-th-back-color-var});
-    color: var(#{$table-th-fore-color-var});
-  }
-  td {
-    background: var(#{$table-td-back-color-var});
-    color: var(#{$table-td-fore-color-var});
-    border-top: $__1px solid var(#{$table-border-color-var});
-  }
-  @if not($_include-horizontal-table) {
-    tbody tr:first-child td {
-      border-top: 0;
-    }
-  }
-}
-// Styling for horizontal tables
-@if $_include-horizontal-table {
-  table:not(.#{$table-horizontal-name}) {
-    overflow: auto;
-    max-height: $table-max-height;
-    thead, tbody {
-      max-width: 100%;
-      flex: 0 0 100%;
-    }
-    tr {
-      flex-flow: row wrap;
-      flex: 0 0 100%;
-    }
-    th, td {
-      flex: 1 0 0%;
-      overflow: hidden;
-      text-overflow: ellipsis;
-    }
-    thead {
-      position: sticky;
-      top: 0;
-    }
-    tbody tr:first-child td {
-      border-top: 0;
-    }
-  }
-  table.#{$table-horizontal-name} {
-    border: 0;
-    thead, tbody {
-      border: 0;
-      flex: .2 0 0;
-      flex-flow: row nowrap;
-    }
-    tbody {
-      overflow: auto;
-      justify-content: space-between;
-      flex: .8 0 0;
-      margin-left: 0;
-      padding-bottom: calc(var(#{$universal-padding-var}) / 4);
-    }
-    tr {
-      flex-direction: column;
-      flex: 1 0 auto;
-    }
-    th, td {
-      width: auto;
-      border: 0;
-      border-bottom: $__1px solid var(#{$table-border-color-var});
-      &:not(:first-child){
-        border-top: 0;
-      }
-    }
-    th {
-      text-align: right;
-      border-left: $__1px solid var(#{$table-border-color-var});
-      border-right: $__1px solid var(#{$table-border-separator-color-var});
-    }
-    thead {
-      tr:first-child {
-        padding-left: 0;
-      }
-    }
-    th:first-child, td:first-child {
-      border-top: $__1px solid var(#{$table-border-color-var});
-    }
-    tbody tr:last-child td {
-      border-right: $__1px solid var(#{$table-border-color-var});
-      &:first-child{
-        border-top-right-radius: 0.25rem;
-      }
-      &:last-child{
-        border-bottom-right-radius: 0.25rem;
-      }
-    }
-    thead tr:first-child th {
-      &:first-child{
-        border-top-left-radius: 0.25rem;
-      }
-      &:last-child{
-        border-bottom-left-radius: 0.25rem;
-      }
-    }
-  }
-}
-// Mobile
-@media screen and (max-width: #{$table-mobile-breakpoint - 1px}){
-  @if $_include-horizontal-table {
-    table, table.#{$table-horizontal-name} {
-      border-collapse: collapse;
-      border: 0;
-      width: 100%;
-      display: table;
-      // Accessibility (element is not visible, but screen readers read it normally)
-      thead, th {
-        border: 0;
-        height: 1px;
-        width: 1px;
-        margin: -1px;
-        overflow: hidden;
-        padding: 0;
-        position: absolute;
-        clip: rect(0 0 0 0);
-        -webkit-clip-path: inset(100%);
-        clip-path: inset(100%);
-      }
-      tbody {
-        border: 0;
-        display: table-row-group;
-      }
-      tr {
-        display: block;
-        border: $__1px solid var(#{$table-border-color-var});
-        border-radius: var(#{$universal-border-radius-var});
-        @if $universal-box-shadow != none {
-          box-shadow: var(#{$universal-box-shadow-var});
-        }
-        background: #fafafa;     // use variables, this is a test (body)
-        padding: var(#{$universal-padding-var});
-        margin: var(#{$universal-margin-var});
-        margin-bottom: calc(2 * var(#{$universal-margin-var}));
-      }
-      th, td {
-        width: auto;
-      }
-      td {
-        display: block;
-        border: 0;
-        text-align: right;
-      }
-      td:before {
-        content: attr(#{$table-mobile-card-label});
-        float: left;
-        font-weight: $table-mobile-label-font-weight;
-      }
-      th:first-child, td:first-child {
-        border-top: 0;
-      }
-      tbody tr:last-child td {
-        border-right: 0;
-      }
-    }
-  }
-  @else {
-    table {
-      border-collapse: collapse;
-      border: 0;
-      width: 100%;
-      display: table;
-      // Accessibility (element is not visible, but screen readers read it normally)
-      thead, th {
-        border: 0;
-        height: 1px;
-        width: 1px;
-        margin: -1px;
-        overflow: hidden;
-        padding: 0;
-        position: absolute;
-        clip: rect(0 0 0 0);
-        -webkit-clip-path: inset(100%);
-        clip-path: inset(100%);
-      }
-      tbody {
-        border: 0;
-        display: table-row-group;
-      }
-      tr {
-        display: block;
-        border: $__1px solid var(#{$table-border-color-var});
-        border-radius: var(#{$universal-border-radius-var});
-        @if $universal-box-shadow != none {
-          box-shadow: var(#{$universal-box-shadow-var});
-        }
-        background: #fafafa;     // use variables, this is a test (body)
-        padding: var(#{$universal-padding-var});
-        margin: var(#{$universal-margin-var});
-        margin-bottom: calc(2 * var(#{$universal-margin-var}));
-      }
-      td {
-        display: block;
-        border: 0;
-        text-align: right;
-      }
-      td:before {
-        content: attr(#{$table-mobile-card-label});
-        float: left;
-        font-weight: $table-mobile-label-font-weight;
-      }
-    }
-  }
-}
-// Striped tables.
-@if $_include-striped-table {
-  :root {
-    #{$table-td-alt-back-color-var} : $table-td-alt-back-color;
-  }
-  table.#{$table-striped-name} {
-    tr:nth-of-type(2n) > td {
-      background: var(#{$table-td-alt-back-color-var});
-    }
-  }
-  // Responsiveness for striped tables.
-  @media screen and (max-width: #{$table-mobile-breakpoint}) {
-    table.#{$table-striped-name} {
-      tr:nth-of-type(2n) {
-        background: var(#{$table-td-alt-back-color-var});
-      }
-    }
-  }
-}
-// Hoverable tables.
-@if $_include-striped-table {
-  :root {
-    #{$table-td-hover-back-color-var} : $table-td-hover-back-color;
-  }
-  table.#{$table-hoverable-name} {
-    tr {
-      &:hover, &:focus {
-        &, & > td {
-          background: var(#{$table-td-hover-back-color-var});
-        }
-      }
-    }
-  }
-  @media screen and (max-width: #{$table-mobile-breakpoint}) {
-    table.#{$table-hoverable-name} {
-      tr {
-        &:hover, &:focus {
-          &, & > td {
-            background: var(#{$table-td-hover-back-color-var});
-          }
-        }
-      }
-    }
-  }
-}
Index: s/mini/_utility.scss
===================================================================
--- css/mini/_utility.scss	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,169 +1,0 @@
-/*
-  Definitions for utilities and helper classes.
-*/
-$hidden-name:           'hidden' !default;          // Class name for hidden elements.
-$visually-hidden-name:  'visually-hidden' !default; // Class name for visually hidden elements.
-$border-generic-name:   'bordered' !default;        // Class name for bordered elements.
-$border-generic-color:   rgba(0,0,0, 0.3) !default; // Border color for bordered elements.
-$border-rounded-name:   'rounded' !default;         // Class name for rounded-border elements.
-$border-circular-name:   'circular' !default;       // Class name for circular-border elements.
-$box-shadow-generic-name:'shadowed' !default;       // Class name for box-shadow elements.
-$box-shadow-generic: 0 4*$__1px 4*$__1px 0 rgba(0, 0, 0, 0.125),  0 2*$__1px 2*$__1px -2*$__1px rgba(0, 0, 0, 0.25) !default;
-$responsive-margin-name: 'responsive-margin' !default; //Class name for responsive margin elements.
-$responsive-margin-medium-breakpoint: 768px !default; // Medium screen breakpoint for responsive margin elements.
-$responsive-margin-large-breakpoint: 1280px !default; // Medium screen breakpoint for responsive margin elements.
-$responsive-padding-name: 'responsive-padding' !default; //Class name for responsive padding elements.
-$responsive-padding-medium-breakpoint: 768px !default; // Medium screen breakpoint for responsive padding elements.
-$responsive-padding-large-breakpoint: 1280px !default; // Medium screen breakpoint for responsive padding elements.
-$hidden-prefix:           'hidden' !default;           // Class prefix for responsive hidden elements.
-$hidden-small-suffix:     'sm' !default;               // Class suffix for responsive hidden elements.
-$hidden-medium-breakpoint: 768px !default;             // Medium screen breakpoint for responsive hidden elements.
-$hidden-medium-suffix:     'md' !default;              // Class suffix for responsive hidden elements.
-$hidden-large-breakpoint: 1280px !default;             // Medium screen breakpoint for responsive hidden elements.
-$hidden-large-suffix:     'lg' !default;               // Class suffix for responsive hidden elements.
-$visually-hidden-prefix:  'visually-hidden' !default;  // Class prefix for responsive visually hidden elements.
-$visually-hidden-small-suffix:   'sm' !default;        // Class suffix for responsive hidden elements.
-$visually-hidden-medium-breakpoint: 768px !default;    // Medium screen breakpoint for responsive visually hidden elements.
-$visually-hidden-medium-suffix:   'md' !default;       // Class suffix for responsive hidden elements.
-$visually-hidden-large-breakpoint: 1280px !default;    // Medium screen breakpoint for responsive visually hidden elements.
-$visually-hidden-large-suffix:  'lg' !default;         // Class suffix for responsive hidden elements.
-// CSS variable name definitions [exercise caution if modifying these]
-$border-generic-color-var:        '--generic-border-color' !default;
-$box-shadow-generic-var:          '--generic-box-shadow' !default;
-// == Uncomment below code if this module is used on its own ==
-//
-// $universal-margin:        0.5rem !default;      // Universal margin for the most elements
-// $universal-padding:       0.5rem !default;      // Universal padding for the most elements
-// $universal-border-radius: 0.125rem !default;    // Universal border-radius for most elements
-// $universal-box-shadow:    none !default;        // Universal box-shadow for most elements
-// $universal-margin-var:          '--universal-margin' !default;
-// $universal-padding-var:         '--universal-padding' !default;
-// $universal-border-radius-var:   '--universal-border-radius' !default;
-// $universal-box-shadow-var:      '--universal-box-shadow' !default;
-// :root {
-//  #{$universal-margin-var}: $universal-margin;
-//  #{$universal-padding-var}: $universal-padding;
-//  #{$universal-border-radius-var}: $universal-border-radius;
-//  @if $universal-box-shadow != none {
-//   #{$universal-box-shadow-var}: $universal-box-shadow;
-//  }
-// }
-//
-// ============================================================
-/* Utility module CSS variable definitions */
-:root {
-  #{$border-generic-color-var}: $border-generic-color;
-  #{$box-shadow-generic-var}: $box-shadow-generic;
-}
-// Hidden elements class. NOTE: Uses !important.
-.#{$hidden-name}{
-  display: none !important;
-}
-// Visually hidden elements class. NOTE: Uses !important.
-.#{$visually-hidden-name} {
-  position: absolute !important;
-  width: 1px !important;
-  height: 1px !important;
-  margin: -1px !important;
-  border: 0 !important;
-  padding: 0 !important;
-  clip: rect(0 0 0 0) !important;
-  -webkit-clip-path: inset(100%) !important;
-  clip-path: inset(100%) !important;
-  overflow: hidden !important;
-}
-// Generic bordered element class. NOTE: Uses !important.
-.#{$border-generic-name} {
-  border: $__1px solid var(#{$border-generic-color-var}) !important;
-}
-// Generic rounded-border element class. NOTE: Uses !important.
-.#{$border-rounded-name} {
-  border-radius: var(#{$universal-border-radius-var}) !important;
-}
-// Generic circular-border element class. NOTE: Uses !important.
-.#{$border-circular-name} {
-  border-radius: 50% !important;
-}
-// Generic box-shadow element class. NOTE: Uses !important.
-.#{$box-shadow-generic-name} {
-  box-shadow: var(#{$box-shadow-generic-var}) !important;
-}
-// Responsive margin class. NOTE: Uses !important.
-.#{$responsive-margin-name} {
-  margin: calc(var(#{$universal-margin-var}) / 4) !important;
-  @media screen and (min-width: #{$responsive-margin-medium-breakpoint}) {
-    margin: calc(var(#{$universal-margin-var}) / 2) !important;
-  }
-  @media screen and (min-width: #{$responsive-margin-large-breakpoint}) {
-    margin: var(#{$universal-margin-var}) !important;
-  }
-}
-// Responsive padding class. NOTE: Uses !important.
-.#{$responsive-padding-name} {
-  padding: calc(var(#{$universal-padding-var}) / 4) !important;
-  @media screen and (min-width: #{$responsive-padding-medium-breakpoint}) {
-    padding: calc(var(#{$universal-padding-var}) / 2) !important;
-  }
-  @media screen and (min-width: #{$responsive-padding-large-breakpoint}) {
-    padding: var(#{$universal-padding-var}) !important;
-  }
-}
-// Responsive hidden element class. NOTE: Uses !important.
-@media screen and (max-width: $hidden-medium-breakpoint - 1px) {
-  .#{$hidden-prefix}-#{$hidden-small-suffix} {
-    display: none !important;
-  }
-}
-@media screen and (min-width: #{$hidden-medium-breakpoint}) and (max-width: $hidden-large-breakpoint - 1px) {
-  .#{$hidden-prefix}-#{$hidden-medium-suffix} {
-    display: none !important;
-  }
-}
-@media screen and (min-width: #{$hidden-large-breakpoint}) {
-  .#{$hidden-prefix}-#{$hidden-large-suffix} {
-    display: none !important;
-  }
-}
-// Responsive visually hidden element class. NOTE: Uses !important.
-@media screen and (max-width: $visually-hidden-medium-breakpoint - 1px) {
-  .#{$visually-hidden-prefix}-#{$visually-hidden-small-suffix} {
-    position: absolute !important;
-    width: 1px !important;
-    height: 1px !important;
-    margin: -1px !important;
-    border: 0 !important;
-    padding: 0 !important;
-    clip: rect(0 0 0 0) !important;
-    -webkit-clip-path: inset(100%) !important;
-    clip-path: inset(100%) !important;
-    overflow: hidden !important;
-  }
-}
-@media screen and (min-width: #{$visually-hidden-medium-breakpoint}) and (max-width: $visually-hidden-large-breakpoint - 1px) {
-  .#{$visually-hidden-prefix}-#{$visually-hidden-medium-suffix} {
-    position: absolute !important;
-    width: 1px !important;
-    height: 1px !important;
-    margin: -1px !important;
-    border: 0 !important;
-    padding: 0 !important;
-    clip: rect(0 0 0 0) !important;
-    -webkit-clip-path: inset(100%) !important;
-    clip-path: inset(100%) !important;
-    overflow: hidden !important;
-  }
-}
-@media screen and (min-width: #{$visually-hidden-large-breakpoint}) {
-  .#{$visually-hidden-prefix}-#{$visually-hidden-large-suffix} {
-    position: absolute !important;
-    width: 1px !important;
-    height: 1px !important;
-    margin: -1px !important;
-    border: 0 !important;
-    padding: 0 !important;
-    clip: rect(0 0 0 0) !important;
-    -webkit-clip-path: inset(100%) !important;
-    clip-path: inset(100%) !important;
-    overflow: hidden !important;
-  }
-}
Index: unt.scm
===================================================================
--- haunt.scm	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,198 +1,0 @@
-;;; ;;;; My Blog made in Guile Haunt
-;;;;
-;;;; https://w96k.com/
-;;;; 2019 (c) Mikhail w96k Kirillov
-
-(use-modules (haunt site)
-             (haunt reader)
-             (haunt asset)
-             (haunt page)
-             (haunt post)
-             (haunt html)
-             (haunt utils)
-             (haunt builder blog)
-             (haunt builder atom)
-             (haunt builder assets)
-             (srfi srfi-19)
-             (ice-9 rdelim)
-             (ice-9 match)
-             (web uri))
-
-(define (stylesheet name)
-  `(link (@ (rel "stylesheet")
-            (href ,(string-append "/css/" name ".css")))))
-
-(define (anchor content uri)
-  `(a (@ (href ,uri)) ,content))
-
-(define (logo src)
-  `(img (@ (class "logo") (src ,(string-append "/images/" src)))))
-
-(define %cc-by-sa-link
-  '(a (@ (href "https://creativecommons.org/licenses/by-sa/4.0/"))
-      (img (@ (src "/images/cc.png")))))
-
-(define %gpl-logo
-  '(a (@ (href "https://www.gnu.org/licenses/gpl-3.0.txt"))
-      (img (@ (src "/images/gpl.png")))))
-
-(define mini-theme
-  (theme #:name "Mini"
-         #:layout
-         (lambda (site title body)
-           `((doctype "html")
-             (head
-              (meta (@ (charset "utf-8")))
-              (title ,(string-append title " — " (site-title site)))
-              ,(stylesheet "mini")
-              ,(stylesheet "custom"))
-             (body
-              (header (@ (class "navbar"))
-                      (a (@ (href "/")
-                            (class "logo"))
-                         ,(string-append (site-title site)))
-                      (a (@ (class "button") (href "/about.html")) "Обо мне")
-                      (a (@ (class "button") (href "https://github.com/w96k/cv/raw/master/cv.pdf")) "CV")
-                      (a (@ (class "button") (href "/feed.xml"))
-                         (span (@ (class "icon-rss"))))
-                      )
-              (div (@ (class "container"))
-                   ,body)
-              (footer
-               (p (small "Работает на "
-                         (a (@ (href "https://dthompson.us/projects/haunt.html"))
-                            Haunt)
-                         " при помощи "
-                         (a (@ (href "https://www.gnu.org/software/guile/"))
-                            "Guile Scheme")))
-               (p (small (a (@ (href "https://gitlab.com/w96k/blog")) "Исходный код") " © 2019 Mikhail Kirillov"))
-               (p (,%gpl-logo) " " (,%cc-by-sa-link))))))
-         #:post-template
-         (lambda (post)
-           `(article
-             (h2 ,(post-ref post 'title)
-                 (small (span (@ (class "icon-calendar"))) " " ,(date->string* (post-date post))))
-             (div ,(post-sxml post))))
-         #:collection-template
-         (lambda (site title posts prefix)
-           (define (post-uri post)
-             (string-append "/" (or prefix "")
-                            (site-post-slug site post) ".html"))
-
-           `((h2 "Посты")
-             (ul
-              ,@(map (lambda (post)
-                       `(li
-                         (a (@ (href ,(post-uri post)))
-                            ,(post-ref post 'title))))
-                     (posts/reverse-chronological posts)))))))
-
-(define (about-page site posts)
-  (define body
-    `((article (@ (id "about"))
-               (div (@ (class "row"))
-                    (div (@ (class "col-sm-12 col-md-3"))
-                         (img (@ (src "/images/ava.jpg")
-                                 (class "shadowed rounded")
-                                 (style "max-width: 300px; width: 100%;")))
-                         (div (img (@ (src "/images/fsf.png")
-                                      (class "shadowed rounded")))))
-                    
-                    (div (@ (class "col-sm-12 col-md-9"))
-                         (h2 "Кириллов Михаил")
-                         (p "Я — фуллстек разработчик. Люблю функциональное
-программирование, LISP и движение за свободное программное
-обеспечение.")
-
-                         (p "Вы можете мне написать на почту с вопросом или
-темой для
-поста " (a (@ (href "mailto:w96k@member.fsf.org")) "w96k@member.fsf.org")))))))
-
-  (make-page "about.html"
-             (with-layout mini-theme site "Обо мне" body)
-             sxml->html))
-
-(define (redirect-dobryakov site posts)
-  (define body
-    `((article
-       (meta (@
-              (http-equiv "refresh")
-              (content "0; url=/григорий-добряков-об-устройстве-на-работу.html")))
-       (h2 "Перенаправляю...")
-       (p (a (@ (href "/григорий-добряков-об-устройстве-на-работу.html"))
-             "Нажмите если не перенаправилось"))
-       )))
-  
-  (make-page "dobryakov_employment.html"
-             (with-layout mini-theme site "Редирект" body)
-             sxml->html))
-
-(define (redirect-pirogov site posts)
-  (define body
-    `((article
-       (meta (@
-              (http-equiv "refresh")
-              (content "0; url=/алексей-пирогов-про-фп.html")))
-       (h2 "Перенаправляю...")
-       (p (a (@ (href "/алексей-пирогов-про-фп.html"))
-             "Нажмите если не перенаправилось"))
-       )))
-  
-  (make-page "pirogov_fp.html"
-             (with-layout mini-theme site "Редирект" body)
-             sxml->html))
-
-(define (redirect-libreboot site posts)
-  (define body
-    `((article
-       (meta (@
-              (http-equiv "refresh")
-              (content "0; url=/libreboot-x200t.html")))
-       (h2 "Перенаправляю...")
-       (p (a (@ (href "/libreboot-x200t.html"))
-             "Нажмите если не перенаправилось"))
-       )))
-  
-  (make-page "libreboot_x200t.html"
-             (with-layout mini-theme site "Редирект" body)
-             sxml->html))
-
-(define (404-page site posts)
-  (define body
-    `((article (@ (style "text-align: center;"))
-               (h2 "Ошибка 404"
-                   (small "Страница не найдена"))
-
-               (div
-                (a (@ (class "button")
-                      (href "/"))
-                   "На главную"))
-
-               (img (@ (id "youmu")
-                       (src "/images/youmu.png")))
-               )))
-  
-  (make-page "404.html"
-             (with-layout mini-theme site "Not Found" body)
-             sxml->html))
-
-(define %collections
-  `(("Главная" "index.html" ,posts/reverse-chronological)))
-
-(site #:title "@w96k"
-      #:domain "w96k.com"
-      #:default-metadata
-      '((author . "Mikhail Kirillov")
-        (email  . "w96k@member.fsf.org"))
-      #:readers (list sxml-reader html-reader)
-      #:builders (list (blog #:theme mini-theme #:collections %collections)
-                       (atom-feed)
-                       (atom-feeds-by-tag)
-                       about-page
-                       redirect-dobryakov
-                       redirect-pirogov
-                       redirect-libreboot
-                       404-page
-                       (static-directory "images")
-                       (static-directory "css")
-                       (static-directory "js")))
Index: index.org
===================================================================
--- index.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ index.org	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,7 @@
+#+TITLE: @w96k
+
+- content
+  - [[file:content/index.org][@w96k]]
+  - [[file:content/404.org][404]]
+  - posts
+    - [[file:content/posts/test.org][test]]
Index: sts/dobryakov.sxml
===================================================================
--- posts/dobryakov.sxml	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,284 +1,0 @@
-;;; -*- scheme -*-
-
-(use-modules (haunt utils))
-
-`((title . "Григорий Добряков об устройстве на работу")
-  (date . ,(string->date* "2019-03-20 12:00"))
-  (tags "Выдержка" "Hexlet" "Найм")
-  (summary . "Григорий Добряков провел вебинар с заголовком «Как
-составить резюме мечты и пройти собеседование».")
-  
-  (content
-
-   (p "Григорий Добряков провел вебинар с заголовком «Как составить
-резюме мечты и пройти собеседование». Вебинар показали на
-YouTube-канале " (a (@ (href "https://hexlet.io")) "Хекслет") ",
-онлайн-площадке, обучающей программированию.")
-
-   (p (a (@ (href "https://www.dobryakov.com/")) "Григорий
-Добряков") " — Project Manager с 20-летним стажем. Он собеседует,
-нанимает и руководит людьми. Он рассказывает о том, как составлять
-резюме, что делать на собеседовании и как влиться в коллектив.")
-
-;;; Webinar
-   (p (@ (class "video"))
-      (iframe
-       (@ (src "https://youtube.com/embed/lJiWvv5Krbk"))))
-
-   (p "Далее представляю запись его ключевых идей. Некоторые идеи могут быть
-искажены моей редактурой, но в целом всё в том или ином виде есть в
-записи.")
-
-   (h3 "Что писать в резюме")
-
-   (p "Пишите ваше желания, к чему вы стремитесь. Так вы выделитесь
-среди большинства. Унылое резюме — это резюме, где указано только то,
-что ты умеешь делать.")
-
-   (p "Укажите ту область, в которой вам интересно работать. Например
-интернет-магазин, развлекательный проект, ритейл, геймдев и так
-далее. Таким образом вы отсеете людей, у которых явно не то что вам
-надо. Вы сэкономите время.")
-
-   (p "Если у вас есть релевантное образование, то указывайте и
-его. Если вы учились профессии, которая никак не связана с желаемой
-работой, то не стоит.")
-
-   (p "Также не забудьте:")
-
-   (ul
-    (li "Ссылку на Github")
-    (li "Готовность к релокейту")
-    (li "Возраст")
-    (li "Контакты")
-    (li "Желаемая ЗП")
-    (li "Опыт работы в компаниях и проекты"))
-
-   (p "Что касается размеров, в США стандарт — 1-2 страницы, в Европе
-2 страницы. В целом короткие резюме лучше, потому что читать все
-леняться.")
-
-   (h3 "Как писать о предыдущей работе")
-
-   (p "Дайте краткое описание о сфере деятельности компании и ее
-размере. Размер можно указать в количестве юзеров, продуктов или
-доходе компании. Люди, которые смотрят ваше резюме, не пойдут гуглить
-и узнавать информацию.")
-
-   (p "Укажите вашу роль в организации и сферу вашей
-ответственности. Что происходило в бизнесе благодаря вашей
-работе. Когда ваше резюме читают, ваши предыдущие действия хотят
-сопоставить с тем какие цели стоят у компании сейчас.")
-
-   (p "Вас нанимают не для того, чтобы писать код, а для того, чтобы
-решать бизнес-задачи. Потому никогда не пишите просто списки рутинных
-задач вроде “исправлял баги” и “делал фичи”. Пишите о пользе
-бизнесу.")
-
-   (h3 "Стоит ли указывать различные курсы")
-
-   (p" Обязательно указывайте, что вы учитесь, что вы читаете книги,
-что вы интересуетесь, потому что ленивых жоп в мире очень
-много. Самообучение — это очень мощный драйвер для того, чтобы вас
-выделить среди толпы.")
-
-   (h3 "Кто кого выбирает при найме")
-
-   (p "Найм — двусторонний процесс с небольшим дисбалансом в
-зависимости от того джун вы или нет. Необходимо выбирать
-компанию-работодателя также тщательно как выбирают вас. Вас исследуют
-при найме и вы исследуйте. Например вы можете узнать юридические
-данные компании, чтобы понять все ли с ней в порядке.")
-
-   (h3 "Что происходит на стороне работодателя при получении резюме")
-
-   (p "Самая главная ошибка — думать, что на стороне заказчика есть
-какой-то хорошо отлаженный конвейер, через который проходит каждое
-резюме. В большинстве компаний HR по тем или иным причинам не
-обрабатывает все резюме, потому при отправке учитывайте, что ваше
-резюме может быть просто не прочитано. Если вам не ответили, это не
-значит, что у вас неподходящая квалификация или плохое резюме.")
-   
-   (h3 "Когда обновлять резюме")
-
-   (p "Резюме надо обновлять не в тот момент, когда вы запарились на
-текущей работе, а в тот день, что вы пришли на новую работу. Это нужно
-для фиксации активностей, достижений и стека технологий. По мере роста
-как специалиста этот список будет расширяться, держать все детали в
-голове станет сложно.")
-
-   (h3 "Узнайте об отношениях внутри команды")
-
-   (p "Вы можете попросить присоединить к собеседованию членов той
-команды, в которой вам предстоит работать, и их руководителя. Таким
-образом вы сможете узнать отношения руководства к
-подчиненным. Руководитель может прессовать и хамить, а может давать
-высказаться и прислушиваться к мнению подчиненных. Вы сможете
-спроецировать то, как этот человек в будущем будет общаться с
-вами. Привлекательные технологии и бонусы не стоят того, чтобы
-работать с плохим начальством.")
-
-   (h3 "Что делать если не умеешь себя презентовать")
-
-   (p "Чтобы себя презентовать, нужно быть в себе уверенным:")
-
-   (ul
-    (li "надо уметь себя ценить")
-    (li "надо понимать чего ты стоишь")
-    (li "надо понимать, что ты человек, а не винтик в чужой машине."))
-
-   (p "Нужно дать понять, что ты пришел поговорить. Ты пришел не
-просить о работе, ты не пришел из-за того, что тебе нечего есть. Ты
-пришел поговорить как равным с равным. Ты идешь на сделку,
-договариваться. Если тебя прессуют, если тебе говорят, что ты джун и
-ты не заслужил еще человеческого отношения, вставай - уходи.")
-
-   (h3 "Что насчет удаленной работы")
-
-   (p "Я считаю, что сейчас надо всем работать удаленно. Я сам работаю
-последние четыре года удаленно в качестве руководителя, консультанта
-или приглашаемого специалиста. Не стоит бояться удаленки.")
-
-   (p "Для удаленной работы надо быть дисциплинированным и дать
-работодателю понять, что вы можете работать в то время, которое
-обозначаете, что у вас есть рабочее место и вам никто не мешает, что
-над вами не нужно стоять над душой.")
-
-   (h3 "Почему вы ушли с предыдущего места работы")
-
-   (p "Единственная причина, по которой вы меняете работу — потому что
-вы захотели. Вы — хозяин своей жизни. Обозначайте уход с места работы,
-как позитивное подведение итогов. Даже если это не так, даже если
-начальник был полный дятел.")
-
-   (h3 "Методика STAR")
-
-   (p "Situation, Task, Action, Result. Эта методика для описания
-места работы.")
-
-   (p "Situation — это профессиональные ситуации, которые вы даете
-работодателю, чтобы он сравнил их с тем, что есть у него.")
-
-   (p "Task — это задачи, которые перед вами поставили. Допустим, есть
-кривое апи продукта, задача — сделать его хорошим.")
-
-   (p "Actions — это то, что вы предприняли для достижения
-   Task. Нельзя просто писать “Я кодил код”, “Я исправлял ошибки”, “Я
-   делал новые фичи”.")
-
-   (p "Result — это то, что поменялось в продукте, в бизнесе после
-   того как вы пришли и накодили.")
-
-   (p "Если вы используете STAR, вы описываете ситуацию в целом, ваш
-   опыт работы с точки зрения бизнеса. Это демонстрирует работодателю,
-   что вы осознанно подходите к делу и выполняете конкретные
-   бизнес-задачи.")
-
-   (h3 "Как планировать график собеседований")
-
-   (p "Если вы активно работаете над поиском работы, то у вас может
-быть по 2-3 собеседования в день. Существуют сервисы, которые
-облегчают организацию графика собеседований.")
-
-   (ul
-    (li (a (@ (href "https://youcanbook.me/")) "YouCanBookMe"))
-    (li (a (@ (href "https://calendly.com/")) "Calendly"))
-    (li (a (@ (href "https://doodle.com/")) "Doodle")))
-
-   (p "Эти сервисы позволяют гибко назначать время вместе с HR’ом. Вы
-кидаете ссылку, HR выбирает подходящее время. Эти сервисы
-интегрируются с Google Calendar.")
-
-   (p "Таким образом вы избегаете лишнего общения с уточнением деталей
-встреч.")
-
-   (h3 "Советы")
-
-   (h4 "Запись собеседований")
-
-   (p "Полезно делать записи skype-собеседований. Позже вы сможете их
-переслушать, пересмотреть, увидеть в себе какие-то недостатки и
-сделать необходимые выводы.  Уточняйте кто будет на собеседовании")
-
-   (p "Уточните имена тех, кто будет собеседовать. Зачем это нужно? Вы
-сможете прогуглить эти имена и выяснить чем они живут. Так будет легче
-найти точки соприкосновения.")
-
-   (p "Если не удалось выяснить имена, вы можете взять блокнот и
-записать имена уже непосредственно на собеседовании.")
-
-   (h4 "Процесс онбординга")
-
-   (p "Онбординг — процесс вовлечения сотрудника в проект. Спросите
-есть ли он, как и кто вам будет помогать вовлекаться в новый вид
-деятельности. В подавляющем большинстве мелких компаний процесс
-онбординга отсутствует.")
-   
-   (h4 "Узнайте о допустимом уровне самодеятельности")
-
-   (p "В некоторых компаниях программиста считают за человека, который
-должен делать только то, что ему говорят. В таких компаниях у вас
-скорее всего будет отсутствовать профессиональный рост. Это называется
-“нанять рабов на галеру и заставить грести”.")
-   
-   (h4 "Контактируйте с гуманитариями")
-
-   (p "К сожалению, многие программисты не любят гуманитариев,
-некоторые думают, что это существа с другой планеты. Контактируя с
-гуманитариями, вы сможете получать обратную связь с точки зрения
-бизнеса. То есть какой профит приносит бизнесу ваша деятельность,
-потому что именно это выгодно подавать в вашем резюме.")
-
-   (p "Недостаточно презентовать себя с технической точки зрения,
-необходимо помимо этого показывать работодателю какую конкретно пользу
-вы можете принести компании.")
-
-   (h4 "Помоги HR’у")
-
-   (p "HR’ы очень часто перегружены, им платят маленькие зарплаты, они
-испытывают давление от заказчика, другими словами находятся в
-постоянном стрессе. Они могут не понимать технических деталей вакансии
-и путать термины. Вы можете использовать это и помочь HR’у, подсказать
-термин, попросить подходящую вакансию. Обратная связь с HR окупится
-очень быстро.")
-
-   (h4 "Переработки")
-
-   (p "Вы — не раб, не прислуга, не любовница. Вы продаете 8 часов
-своего рабочего времени в обмен на деньги. Все, что вы хотите давать
-сверху этого — это жест доброй воли, а не обязанность. Вас не должно
-грызть чувство вины, если вы покидаете рабочее место вовремя без
-переработки. Работодатель просто выжмет все соки за сверхурочные часы
-и ничего не даст взамен.")
-
-   (p "Очень важно уметь заботиться и ценить себя. С точки зрения
-менеджмента, человек, который умеет заботиться о себе, ставить границы
-и говорить нет, более выгоден, потому что он может рассчитать свои
-силы и не покинет проект посередине. Человек же, который говорит, что
-готов работать сверхурочно, скорее всего в какой-то момент опустит
-руки.")
-
-   (h4 "Выгорание")
-
-   (p "Выгорание происходит когда ты занимаешься тем, чем не
-хочешь. По-моему мнению, почва для выгорания — это недостаток
-осознанности своего “Я”, своих личных глубоких потребностей. Чтобы
-предотвратить выгорание, вам нужно научиться уважать себя и уметь
-говорить “нет”.")
-
-   (p "Не пытайтесь бороться народными средствами. Не надо пить,
-уходить в отпуск на год и так далее. Это не работает. Если вам это
-помогло, то это не выгорание, а усталость.")
-
-   (p "Выгорание — это медицинское явление, гормональный сбой, который
-происходит в голове. Желательно сходить к врачу. Этот недуг
-исправляется только таблетками.")
-
-   (p "Если вы не преступаете себя, свои интересы и моральные
-принципы, то у вас не будет выгорания.")
-
-   (h3 "Заключение")
-
-   (p "Спасибо Григорию и команде Хекслета за вебинар. Большая часть
-стрима была посвещена ответам на вопросы зрителей, которые не попали в
-эту выдержку. Они повторялись и были слишком короткими.")))
Index: sts/libreboot-x200t.sxml
===================================================================
--- posts/libreboot-x200t.sxml	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,287 +1,0 @@
-;;; -*- scheme -*-
-
-(use-modules (haunt utils))
-
-`((title . "Libreboot X200T")
-  (date . ,(string->date* "2019-03-17 12:00"))
-  (tags "Железо")
-  (summary . "Ноутбук с свободным BIOS")
-  
-  (content
-   
-   ((p "Вот уже несколько месяцев я использую x200t в качестве
-основной рабочей машины. Этот ноутбук убивает желание иметь дома
-настольный комьпютер и учит ценить ограниченный вычислительный
-ресурс. После покупки я полностью отказался от использования мыши. Его
-удобно таскать с собой, он быстро загружается и держит заряд 4 часа.")
-
-    (h3 "Libreboot")
-
-    (p "Libreboot — свободная альтернатива BIOS и UEFI. Многие любят
-свободный софт, но исторически сложилось так, что программы,
-отвечающие за инициализацию системы полностью закрыты.")
-
-    (p "Активисты свободного ПО создали открытую реализацию BIOS /
-UEFI, которая помимо того, что открыта для всех желающих и расширяема,
-так еще работает быстрее встроенных закрытых систем. Одна из таких
-реализаций называется Coreboot, она содержит проприоритарные блобы от
-производителей железа, а Libreboot является версией Coreboot без
-блобов и входит в проект GNU. Libreboot не является форком Coreboot,
-это отдельная поставка Coreboot.")
-
-    ;;; Leah Rowe about Libreboot
-    (p (@ (class "video"))
-       (iframe
-        (@ (src "https://youtube.com/embed/W1ta--tHenE"))))
-
-    (p "Libreboot был создан Leah Rowe. Он несколько раз выступал с
-докладами про свое детище.")
-
-    (h3 "Чем закрытые системы опасны")
-
-    (p "Используя закрытый софт, люди доверяют целиком и полностью
-производителю, на его совести безопасность и функционал
-системы. Эксплуатация подобной системы напоминает ящик пандоры, мы
-знаем, что система должна делать, но не уверены, что она делает именно
-то, что необходимо и только то, что необходимо.")
-
-    (p "Начиная с 2008 года Intel начала встраивать подсистему Intel
-ME в чипсеты. А AMD с 2013 года начала встраивать AMD PSP в свои. Эти
-обе подсистемы действует примерно одинаково, они созданы для
-мониторинга работы процессора, они автономны, они закрыты, их нельзя
-выключить. В этих системах всплывают дыры в безопасности, которые
-может исправить только сам производитель.")
-
-    (p "Libreboot позволяет избавиться от этих подсистем, но работает
-он на " (a (@ (href "https://libreboot.org/docs/hardware/")) "очень
-ограниченном ряде устройств") " и требует использования программатора,
-внешнего устройства для записи данных в BIOS. Только Thinkpad T60
-позволяет прошить Libreboot, используя программные средства.")
-
-    (h3 "Ноутбук")
-
-    (p (a (@ (href "https://minifree.org/product/libreboot-x200-tablet/")) "Libreboot
-X200T") " — это восстановленный ThinkPad X200T с прошитым на Libreboot
-BIOS. Помимо этого в нем заменена сетевая карта для совместимости с
-открытыми драйверами. ThinkPad известен своей надежностью и
-модульностью. Суффикс T в конце обозначает, что это Tablet версия
-ноутбука, здесь IPS монитор от Wacom, когда в X200 обычный TFT, и
-сенсорный экран, который можно разворачивать на 180 градусов и делать
-из ноутбука планшет.")
-
-    (p "Несмотря на то, что данная модель вышла в 2009 году, она
-пригодна для использования даже спустя 10 лет. Geoff
-Greer " (a (@ (href "https://geoff.greer.fm/2017/01/23/oldest-viable-laptop/")) "называет")
-" ThinkPad X60 - самой старой моделью ноутбука, которым можно
-пользовать и по сей день. Это другой ноутбук, он вышел еще раньше чем
-x200t. Его
-пост " (a (@ (href "https://news.ycombinator.com/item?id=19246406")) "запустил
-ветку обсуждений на HackerNews")", в котором комментаторы делятся
-своим опытом использования старых машин в настоящее время.")
-
-    (h3 "Характеристики")
-
-    (table
-     (thead
-      (tr
-       (th "Комплектующие")
-       (th "Описание")))
-     (tbody
-      (tr
-       (td "CPU")
-       (td "Intel Core 2 Duo SL9400"))
-      (tr
-       (td "GPU")
-       (td "Intel GMA 4500MHD"))
-      (tr
-       (td "Screen")
-       (td "12.1″ 1280×800 TFT LCD (IPS panel)"))
-      (tr
-       (td "LAN")
-       (td "Gigabit ethernet as standard"))
-      (tr
-       (td "Ports")
-       (td "1x VGA, 3x USB 2.0, 1x Headphone, 1x Microphone, 1x
-Gigabit Ethernet, 1x ExpressCard/54"))
-      (tr
-       (td "WIFI")
-       (td "Upgraded with an 802.11n wireless card (Atheros AR5B95,
-AR9285 chipset), ensuring full compatibility with free drivers in
-GNU+Linux."))))
-
-    (p "Я использую GNU/Debian, Ratpoison, Emacs и Firefox, эта связка
-ест не больше 1GB RAM при обычном использование и не больше 2GB при
-разработке. Видеочип позволяет без труда выводить FullHD на внешний
-монитор. А процессорной мощности вполне хватает, чтобы компилировать
-программы и манипулировать текстом в редакторе. Нехватку ресурсов
-скорее всего почувствуют люди, которым нужно редактировать видео или
-работать с 3D.")
-
-    (p "Возможно данный воркфлоу подойдет не всем, а ограничение
-ресурсов станет решающим фактором для отказа от использования
-устройства.")
-
-    (h3 "Преимущества")
-
-    (ul
-     (li
-      (h4 "Прочный")
-      (p "Корпус сделан из прочного пластика, имеющий магниевый
-каркас. Ноутбук дольше служит и меньше подвержен внешним
-разрушениям. Если загуглить “Thinkpad Torture Test”, то найдете видео,
-где люди тщетно пытаются вывести ноутбук из строя."))
-     (li
-      (h4 "Модульный")
-      (p "ThinkPad’ы в разы легче чинить чем монолитных современников
-вроде MacBook. До некоторых комплектующих можно добраться, не разбирая
-весь ноутбук благодаря удобному делению на сектора."))
-     (li
-      (h4 "Док-станция")
-      (p "Ноутбук имеет док-станцию, в которой содержатся
-дополнительные порты, dvd-привод или дополнительные накопители. Ее
-удобно использовать, если часто таскать ноутбук с собой, приходя
-домой, вам не нужно переподключать тонну кабелей, вставили в док и все
-работает. Представьте Nintendo Switch."))
-     (li
-      (h4 "Совместимость с Unix")
-      (p "Ноутбук позволяет без проблем установить и использовать
-UNIX-совместимые операционные системы. Необходимые драйвера либо уже в
-ядре, либо лежат в открытом доступе."))
-     (li
-      (h4 "Trackpoint")
-      (p "Также известен как “клитор”. Это
-резиновый манипулятор, заменяющий мышь, который находится между
-клавишами “G”, “H” и “B”. Убирает усталость рук из-за вечного
-переключения между мышью и клавиатурой. После покупки я перестал
-использовать мышь вовсе, рекомендую попробовать работать только c
-TrackPoint.")
-      (img (@ (src /images/trackpoint.png))))
-     (li
-      (h4 "Клавиатура")
-      (p "Полноценная 7-строчная клавиатура. Ход клавиш не такой как у
-большинства ноутбучных клавиатур, нажать что-то случайно практически
-невозможно. Расположение клавиш немного изменено, но не так радикально
-как на MacBook’ах."))
-     (li
-      (h4 "Планшет")
-      (p "Экран от Wacom и стилус. Перо хранится прямо в корпусе
-ноутбука в специальном отсеке. Экран можно развернуть на 180 градусов
-и положить на клавиатуру. Скорее всего это самый дешевый вариант для
-“планшета с экраном”."))
-     (li
-      (h4 "Экран")
-      (p "В отличии от других Libreboot-моделей, X200T имеет IPS
-матрицу вместо TFT. Экран отлично передает цвета и не подвержен
-ШИМ’у. Хотя всего-лишь HD."))
-     (li
-      (h4 "Отсутствие тачпада")
-      (p "Только TrackPoint, никаких случайных задеваний
-тачпада. Впрочем на большинстве ThinkPad’ов тачпад присутствует."))
-     (li
-      (h4 "Тихий и холодный")
-      (p "Не шумит. Во всяком случае из библиотеки вас вряд ли
-прогонят, если начнете что-то компилировать. Куллер обеспечивает
-нужный сброс температуры. В простое +40°C, под нагрузкой максимум
-+70°C."))
-     (li
-      (h4 "Мобильность")
-      (p "Несмотря на толщину, сам ноутбук по ширине и длине не
-занимает много места. Легко брать с собой.")))
-
-    (h3 "Недостатки")
-
-    (ul
-     (li
-      (h4 "Нельзя редактировать поведение железа в биос")
-      (p "В качестве фронтенда Libreboot использует Grub. В нем
-отсутствует возможность изменения работы железа, только возможность
-выбрать с чего загружать систему."))
-     (li
-      (h4 "Батарея")
-      (p "Держит 4 часа, что по меркам современных ноутбуков
-мало. Батареи продают часто уже просевшие."))
-     (li
-      (h4 "Нет HDMI / DVI порта")
-      (p "На самом ноутбуке присутствует только VGA порт. В
-док-станции есть DisplayPort. Потому если используете внешний монитор
-и хотите цифровой сигнал, то придется приобрести док-станцию и
-переходник DisplayPort -> HDMI / DVI."))
-     (li
-      (h4 "Только Б/У")
-      (p "Так как производство данных ноутбуков уже давно закрыто, то
-его возможно приобрести только с рук. Из-за этого на ноутбуке могут
-присутствовать потертости и другие дефекты."))
-     (li
-      (h4 "Слабое железо")
-      (p "Для меня это не недостаток, но многие могут испытать
-трудности в эксплуатации. Часто приходится сталкиваться с жирным
-софтом, который очень нерационально тратит ресурсы компьютера, если
-такой софт перестать использовать, то проблем в использовании не
-возникнет.")))
-
-    (h3 "Где достать")
-
-    (p "Ноутбук можно достать на Б/У рынке, Авито, Юла, Ebay. Прошить
-Libreboot можно самому. Для самостоятельной прошивки вам понадобится
-программатор и инструкция по перепрошивке BIOS. Проблема в том, что
-эти два процесса сопряжены с рисками, да и в целом достаточно
-времязатратны, потому существуют организации, которые облегчают этот
-процесс.")
-
-    (p "Одна из таких организаций
-— " (a (@ (href "https://minifree.org/")) "MiniFree") ". MiniFree
-берет название из популярного романа антиутопии 1984 и
-расшифровывается как Ministry of Freedom (Министерство Свободы). Эта
-организация была основана главным разработчиком Libreboot, существует
-на его деньги и деньги с покупок ноутбуков. Помимо того, что Minifree
-прошивает Libreboot, магазин предлагает апгрейд RAM и накопителей.")
-
-    (p "Магазин принимает SWIFT-платежи и доставляет при помощи службы
-UPS. UPS — не самая хорошая служба доставки, особенно в РФ. В моем
-опыте ребята задержали заказ на несколько недель + мне пришлось
-заплатить дополнительную плату в размере ~1200 рублей за растаможню
-ноутбука. Но в конце концов всё пришло в целости и сохранности.")
-
-    (h3 "Другие модели")
-
-    (p "X200T достаточно дорогой, а на Б/У рынке еще достаточно
-редкий. Есть альтернативы для ноутбука с Libreboot.")
-
-    (p "Рассмотрите: "
-       (mark "x200") " "
-       (mark "t400") " "
-       (mark "x60") " "
-       (mark "t60"))
-
-    (p "Если вам необязательно наличие Libreboot, то рассмотрите: "
-       (mark "x220") " "
-       (mark "t410") " "
-       (mark "t420"))
-
-    ;;; Luke Smith about choosing Thinkpad
-    (p (@ (class "video"))
-       (iframe
-        (@ (src "https://youtube.com/embed/La3sb5y7e-k"))))
-
-    (h3 "Полезные ссылки")
-
-    (ul
-     (li (a (@ (href "https://libreboot.org/"))
-            "Свободный BIOS/UEFI Libreboot"))
-     (li (a (@ (href "https://libreboot.org/docs/hardware/#list-of-supported-hardware"))
-            "Список устройств с поддержкой Libreboot"))
-     (li (a (@ (href "https://minifree.org/"))
-            "Организация Minifree"))
-     (li (a (@ (href "https://www.truefla.me/free-stuff/used-thinkpad-buyers-guide"))
-            "Гайд по покупке Thinkpad"))
-     (li (a (@ (href "https://www.thinkwiki.org/wiki/ThinkWiki"))
-            "Thinkpad Wiki"))
-     (li (a (@ (href "https://ru.wikipedia.org/wiki/ThinkPad"))
-            "Статья на википедии"))
-     )
-
-    (h3 "Обновление")
-
-    (p "Сейчас (06.05.2019) я использую GNU/GuixSD, Emacs, EXWM (WM в emacs) и Icecat.")
-
-    )))
Index: sts/pirogov-o-fp.sxml
===================================================================
--- posts/pirogov-o-fp.sxml	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,296 +1,0 @@
-;;; -*- scheme -*-
-
-(use-modules (haunt utils))
-
-`((title . "Алексей Пирогов про ФП")
-  (date . ,(string->date* "2019-03-22 12:00"))
-  (tags "Выдержка" "Hexlet" "ФП")
-  (summary . "Алексей Пирогов провел вебинар на тему «Функциональное
-программирование как парадигма: цели, способы, применимость».")
-  
-  (content
-
-   (p "Алексей Пирогов провел вебинар на тему «Функциональное
-программирование как парадигма: цели, способы, применимость». Вебинар
-был транслирован на YouTube-канале Hexlet, автоматизированной площадке
-обучающей программированию.")
-
-   (p "Алексей Пирогов — хаскеллист, в прошлом питонист. Недавно он
-пополнил ряды преподавателей Hexlet и теперь готовит курс по Python на
-этой площадке. Он сделал мини-курс
-на " (a (@ (href "https://code-basics.ru/languages/python")) "Code-Basics")
-". Имеет канал
-в " (a (@ (href "https://t.me/brain%5Fdump%5Fetc")) "Telegram") " и на "
-(a (@ (href "https://www.youtube.com/channel/UCXk1kxTjZwluYLyijyKVsAA")) "Youtube") ",
-а также он является соорганизатором " (a (@ (href "http://prog.msk.ru/")) "«Клуба Программистов в Москве»")
-". В " (a (@ (href "https://hexlet-ru.slack.com/")) "слак-канале
-Hexlet") " Алексея можно найти под ником @astynax.")
-
-;;; Webinar
-   (p (@ (class "video"))
-      (iframe
-       (@ (src "https://youtube.com/embed/0GX4JRAGEzc"))))
-
-   (p "Этот вебинар рассматривает тему обзорно. Он будет полезен тем,
-   кто не знает, что такое ФП и зачем оно существует или знает о нем
-   недостаточно много. Далее представляю набор ключевых идей с
-   трансляции. Информация в том или ином виде сказана на трансляции.")
-
-
-   (h3 "Что такое ФП")
-
-   (p (i "Функциональное программирование") " — это отделение чистого кода от
-   кода с побочными эффектами.")
-
-(p "Чистые функции похожи на функции из математики. Они возвращают
-   всегда один и тот же результат при одинаковых аргументах. Это их
-   главное свойство. Они не затрагивают все то, что находится за их
-   телом. Не пишут в консоль, не трогают БД, не генерят случайные
-   числа.")
-
-(p "Функция, которая оперирует с “внешним миром”, то есть вне
-   своего тела, производит " (i "побочные эффекты") ". Побочные эффекты,
-   они же сайд-эффекты, это как правило операции ввода-вывода, хождение в
-   сеть, диск. Эти операции возможно делать в небольших участках
-   программы, а логику описывать функционально.")
-
-(p "В языках с единственной доступной парадигмой функционального
-   программирования есть четкое разделение чистого кода от
-   нечистого. Такое разделение всячески поощряется. В большинстве языков
-   с элементами функционального программирования нельзя проверить
-   является ли функция чистой или нет.")
-
-(h3 "Ключевые свойства")
-
-(ul
- (li "Функции высшего порядка")
- (li "Иммутабельные структуры данных"))
-
-(p (i "Функции высшего порядка") " — возможность возвращать и передавать
-   функцию в качестве аргумента.")
-
-(p (i "Имутабельные структуры данных") " — данные, которые нельзя изменить
-   на уровне языка. Оперируя над такими данными, мы не можем изменить
-   саму структуру, а можем вернуть новую версию этой
-   структуры. Иммутабельные структуры данных реализованы везде
-   по-разному. В современных компиляторах они оптимизированы и работают
-   быстро.")
-
-(h3 "Чистый код просто:")
-
-(ul
- (li "Анализировать")
-
- (p "Самое важное свойство ФП — способность рассуждать о
-    функциях. Человеку легче оперировать с тем, что находится вблизи
-    него. В ФП легче держать весь контекст функции в голове. Не надо
-    думать о глобальных переменных, которые могут быть изменены после
-    вызова функции. Посмотрев тело функции, можно легко понять все, что с
-    ней происходит.")
-
- (li "Тестировать")
-
- (p "Тут все просто. Если мы знаем, что функция всегда возвращает
-    одинаковое значение при одинаковых аргументах — значит ее легче
-    тестировать. Не нужно учитывать внешний мир, от которого она может
-    зависеть.")
-
- (li "Переиспользовать")
-
- (p "Чистый код легко переиспользовать, потому что мы можем код
-    спокойно копировать. Он не зависит от контекста.")
-
- (li "Вычислять параллельно и/или конкурентно")
-
- (p "Большинство проблем при запуске параллельных функций связаны с
-    разделением данных, которые изменяются. Мы вынуждены делать семафоры,
-    локи и так далее, потому что у нас есть процессы, которые могут менять
-    общие данные произвольно.")
-
- (p "В чистых функциях, работающих с иммутабельными структурами
-    данных нет таких проблем. Мы можем отдать структуру десяти разным
-    процессам и они ее не смогут поменять."))
-
-(h3 "Удобно писать")
-
-(ul
- 
- (li "Компиляторы, парсеры, генераторы чего-либо")
-
- (li "Сложную логику, ложащуюся на DSL (Например Sigma)")
-
- (li "Высококонкурентный код (Например код на Erlang)")
-
- (li "GUI (Например React)"))
-
-(h3 "Как научиться")
-
-(p "Чтобы научиться настоящему ФП, нужно изучить Haskell.")
-
-(h3 "Почему Haskell?")
-
-(p "Haskell – чистый функциональный язык, который позволяет изучить
-   ФП как подход и писать идиоматический для ФП код. Есть другой вариант
-   для изучения, например Standart ML, но этот язык мертвый. Haskell же
-   хорош тем, что у него есть живое сообщество. Помимо этого Haskell —
-   статически-типизированный язык, который заодно научит интересному
-   подходу к типам, отличающегося от типов в других языках.")
-
-(p "Функциональное программирование можно изучить в вузе под
-   руководством преподавателя на каком-то другом языке, хоть на
-   Python. Но здесь потребуется именно преподаватель.")
-
-(p "Фишка брать функциональный язык в том, что мы не сможем
-   схалявничать и использовать старые знакомые нам подходы. Уроки,
-   которые мы получим изучив Haskell, могут быть применены в повседневной
-   жизни потом, вне зависимости от языка программирования.")
-
-(h3 "Теория категорий")
-
-(p "Есть такой миф, что в Haskell не стоит лезть, если не знаешь
-   теорию категорий. Это неправда. Я из теории категорий примерно знаю
-   содержание первых двух страниц типичной книги и это мне это не мешает
-   писать production-код на Haskell.")
-
-(p "Теория категорий — это приятная штука для развития мозгов в
-   первую очередь, она даже не про программирование. Она может помочь
-   стать лучше как программист, а может и не помочь.")
-
-
-(h3 "Что еще из языков")
-
-(ul
- (li "Изучите Clojure (ибо LISP и макросы)")
-
- (p "Потому что современный живой лисп в функциональной парадигме.")
-
- (li "Изучите Erlang (ибо акторы)")
-
- (p "Erlang — не язык, который создавался, чтобы быть функциональным, а создавался для того, чтобы быть надежным. Функциональная парадигма в нем применяется, чтобы создавать устойчивые к отказам программы. Поэтому в языке не очень хорошо с выразительностью.")
-
- (p "После Erlang можно пописать на Elixir. Он похож на Ruby с рельсами."))
-
-(h3 "Про парадигмы")
-
-(p "Существует мнение, что стоит изучать по одной новой парадигме в
-   год. Изучать их нужно на максимально ярких для этих парадигм
-   языках. Хотим изучить ФП — берем Haskell. Хотим изучить ООП — берем
-   SmallTalk. Хотим изучить Мета-программирование — берем лиспы. Хотим
-   логическое программирование — берем Prolog.")
-
-(p "Какая парадигма лучше всего? Никакая, все парадигмы клевые.")
-
-(p "Изучать новые парадигмы всегда сложно, но это интересно. Чем
-   больше мы сформируем отличных друг от друга навыков, тем будем ценнее
-   вне зависимости от того, что мы будем делать. Это происходит, потому
-   что разные парадигмы позволяют нам бо́льшими способами решить задачу.")
-
-(h3 "Для каких задач не подходит ФП")
-
-(p "Функциональные языки общего назначения являются версиями
-   лямбда-исчислений. Так как мы знаем, что лямбда-исчисление может
-   выразить любую вычислительную задачу, на ФП языке мы можно решить
-   любую задачу.")
-
-(p "Функциональные языки хорошо себя чувствуют в тех областях, где
-   можно использовать много памяти. Потому ФП не подходит для
-   встраиваемых систем и всему тому, что должно быть близко к железу.")
-(h3 "О типизации")
-
-("Лямбда-исчисление как таковое является безтиповым. Все типы — это
-   хитро-сделанные функции в оригинальном лямбда-исчислении.")
-
-(p "Очень круто пописать на типизированных функциональных
-   языках. Если я знаю, что в функцию будут приходить только строчки, а
-   выходить только числа, то это позволяется мне проще рассуждать о
-   функции. Не нужно думать, что придет что-то не то.")
-
-(p "Также круто пописать на динамически-типизированных
-   языках. Например Clojure.")
-
-(h3 "Про работу")
-
-(p "Все люди, которых я знаю, если хотят писать на Haskell, то
-   пишут на Haskell за деньги. Люди, которые ищут отговорки, продолжают
-   писать на чем-то ином. Я в этом убежден. Работа есть.")
-
-(p "Если технология не мертва, значит она кому-то нужна.")
-
-(p " Сейчас, когда можно работать удаленно, найти работу по Haskell
-   не составляет сложности. Если ты вчерашний студент, можно очень круто
-   устроиться. Раз в полгода приходят вакансии от Tesla идти в
-   магистратуру в Штаты, чтобы потом писать на Haskell ПО, которое
-   анализирует метрики приходящие с автомобиля.")
-
-(h3 "Ответы на вопросы")
-
-(h4 "Lisp — функциональный язык")
-
-(p "Это неправда. Лисп — не функциональный язык. Код на лиспе
-   содержит присваивание и измененных структур данных. Это процедурный
-   код.")
-
-(p "SICP — это не книжка по функциональному программированию. Она
-   использует некоторые моменты, свойственные ФП. Это книга про
-   информатику в общем. В самой книге присутствуют термин “Процедура”, а
-   не “Функция”.")
-
-(p "Clojure — это Lisp-подобный язык, но функциональный. Clojure вдохновлялась Lisp’ом на этапе зарождения концепций, но в отличии от него это functional-first язык. Все структуры данных иммутабельные. Разделения на чистые и грязные функции там нет, тем не менее в нем отсутствует практика злоупотреблять побочными эффектами.")
-
-(h4 "Применяются ли ФП-элементы в Python")
-
-(p "Применяются, но в Python принято их избегать
-   исторически. Использование только map, filter, reduce не делает код
-   функциональным. Это синтаксический сахар для пайплайнов, которые их
-   обрабатывают.")
-
-(h4 "ООП vs ФП")
-
-(p "Нельзя сказать что ООП очень сильно противоречит ФП. Они про
-   разное. Они не противоположны, они ортогональны.  Что важнее для
-   создания продукта парадигма языка или библиотеки?")
-
-(p "Библиотеки, конечно же, важны, но приходится и самому писать
-   код. Лучше писать код, понимая, что ты делаешь. Порой сами библиотеки
-   могут быть плохо спроектированы и вам придется самому что-то
-   писать. Лучше иметь возможность смотреть на задачу шире.")
-
-(p "Если вдруг у кого-то работа связана только со склеиванием
-   библиотек и не приходится писать свой код, то не важно какая парадигма
-   будет использована. Но такое происходит редко.")
-
-(h3 "Материалы для изучения")
-(ul
- (li (a (@ (href "https://www.manning.com/books/exploring-haskell"))
-        "Книга Exploring Haskell"))
- (li (a (@ (href "https://stepik.org/course/75/"))
-        "Курс по Haskell на Stepic"))
- (li (a (@ (href "https://www.ohaskell.guide/"))
-        "Книга О Haskell по-человечески")))
-
-(h3 "Задачи")
-(ul
- (li (a (@ (href "https://www.codewars.com/"))
-        "Codewars"))
- (li (a (@ (href "http://www.4clojure.com/"))
-        "4clojure")))
-
-(h3 "Другие ссылки")
-
-(ul
- (li (a (@ (href "https://www.meetup.com/Moscow-Clojure-Script-Meetup/"))
-        "Clojure DOJO"))
- (li (a (@ (href "https://t.me/haskellru"))
-        "Сообщество Haskell в Telegram")))
-
-(h3 "Заключение")
-
-(p "На стриме присутствовали звуковые искажения, которые порой
-   останавливали повествование Алексея. Надеюсь что-нибудь с этим
-   сделают. Помимо этого у Натальи, представляющей докладчика ведущей, на
-   записи присутствовало эхо.")
-
-(p "Тем не менее спасибо Алексею и команде Hexlet за
-   вебинар. Человека для создания курса по питону наверное лучше не
-   найти, с нетерпением жду нового материала от него. Было бы круто
-   дополнить раздел с книгами.")))
Index: sts/reproducible-computing-environments.sxml
===================================================================
--- posts/reproducible-computing-environments.sxml	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,85 +1,0 @@
-;;; -*- scheme -*-
-
-(use-modules (haunt utils))
-
-`((title . "Что если лишиться компьютера")
-  (date . ,(string->date* "2019-09-25 23:00"))
-  (tags "Информационная безопасность")
-  (summary . "Размышления о воспроизводимых вычислительных окружениях")
-  
-  (content
-   (p "Это вольный перевод. ")
-
-   (p
-    (b "Автор: ")
-    (a (@ (href
-           "https://ambrevar.xyz/reproducible-computing-environments/index.html"))
-       "Pierre Neidhardt")
-    (br)
-    (b "Оригинальная статья: ")
-    (a (@ (href
-           "https://ambrevar.xyz/reproducible-computing-environments/index.html"))
-       "What if you lost your computer just now?"))
-   
-   (p "Размышления о воспроизводимых вычислительных окружениях")
-
-   (h3 "Скрывающаяся проблема")
-   
-   (p "Несколько лет назад моя подруга, позитивный и довольно
-беспечный человек, разбудила меня однажды утром и попросила о помощи:
-Она горько плакала из-за утери смартфона. Было уже поздно, а она
-только в этот момент осознала какие ужасные последствия были у этого
-события: ее банковский аккаунт, контакты, работа, паспортные данные,
-подпись, всё это было в смартфоне и теперь доступно счастливчику,
-который нашел его день назад.")
-
-   (p "Оглядываясь назад, это может показаться очевидным, и было бы
-правильнее спросить: «Зачем вообще ставить себя в такую шаткую
-ситуацию. Надо было принять меры предосторожности, ведь так?»")
-
-   (p "Выходит, что не так очевидно для большинства из нас. В самом
-деле, присядьте и подумайте вот о чём:")
-
-   (p (quote "«Что если я потеряю свой компьютер (или смартфон, или
-любое другое устройство с персональными данными) прямо сейчас? Каковы
-были бы последствия?»"))
-
-   (p "Эти последствия становятся явны только тогда, когда мы с ними
-сталкиваемся. Потому вот список того, что вы предположительно можете
-потерять:")
-
-   (ul
-    (li "Учетные данные (логин и пароль от веб-сайта)")
-    (li "Деньги (учетные данные банка или кошелек с криптовалютой)")
-    (li "Личные данные (фотографии и видео)")
-    (li "Рабочие данные")
-    (li "Контакты")
-    (li "Переписки (email)")
-    (li "И скорее всего что-то еще"))
-
-   (p "Потеря может быть следующих категорий:")
-
-   (ul
-    (li "Уничтожение. Данных нет. Вопрос: «Можете ли вы точно знать
-какие файлы были уничтожены?»")
-    (li "Кража. Кто-то имеет доступ к вашим данным, возможно это
-учетные данные, личные фотографии, деньги и т.д.")
-    (li "Неизвестно. Вы не знаете, что произошло с устройством. Данные
-на нем могли быть уничтожены или украдены, как сказано выше. Незнание
-может сильно обеспокоить. Предполагайте худшее: Кража."))
-
-   (p "В конце-концов она нашла свой телефон под кроватью. Счастливый
-конец, который преподал небольшой урок... Или не преподал? Я не думаю,
-что она приняла меры предосторожности после. Но кто ее может винить?
-Пока ты не технический специалист достаточно сложно даже начать с
-этими предосторожностями.")
-
-   (p "Приложенные усилия того не стоят, нужно ли нам тогда вообще об
-этом тревожиться? Или лучше принять всё таким каким есть?")
-
-   (h3 "Это не произойдет со мной!")
-
-   (p "Мы естественно так подумаем. Это распространенное заблуждение и
-мы не должны обманывать себя, никто не защищен от краж или потерь.")
-
-   ))
Index: public/css/custom.css
===================================================================
--- public/css/custom.css	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ public/css/custom.css	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,139 @@
+body {
+    padding: 1em;
+}
+
+article {
+    max-width: calc(80ch + 4em);
+    border-radius: 0.em;
+    margin: 0 var(--universal-padding);
+    padding: 1em;
+    background: #fefefe;
+    box-shadow: 0 1px 3px rgba(0,0,0,.1);
+    position: relative;
+}
+
+article h1:first-child,
+article h2:first-child,
+article h3:first-child,
+article h4:first-child,
+article h5:first-child,
+article h6:first-child {
+    margin-top: 0;
+    padding: 0;
+}
+
+.navbar {
+    background: #fefefe;
+    border: 0;
+}
+
+.navbar .button {
+    background: #fefefe;
+    text-transform: none;
+}
+
+/* 16:9 */
+.video {
+    padding-top: 56.25%;
+    position: relative;
+    width: calc(100% - 1em);
+}
+
+iframe {
+    width: 100%;
+    height: 100%;
+    position:  absolute;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+}
+
+.cover {
+    margin: 0.5em 0;
+    border: 1px solid rgba(0,0,0,.3);
+    border-radius: 0.1em;
+}
+
+#youmu {
+    position: relative;
+    top: 1em;
+    max-width: 100%;
+}
+
+#preamble {
+    margin: var(--universal-margin);
+    box-shadow: 0 1px 3px rgba(0,0,0,.1);
+}
+
+#postamble {
+    margin: var(--universal-margin);
+    max-width: calc(80ch + 6em);
+}
+
+hr {
+    background: rgba(0,0,0,.05) !important;
+    height: 0.5rem !important;
+    margin: 1px !important;
+}
+
+#table-of-contents {
+    z-index: 1050;
+    font-size: 9pt;
+    position: fixed;
+    right: calc(var(--universal-margin) + 0.5em);
+    top: 79px;
+    background: #fefefe;
+    line-height: 12pt;
+    box-shadow: 0 1px 3px rgba(0,0,0,.1);
+    max-height: 80%;
+    overflow: auto;
+}
+
+#table-of-contents * {
+    padding: none;
+}
+
+#table-of-contents h2 {
+    font-size: 13pt;
+    border: 0;
+    font-weight: 400;
+    padding: .05em .5em;
+}
+
+#text-table-of-contents ul {
+    margin: 0 1em;
+}
+
+#text-table-of-contents ul li {
+    font-size: 11pt;
+    width: 100%;
+}
+
+#table-of-contents #text-table-of-contents {
+    display: none;
+    text-align: left;
+}
+
+#table-of-contents:hover #text-table-of-contents {
+    display:block;
+    padding: none;
+    margin: 0;
+    padding: 0;
+}
+
+#table-of-contents li {
+    clear:both
+}
+
+.licenses {
+    margin-top: 0.75em !important;
+}
+
+.licenses a:not(:first-child) {
+    margin-left: 0.5em;
+}
+
+.inline li {
+    display: inline-flex;
+}
Index: public/css/mini.css
===================================================================
--- public/css/mini.css	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
+++ public/css/mini.css	(revision 632f9bc919d89e13a96ec064ca7391b28b4096cc)
@@ -0,0 +1,2170 @@
+@charset "UTF-8";
+/*
+  Flavor name: Default (mini-default)
+  Author: Angelos Chalaris (chalarangelo@gmail.com)
+  Maintainers: Angelos Chalaris
+  mini.css version: v3.0.1
+*/
+/*
+  Browsers resets and base typography.
+*/
+/* Core module CSS variable definitions */
+:root {
+  --fore-color: #111;
+  --secondary-fore-color: #444;
+  --back-color: #f8f8f8;
+  --secondary-back-color: #f0f0f0;
+  --blockquote-color: #f57c00;
+  --pre-color: #1565c0;
+  --border-color: #aaa;
+  --secondary-border-color: #ddd;
+  --heading-ratio: 1.19;
+  --universal-margin: 0.5rem;
+  --universal-padding: 0.5rem;
+  --universal-border-radius: 0.125rem;
+  --a-link-color: #0277bd;
+  --a-visited-color: #01579b;
+}
+
+html {
+  font-size: 16px;
+}
+
+a, b, del, em, i, ins, q, span, strong, u {
+  font-size: 1em;
+}
+
+html, * {
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, sans-serif;
+  line-height: 1.5;
+  -webkit-text-size-adjust: 100%;
+}
+
+* {
+  font-size: 1rem;
+}
+
+body {
+  margin: 0;
+  color: var(--fore-color);
+  background: var(--back-color);
+}
+
+details {
+  display: block;
+}
+
+summary {
+  display: list-item;
+}
+
+abbr[title] {
+  border-bottom: none;
+  text-decoration: underline dotted;
+}
+
+input {
+  overflow: visible;
+}
+
+img {
+  max-width: 100%;
+  height: auto;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  line-height: 1.2;
+  margin: calc(1.5 * var(--universal-margin)) var(--universal-margin);
+  font-weight: 500;
+}
+
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
+  color: var(--secondary-fore-color);
+  display: block;
+  margin-top: -0.25rem;
+}
+
+h1 {
+  font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio));
+}
+
+h2 {
+  font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio));
+}
+
+h3 {
+  font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio));
+}
+
+h4 {
+  font-size: calc(1rem * var(--heading-ratio));
+}
+
+h5 {
+  font-size: 1rem;
+}
+
+h6 {
+  font-size: calc(1rem / var(--heading-ratio));
+}
+
+p {
+  margin: var(--universal-margin);
+}
+
+ol, ul {
+  margin: var(--universal-margin);
+  padding-left: calc(2 * var(--universal-margin));
+}
+
+b, strong {
+  font-weight: 700;
+}
+
+hr {
+  box-sizing: content-box;
+  border: 0;
+  line-height: 1.25em;
+  margin: var(--universal-margin);
+  height: 0.0625rem;
+  background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent);
+}
+
+blockquote {
+  display: block;
+  position: relative;
+  font-style: italic;
+  color: var(--secondary-fore-color);
+  margin: var(--universal-margin);
+  padding: calc(3 * var(--universal-padding));
+  border: 0.0625rem solid var(--secondary-border-color);
+  border-left: 0.375rem solid var(--blockquote-color);
+  border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0;
+}
+
+blockquote:before {
+  position: absolute;
+  top: calc(0rem - var(--universal-padding));
+  left: 0;
+  font-family: sans-serif;
+  font-size: 3rem;
+  font-weight: 700;
+  content: "\201c";
+  color: var(--blockquote-color);
+}
+
+blockquote[cite]:after {
+  font-style: normal;
+  font-size: 0.75em;
+  font-weight: 700;
+  content: "\a—  " attr(cite);
+  white-space: pre;
+}
+
+code, kbd, pre, samp {
+  font-family: Menlo, Consolas, monospace;
+  font-size: 0.85em;
+}
+
+code {
+  background: var(--secondary-back-color);
+  border-radius: var(--universal-border-radius);
+  padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2);
+}
+
+kbd {
+  background: var(--fore-color);
+  color: var(--back-color);
+  border-radius: var(--universal-border-radius);
+  padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2);
+}
+
+pre {
+  overflow: auto;
+  background: var(--secondary-back-color);
+  padding: calc(1.5 * var(--universal-padding));
+  margin: var(--universal-margin);
+  border: 0.0625rem solid var(--secondary-border-color);
+  border-left: 0.25rem solid var(--pre-color);
+  border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0;
+}
+
+sup, sub, code, kbd {
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+small, sup, sub, figcaption {
+  font-size: 0.75em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+figure {
+  margin: var(--universal-margin);
+}
+
+figcaption {
+  color: var(--secondary-fore-color);
+}
+
+a {
+  text-decoration: none;
+}
+
+a:link {
+  color: var(--a-link-color);
+}
+
+a:visited {
+  color: var(--a-visited-color);
+}
+
+a:hover, a:focus {
+  text-decoration: underline;
+}
+
+/*
+  Definitions for the grid system, cards and containers.
+*/
+.container {
+  margin: 0 auto;
+  padding: 0 calc(1.5 * var(--universal-padding));
+}
+
+.row {
+  box-sizing: border-box;
+  display: flex;
+  flex: 0 1 auto;
+  flex-flow: row wrap;
+}
+
+.col-sm,
+[class^='col-sm-'],
+[class^='col-sm-offset-'],
+.row[class*='cols-sm-'] > * {
+  box-sizing: border-box;
+  flex: 0 0 auto;
+  padding: 0 calc(var(--universal-padding) / 2);
+}
+
+.col-sm,
+.row.cols-sm > * {
+  max-width: 100%;
+  flex-grow: 1;
+  flex-basis: 0;
+}
+
+.col-sm-1,
+.row.cols-sm-1 > * {
+  max-width: 8.33333%;
+  flex-basis: 8.33333%;
+}
+
+.col-sm-offset-0 {
+  margin-left: 0;
+}
+
+.col-sm-2,
+.row.cols-sm-2 > * {
+  max-width: 16.66667%;
+  flex-basis: 16.66667%;
+}
+
+.col-sm-offset-1 {
+  margin-left: 8.33333%;
+}
+
+.col-sm-3,
+.row.cols-sm-3 > * {
+  max-width: 25%;
+  flex-basis: 25%;
+}
+
+.col-sm-offset-2 {
+  margin-left: 16.66667%;
+}
+
+.col-sm-4,
+.row.cols-sm-4 > * {
+  max-width: 33.33333%;
+  flex-basis: 33.33333%;
+}
+
+.col-sm-offset-3 {
+  margin-left: 25%;
+}
+
+.col-sm-5,
+.row.cols-sm-5 > * {
+  max-width: 41.66667%;
+  flex-basis: 41.66667%;
+}
+
+.col-sm-offset-4 {
+  margin-left: 33.33333%;
+}
+
+.col-sm-6,
+.row.cols-sm-6 > * {
+  max-width: 50%;
+  flex-basis: 50%;
+}
+
+.col-sm-offset-5 {
+  margin-left: 41.66667%;
+}
+
+.col-sm-7,
+.row.cols-sm-7 > * {
+  max-width: 58.33333%;
+  flex-basis: 58.33333%;
+}
+
+.col-sm-offset-6 {
+  margin-left: 50%;
+}
+
+.col-sm-8,
+.row.cols-sm-8 > * {
+  max-width: 66.66667%;
+  flex-basis: 66.66667%;
+}
+
+.col-sm-offset-7 {
+  margin-left: 58.33333%;
+}
+
+.col-sm-9,
+.row.cols-sm-9 > * {
+  max-width: 75%;
+  flex-basis: 75%;
+}
+
+.col-sm-offset-8 {
+  margin-left: 66.66667%;
+}
+
+.col-sm-10,
+.row.cols-sm-10 > * {
+  max-width: 83.33333%;
+  flex-basis: 83.33333%;
+}
+
+.col-sm-offset-9 {
+  margin-left: 75%;
+}
+
+.col-sm-11,
+.row.cols-sm-11 > * {
+  max-width: 91.66667%;
+  flex-basis: 91.66667%;
+}
+
+.col-sm-offset-10 {
+  margin-left: 83.33333%;
+}
+
+.col-sm-12,
+.row.cols-sm-12 > * {
+  max-width: 100%;
+  flex-basis: 100%;
+}
+
+.col-sm-offset-11 {
+  margin-left: 91.66667%;
+}
+
+.col-sm-normal {
+  order: initial;
+}
+
+.col-sm-first {
+  order: -999;
+}
+
+.col-sm-last {
+  order: 999;
+}
+
+@media screen and (min-width: 768px) {
+  .col-md,
+  [class^='col-md-'],
+  [class^='col-md-offset-'],
+  .row[class*='cols-md-'] > * {
+    box-sizing: border-box;
+    flex: 0 0 auto;
+    padding: 0 calc(var(--universal-padding) / 2);
+  }
+  .col-md,
+  .row.cols-md > * {
+    max-width: 100%;
+    flex-grow: 1;
+    flex-basis: 0;
+  }
+  .col-md-1,
+  .row.cols-md-1 > * {
+    max-width: 8.33333%;
+    flex-basis: 8.33333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0;
+  }
+  .col-md-2,
+  .row.cols-md-2 > * {
+    max-width: 16.66667%;
+    flex-basis: 16.66667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333%;
+  }
+  .col-md-3,
+  .row.cols-md-3 > * {
+    max-width: 25%;
+    flex-basis: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66667%;
+  }
+  .col-md-4,
+  .row.cols-md-4 > * {
+    max-width: 33.33333%;
+    flex-basis: 33.33333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-5,
+  .row.cols-md-5 > * {
+    max-width: 41.66667%;
+    flex-basis: 41.66667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333%;
+  }
+  .col-md-6,
+  .row.cols-md-6 > * {
+    max-width: 50%;
+    flex-basis: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66667%;
+  }
+  .col-md-7,
+  .row.cols-md-7 > * {
+    max-width: 58.33333%;
+    flex-basis: 58.33333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-8,
+  .row.cols-md-8 > * {
+    max-width: 66.66667%;
+    flex-basis: 66.66667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333%;
+  }
+  .col-md-9,
+  .row.cols-md-9 > * {
+    max-width: 75%;
+    flex-basis: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66667%;
+  }
+  .col-md-10,
+  .row.cols-md-10 > * {
+    max-width: 83.33333%;
+    flex-basis: 83.33333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-11,
+  .row.cols-md-11 > * {
+    max-width: 91.66667%;
+    flex-basis: 91.66667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333%;
+  }
+  .col-md-12,
+  .row.cols-md-12 > * {
+    max-width: 100%;
+    flex-basis: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66667%;
+  }
+  .col-md-normal {
+    order: initial;
+  }
+  .col-md-first {
+    order: -999;
+  }
+  .col-md-last {
+    order: 999;
+  }
+}
+
+@media screen and (min-width: 1280px) {
+  .col-lg,
+  [class^='col-lg-'],
+  [class^='col-lg-offset-'],
+  .row[class*='cols-lg-'] > * {
+    box-sizing: border-box;
+    flex: 0 0 auto;
+    padding: 0 calc(var(--universal-padding) / 2);
+  }
+  .col-lg,
+  .row.cols-lg > * {
+    max-width: 100%;
+    flex-grow: 1;
+    flex-basis: 0;
+  }
+  .col-lg-1,
+  .row.cols-lg-1 > * {
+    max-width: 8.33333%;
+    flex-basis: 8.33333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0;
+  }
+  .col-lg-2,
+  .row.cols-lg-2 > * {
+    max-width: 16.66667%;
+    flex-basis: 16.66667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333%;
+  }
+  .col-lg-3,
+  .row.cols-lg-3 > * {
+    max-width: 25%;
+    flex-basis: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66667%;
+  }
+  .col-lg-4,
+  .row.cols-lg-4 > * {
+    max-width: 33.33333%;
+    flex-basis: 33.33333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-5,
+  .row.cols-lg-5 > * {
+    max-width: 41.66667%;
+    flex-basis: 41.66667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333%;
+  }
+  .col-lg-6,
+  .row.cols-lg-6 > * {
+    max-width: 50%;
+    flex-basis: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66667%;
+  }
+  .col-lg-7,
+  .row.cols-lg-7 > * {
+    max-width: 58.33333%;
+    flex-basis: 58.33333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-8,
+  .row.cols-lg-8 > * {
+    max-width: 66.66667%;
+    flex-basis: 66.66667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333%;
+  }
+  .col-lg-9,
+  .row.cols-lg-9 > * {
+    max-width: 75%;
+    flex-basis: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66667%;
+  }
+  .col-lg-10,
+  .row.cols-lg-10 > * {
+    max-width: 83.33333%;
+    flex-basis: 83.33333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-11,
+  .row.cols-lg-11 > * {
+    max-width: 91.66667%;
+    flex-basis: 91.66667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333%;
+  }
+  .col-lg-12,
+  .row.cols-lg-12 > * {
+    max-width: 100%;
+    flex-basis: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66667%;
+  }
+  .col-lg-normal {
+    order: initial;
+  }
+  .col-lg-first {
+    order: -999;
+  }
+  .col-lg-last {
+    order: 999;
+  }
+}
+
+/* Card component CSS variable definitions */
+:root {
+  --card-back-color: #f8f8f8;
+  --card-fore-color: #111;
+  --card-border-color: #ddd;
+}
+
+.card {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-self: center;
+  position: relative;
+  width: 100%;
+  background: var(--card-back-color);
+  color: var(--card-fore-color);
+  border: 0.0625rem solid var(--card-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: var(--universal-margin);
+  overflow: hidden;
+}
+
+@media screen and (min-width: 320px) {
+  .card {
+    max-width: 320px;
+  }
+}
+
+.card > .section {
+  background: var(--card-back-color);
+  color: var(--card-fore-color);
+  box-sizing: border-box;
+  margin: 0;
+  border: 0;
+  border-radius: 0;
+  border-bottom: 0.0625rem solid var(--card-border-color);
+  padding: var(--universal-padding);
+  width: 100%;
+}
+
+.card > .section.media {
+  height: 200px;
+  padding: 0;
+  -o-object-fit: cover;
+  object-fit: cover;
+}
+
+.card > .section:last-child {
+  border-bottom: 0;
+}
+
+/*
+  Custom elements for card elements.
+*/
+@media screen and (min-width: 240px) {
+  .card.small {
+    max-width: 240px;
+  }
+}
+
+@media screen and (min-width: 480px) {
+  .card.large {
+    max-width: 480px;
+  }
+}
+
+.card.fluid {
+  max-width: 100%;
+  width: auto;
+}
+
+.card.warning {
+  --card-back-color: #ffca28;
+  --card-border-color: #e8b825;
+}
+
+.card.error {
+  --card-back-color: #b71c1c;
+  --card-fore-color: #f8f8f8;
+  --card-border-color: #a71a1a;
+}
+
+.card > .section.dark {
+  --card-back-color: #e0e0e0;
+}
+
+.card > .section.double-padded {
+  padding: calc(1.5 * var(--universal-padding));
+}
+
+/*
+  Definitions for forms and input elements.
+*/
+/* Input_control module CSS variable definitions */
+:root {
+  --form-back-color: #f0f0f0;
+  --form-fore-color: #111;
+  --form-border-color: #ddd;
+  --input-back-color: #f8f8f8;
+  --input-fore-color: #111;
+  --input-border-color: #ddd;
+  --input-focus-color: #0288d1;
+  --input-invalid-color: #d32f2f;
+  --button-back-color: #e2e2e2;
+  --button-hover-back-color: #dcdcdc;
+  --button-fore-color: #212121;
+  --button-border-color: transparent;
+  --button-hover-border-color: transparent;
+  --button-group-border-color: rgba(124, 124, 124, 0.54);
+}
+
+form {
+  background: var(--form-back-color);
+  color: var(--form-fore-color);
+  border: 0.0625rem solid var(--form-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: var(--universal-margin);
+  padding: calc(2 * var(--universal-padding)) var(--universal-padding);
+}
+
+fieldset {
+  border: 0.0625rem solid var(--form-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: calc(var(--universal-margin) / 4);
+  padding: var(--universal-padding);
+}
+
+legend {
+  box-sizing: border-box;
+  display: table;
+  max-width: 100%;
+  white-space: normal;
+  font-weight: 700;
+  padding: calc(var(--universal-padding) / 2);
+}
+
+label {
+  padding: calc(var(--universal-padding) / 2) var(--universal-padding);
+}
+
+.input-group {
+  display: inline-block;
+}
+
+.input-group.fluid {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.input-group.fluid > input {
+  max-width: 100%;
+  flex-grow: 1;
+  flex-basis: 0px;
+}
+
+@media screen and (max-width: 767px) {
+  .input-group.fluid {
+    align-items: stretch;
+    flex-direction: column;
+  }
+}
+
+.input-group.vertical {
+  display: flex;
+  align-items: stretch;
+  flex-direction: column;
+}
+
+.input-group.vertical > input {
+  max-width: 100%;
+  flex-grow: 1;
+  flex-basis: 0px;
+}
+
+[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+[type="search"] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px;
+}
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"],
+[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select {
+  box-sizing: border-box;
+  background: var(--input-back-color);
+  color: var(--input-fore-color);
+  border: 0.0625rem solid var(--input-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: calc(var(--universal-margin) / 2);
+  padding: var(--universal-padding) calc(1.5 * var(--universal-padding));
+}
+
+input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus {
+  border-color: var(--input-focus-color);
+  box-shadow: none;
+}
+
+input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid {
+  border-color: var(--input-invalid-color);
+  box-shadow: none;
+}
+
+input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] {
+  background: var(--secondary-back-color);
+}
+
+select {
+  max-width: 100%;
+}
+
+option {
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+[type="checkbox"], [type="radio"] {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  position: relative;
+  height: calc(1rem + var(--universal-padding) / 2);
+  width: calc(1rem + var(--universal-padding) / 2);
+  vertical-align: text-bottom;
+  padding: 0;
+  flex-basis: calc(1rem + var(--universal-padding) / 2) !important;
+  flex-grow: 0 !important;
+}
+
+[type="checkbox"]:checked:before, [type="radio"]:checked:before {
+  position: absolute;
+}
+
+[type="checkbox"]:checked:before {
+  content: '\2713';
+  font-family: sans-serif;
+  font-size: calc(1rem + var(--universal-padding) / 2);
+  top: calc(0rem - var(--universal-padding));
+  left: calc(var(--universal-padding) / 4);
+}
+
+[type="radio"] {
+  border-radius: 100%;
+}
+
+[type="radio"]:checked:before {
+  border-radius: 100%;
+  content: '';
+  top: calc(0.0625rem + var(--universal-padding) / 2);
+  left: calc(0.0625rem + var(--universal-padding) / 2);
+  background: var(--input-fore-color);
+  width: 0.5rem;
+  height: 0.5rem;
+}
+
+:placeholder-shown {
+  color: var(--input-fore-color);
+}
+
+::-ms-placeholder {
+  color: var(--input-fore-color);
+  opacity: 0.54;
+}
+
+button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+button, html [type="button"], [type="reset"], [type="submit"] {
+  -webkit-appearance: button;
+}
+
+button {
+  overflow: visible;
+  text-transform: none;
+}
+
+button, [type="button"], [type="submit"], [type="reset"],
+a.button, label.button, .button,
+a[role="button"], label[role="button"], [role="button"] {
+  display: inline-block;
+  background: var(--button-back-color);
+  color: var(--button-fore-color);
+  border: 0.0625rem solid var(--button-border-color);
+  border-radius: var(--universal-border-radius);
+  padding: var(--universal-padding) calc(1.5 * var(--universal-padding));
+  margin: var(--universal-margin);
+  text-decoration: none;
+  cursor: pointer;
+  transition: background 0.3s;
+}
+
+button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus,
+a.button:hover,
+a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus,
+a[role="button"]:hover,
+a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus {
+  background: var(--button-hover-back-color);
+  border-color: var(--button-hover-border-color);
+}
+
+input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] {
+  cursor: not-allowed;
+  opacity: 0.75;
+}
+
+.button-group {
+  display: flex;
+  border: 0.0625rem solid var(--button-group-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: var(--universal-margin);
+}
+
+.button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"],
+.button-group > .button, .button-group > [role="button"] {
+  margin: 0;
+  max-width: 100%;
+  flex: 1 1 auto;
+  text-align: center;
+  border: 0;
+  border-radius: 0;
+  box-shadow: none;
+}
+
+.button-group > :not(:first-child) {
+  border-left: 0.0625rem solid var(--button-group-border-color);
+}
+
+@media screen and (max-width: 767px) {
+  .button-group {
+    flex-direction: column;
+  }
+  .button-group > :not(:first-child) {
+    border: 0;
+    border-top: 0.0625rem solid var(--button-group-border-color);
+  }
+}
+
+/*
+  Custom elements for forms and input elements.
+*/
+button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary {
+  --button-back-color: #1976d2;
+  --button-fore-color: #f8f8f8;
+}
+
+button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus {
+  --button-hover-back-color: #1565c0;
+}
+
+button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary {
+  --button-back-color: #d32f2f;
+  --button-fore-color: #f8f8f8;
+}
+
+button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus {
+  --button-hover-back-color: #c62828;
+}
+
+button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary {
+  --button-back-color: #308732;
+  --button-fore-color: #f8f8f8;
+}
+
+button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus {
+  --button-hover-back-color: #277529;
+}
+
+button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse {
+  --button-back-color: #212121;
+  --button-fore-color: #f8f8f8;
+}
+
+button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus {
+  --button-hover-back-color: #111;
+}
+
+button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small {
+  padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding));
+  margin: var(--universal-margin);
+}
+
+button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large {
+  padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding));
+  margin: var(--universal-margin);
+}
+
+/*
+  Definitions for navigation elements.
+*/
+/* Navigation module CSS variable definitions */
+:root {
+  --header-back-color: #f8f8f8;
+  --header-hover-back-color: #f0f0f0;
+  --header-fore-color: #444;
+  --header-border-color: #ddd;
+  --nav-back-color: #f8f8f8;
+  --nav-hover-back-color: #f0f0f0;
+  --nav-fore-color: #444;
+  --nav-border-color: #ddd;
+  --nav-link-color: #0277bd;
+  --footer-fore-color: #444;
+  --footer-back-color: #f8f8f8;
+  --footer-border-color: #ddd;
+  --footer-link-color: #0277bd;
+  --drawer-back-color: #f8f8f8;
+  --drawer-hover-back-color: #f0f0f0;
+  --drawer-border-color: #ddd;
+  --drawer-close-color: #444;
+}
+
+header {
+  height: 3.1875rem;
+  background: var(--header-back-color);
+  color: var(--header-fore-color);
+  border-bottom: 0.0625rem solid var(--header-border-color);
+  padding: calc(var(--universal-padding) / 4) 0;
+  white-space: nowrap;
+  overflow-x: auto;
+  overflow-y: hidden;
+}
+
+header.row {
+  box-sizing: content-box;
+}
+
+header .logo {
+  color: var(--header-fore-color);
+  font-size: 1.75rem;
+  padding: var(--universal-padding) calc(2 * var(--universal-padding));
+  text-decoration: none;
+}
+
+header button, header [type="button"], header .button, header [role="button"] {
+  box-sizing: border-box;
+  position: relative;
+  top: calc(0rem - var(--universal-padding) / 4);
+  height: calc(3.1875rem + var(--universal-padding) / 2);
+  background: var(--header-back-color);
+  line-height: calc(3.1875rem - var(--universal-padding) * 1.5);
+  text-align: center;
+  color: var(--header-fore-color);
+  border: 0;
+  border-radius: 0;
+  margin: 0;
+  text-transform: uppercase;
+}
+
+header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus {
+  background: var(--header-hover-back-color);
+}
+
+nav {
+  background: var(--nav-back-color);
+  color: var(--nav-fore-color);
+  border: 0.0625rem solid var(--nav-border-color);
+  border-radius: var(--universal-border-radius);
+  margin: var(--universal-margin);
+}
+
+nav * {
+  padding: var(--universal-padding) calc(1.5 * var(--universal-padding));
+}
+
+nav a, nav a:visited {
+  display: block;
+  color: var(--nav-link-color);
+  border-radius: var(--universal-border-radius);
+  transition: background 0.3s;
+}
+
+nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus {
+  text-decoration: none;
+  background: var(--nav-hover-back-color);
+}
+
+nav .sublink-1 {
+  position: relative;
+  margin-left: calc(2 * var(--universal-padding));
+}
+
+nav .sublink-1:before {
+  position: absolute;
+  left: calc(var(--universal-padding) - 1 * var(--universal-padding));
+  top: -0.0625rem;
+  content: '';
+  height: 100%;
+  border: 0.0625rem solid var(--nav-border-color);
+  border-left: 0;
+}
+
+nav .sublink-2 {
+  position: relative;
+  margin-left: calc(4 * var(--universal-padding));
+}
+
+nav .sublink-2:before {
+  position: absolute;
+  left: calc(var(--universal-padding) - 3 * var(--universal-padding));
+  top: -0.0625rem;
+  content: '';
+  height: 100%;
+  border: 0.0625rem solid var(--nav-border-color);
+  border-left: 0;
+}
+
+footer {
+  background: var(--footer-back-color);
+  color: var(--footer-fore-color);
+  border-top: 0.0625rem solid var(--footer-border-color);
+  padding: calc(2 * var(--universal-padding)) var(--universal-padding);
+  font-size: 0.875rem;
+}
+
+footer a, footer a:visited {
+  color: var(--footer-link-color);
+}
+
+header.sticky {
+  position: -webkit-sticky;
+  position: sticky;
+  z-index: 1101;
+  top: 0;
+}
+
+footer.sticky {
+  position: -webkit-sticky;
+  position: sticky;
+  z-index: 1101;
+  bottom: 0;
+}
+
+.drawer-toggle:before {
+  display: inline-block;
+  position: relative;
+  vertical-align: bottom;
+  content: '\00a0\2261\00a0';
+  font-family: sans-serif;
+  font-size: 1.5em;
+}
+
+@media screen and (min-width: 768px) {
+  .drawer-toggle:not(.persistent) {
+    display: none;
+  }
+}
+
+[type="checkbox"].drawer {
+  height: 1px;
+  width: 1px;
+  margin: -1px;
+  overflow: hidden;
+  position: absolute;
+  clip: rect(0 0 0 0);
+  -webkit-clip-path: inset(100%);
+  clip-path: inset(100%);
+}
+
+[type="checkbox"].drawer + * {
+  display: block;
+  box-sizing: border-box;
+  position: fixed;
+  top: 0;
+  width: 320px;
+  height: 100vh;
+  overflow-y: auto;
+  background: var(--drawer-back-color);
+  border: 0.0625rem solid var(--drawer-border-color);
+  border-radius: 0;
+  margin: 0;
+  z-index: 1110;
+  right: -320px;
+  transition: right 0.3s;
+}
+
+[type="checkbox"].drawer + * .drawer-close {
+  position: absolute;
+  top: var(--universal-margin);
+  right: var(--universal-margin);
+  z-index: 1111;
+  width: 2rem;
+  height: 2rem;
+  border-radius: var(--universal-border-radius);
+  padding: var(--universal-padding);
+  margin: 0;
+  cursor: pointer;
+  transition: background 0.3s;
+}
+
+[type="checkbox"].drawer + * .drawer-close:before {
+  display: block;
+  content: '\00D7';
+  color: var(--drawer-close-color);
+  position: relative;
+  font-family: sans-serif;
+  font-size: 2rem;
+  line-height: 1;
+  text-align: center;
+}
+
+[type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus {
+  background: var(--drawer-hover-back-color);
+}
+
+@media screen and (max-width: 320px) {
+  [type="checkbox"].drawer + * {
+    width: 100%;
+  }
+}
+
+[type="checkbox"].drawer:checked + * {
+  right: 0;
+}
+
+@media screen and (min-width: 768px) {
+  [type="checkbox"].drawer:not(.persistent) + * {
+    position: static;
+    height: 100%;
+    z-index: 1100;
+  }
+  [type="checkbox"].drawer:not(.persistent) + * .drawer-close {
+    display: none;
+  }
+}
+
+/*
+  Definitions for the responsive table component.
+*/
+/* Table module CSS variable definitions. */
+:root {
+  --table-border-color: #aaa;
+  --table-border-separator-color: #666;
+  --table-head-back-color: #e6e6e6;
+  --table-head-fore-color: #111;
+  --table-body-back-color: #f8f8f8;
+  --table-body-fore-color: #111;
+  --table-body-alt-back-color: #eee;
+}
+
+table {
+  border-collapse: separate;
+  border-spacing: 0;
+  margin: 0;
+  display: flex;
+  flex: 0 1 auto;
+  flex-flow: row wrap;
+  padding: var(--universal-padding);
+  padding-top: 0;
+}
+
+table caption {
+  font-size: 1.5rem;
+  margin: calc(2 * var(--universal-margin)) 0;
+  max-width: 100%;
+  flex: 0 0 100%;
+}
+
+table thead, table tbody {
+  display: flex;
+  flex-flow: row wrap;
+  border: 0.0625rem solid var(--table-border-color);
+}
+
+table thead {
+  z-index: 999;
+  border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0;
+  border-bottom: 0.0625rem solid var(--table-border-separator-color);
+}
+
+table tbody {
+  border-top: 0;
+  margin-top: calc(0 - var(--universal-margin));
+  border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius);
+}
+
+table tr {
+  display: flex;
+  padding: 0;
+}
+
+table th, table td {
+  padding: calc(2 * var(--universal-padding));
+}
+
+table th {
+  text-align: left;
+  background: var(--table-head-back-color);
+  color: var(--table-head-fore-color);
+}
+
+table td {
+  background: var(--table-body-back-color);
+  color: var(--table-body-fore-color);
+  border-top: 0.0625rem solid var(--table-border-color);
+}
+
+table:not(.horizontal) {
+  overflow: auto;
+  max-height: 400px;
+}
+
+table:not(.horizontal) thead, table:not(.horizontal) tbody {
+  max-width: 100%;
+  flex: 0 0 100%;
+}
+
+table:not(.horizontal) tr {
+  flex-flow: row wrap;
+  flex: 0 0 100%;
+}
+
+table:not(.horizontal) th, table:not(.horizontal) td {
+  flex: 1 0 0%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+table:not(.horizontal) thead {
+  position: sticky;
+  top: 0;
+}
+
+table:not(.horizontal) tbody tr:first-child td {
+  border-top: 0;
+}
+
+table.horizontal {
+  border: 0;
+}
+
+table.horizontal thead, table.horizontal tbody {
+  border: 0;
+  flex: .2 0 0;
+  flex-flow: row nowrap;
+}
+
+table.horizontal tbody {
+  overflow: auto;
+  justify-content: space-between;
+  flex: .8 0 0;
+  margin-left: 0;
+  padding-bottom: calc(var(--universal-padding) / 4);
+}
+
+table.horizontal tr {
+  flex-direction: column;
+  flex: 1 0 auto;
+}
+
+table.horizontal th, table.horizontal td {
+  width: auto;
+  border: 0;
+  border-bottom: 0.0625rem solid var(--table-border-color);
+}
+
+table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) {
+  border-top: 0;
+}
+
+table.horizontal th {
+  text-align: right;
+  border-left: 0.0625rem solid var(--table-border-color);
+  border-right: 0.0625rem solid var(--table-border-separator-color);
+}
+
+table.horizontal thead tr:first-child {
+  padding-left: 0;
+}
+
+table.horizontal th:first-child, table.horizontal td:first-child {
+  border-top: 0.0625rem solid var(--table-border-color);
+}
+
+table.horizontal tbody tr:last-child td {
+  border-right: 0.0625rem solid var(--table-border-color);
+}
+
+table.horizontal tbody tr:last-child td:first-child {
+  border-top-right-radius: 0.25rem;
+}
+
+table.horizontal tbody tr:last-child td:last-child {
+  border-bottom-right-radius: 0.25rem;
+}
+
+table.horizontal thead tr:first-child th:first-child {
+  border-top-left-radius: 0.25rem;
+}
+
+table.horizontal thead tr:first-child th:last-child {
+  border-bottom-left-radius: 0.25rem;
+}
+
+@media screen and (max-width: 767px) {
+  table, table.horizontal {
+    border-collapse: collapse;
+    border: 0;
+    width: 100%;
+    display: table;
+  }
+  table thead, table th, table.horizontal thead, table.horizontal th {
+    border: 0;
+    height: 1px;
+    width: 1px;
+    margin: -1px;
+    overflow: hidden;
+    padding: 0;
+    position: absolute;
+    clip: rect(0 0 0 0);
+    -webkit-clip-path: inset(100%);
+    clip-path: inset(100%);
+  }
+  table tbody, table.horizontal tbody {
+    border: 0;
+    display: table-row-group;
+  }
+  table tr, table.horizontal tr {
+    display: block;
+    border: 0.0625rem solid var(--table-border-color);
+    border-radius: var(--universal-border-radius);
+    background: #fafafa;
+    padding: var(--universal-padding);
+    margin: var(--universal-margin);
+    margin-bottom: calc(2 * var(--universal-margin));
+  }
+  table th, table td, table.horizontal th, table.horizontal td {
+    width: auto;
+  }
+  table td, table.horizontal td {
+    display: block;
+    border: 0;
+    text-align: right;
+  }
+  table td:before, table.horizontal td:before {
+    content: attr(data-label);
+    float: left;
+    font-weight: 600;
+  }
+  table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child {
+    border-top: 0;
+  }
+  table tbody tr:last-child td, table.horizontal tbody tr:last-child td {
+    border-right: 0;
+  }
+}
+
+:root {
+  --table-body-alt-back-color: #eee;
+}
+
+table.striped tr:nth-of-type(2n) > td {
+  background: var(--table-body-alt-back-color);
+}
+
+@media screen and (max-width: 768px) {
+  table.striped tr:nth-of-type(2n) {
+    background: var(--table-body-alt-back-color);
+  }
+}
+
+:root {
+  --table-body-hover-back-color: #90caf9;
+}
+
+table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td {
+  background: var(--table-body-hover-back-color);
+}
+
+@media screen and (max-width: 768px) {
+  table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td {
+    background: var(--table-body-hover-back-color);
+  }
+}
+
+/*
+  Definitions for contextual background elements, toasts and tooltips.
+*/
+/* Contextual module CSS variable definitions */
+:root {
+  --mark-back-color: #0277bd;
+  --mark-fore-color: #fafafa;
+}
+
+mark {
+  background: var(--mark-back-color);
+  color: var(--mark-fore-color);
+  font-size: 0.95em;
+  line-height: 1em;
+  border-radius: var(--universal-border-radius);
+  padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2);
+}
+
+mark.inline-block {
+  display: inline-block;
+  font-size: 1em;
+  line-height: 1.5;
+  padding: calc(var(--universal-padding) / 2) var(--universal-padding);
+}
+
+:root {
+  --toast-back-color: #424242;
+  --toast-fore-color: #fafafa;
+}
+
+.toast {
+  position: fixed;
+  bottom: calc(var(--universal-margin) * 3);
+  left: 50%;
+  transform: translate(-50%, -50%);
+  z-index: 1111;
+  color: var(--toast-fore-color);
+  background: var(--toast-back-color);
+  border-radius: calc(var(--universal-border-radius) * 16);
+  padding: var(--universal-padding) calc(var(--universal-padding) * 3);
+}
+
+:root {
+  --tooltip-back-color: #212121;
+  --tooltip-fore-color: #fafafa;
+}
+
+.tooltip {
+  position: relative;
+  display: inline-block;
+}
+
+.tooltip:before, .tooltip:after {
+  position: absolute;
+  opacity: 0;
+  clip: rect(0 0 0 0);
+  -webkit-clip-path: inset(100%);
+  clip-path: inset(100%);
+  transition: all 0.3s;
+  z-index: 1010;
+  left: 50%;
+}
+
+.tooltip:not(.bottom):before, .tooltip:not(.bottom):after {
+  bottom: 75%;
+}
+
+.tooltip.bottom:before, .tooltip.bottom:after {
+  top: 75%;
+}
+
+.tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after {
+  opacity: 1;
+  clip: auto;
+  -webkit-clip-path: inset(0%);
+  clip-path: inset(0%);
+}
+
+.tooltip:before {
+  content: '';
+  background: transparent;
+  border: var(--universal-margin) solid transparent;
+  left: calc(50% - var(--universal-margin));
+}
+
+.tooltip:not(.bottom):before {
+  border-top-color: #212121;
+}
+
+.tooltip.bottom:before {
+  border-bottom-color: #212121;
+}
+
+.tooltip:after {
+  content: attr(aria-label);
+  color: var(--tooltip-fore-color);
+  background: var(--tooltip-back-color);
+  border-radius: var(--universal-border-radius);
+  padding: var(--universal-padding);
+  white-space: nowrap;
+  transform: translateX(-50%);
+}
+
+.tooltip:not(.bottom):after {
+  margin-bottom: calc(2 * var(--universal-margin));
+}
+
+.tooltip.bottom:after {
+  margin-top: calc(2 * var(--universal-margin));
+}
+
+:root {
+  --modal-overlay-color: rgba(0, 0, 0, 0.45);
+  --modal-close-color: #444;
+  --modal-close-hover-color: #f0f0f0;
+}
+
+[type="checkbox"].modal {
+  height: 1px;
+  width: 1px;
+  margin: -1px;
+  overflow: hidden;
+  position: absolute;
+  clip: rect(0 0 0 0);
+  -webkit-clip-path: inset(100%);
+  clip-path: inset(100%);
+}
+
+[type="checkbox"].modal + div {
+  position: fixed;
+  top: 0;
+  left: 0;
+  display: none;
+  width: 100vw;
+  height: 100vh;
+  background: var(--modal-overlay-color);
+}
+
+[type="checkbox"].modal + div .card {
+  margin: 0 auto;
+  max-height: 50vh;
+  overflow: auto;
+}
+
+[type="checkbox"].modal + div .card .modal-close {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 1.75rem;
+  height: 1.75rem;
+  border-radius: var(--universal-border-radius);
+  padding: var(--universal-padding);
+  margin: 0;
+  cursor: pointer;
+  transition: background 0.3s;
+}
+
+[type="checkbox"].modal + div .card .modal-close:before {
+  display: block;
+  content: '\00D7';
+  color: var(--modal-close-color);
+  position: relative;
+  font-family: sans-serif;
+  font-size: 1.75rem;
+  line-height: 1;
+  text-align: center;
+}
+
+[type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus {
+  background: var(--modal-close-hover-color);
+}
+
+[type="checkbox"].modal:checked + div {
+  display: flex;
+  flex: 0 1 auto;
+  z-index: 1200;
+}
+
+[type="checkbox"].modal:checked + div .card .modal-close {
+  z-index: 1211;
+}
+
+:root {
+  --collapse-label-back-color: #e8e8e8;
+  --collapse-label-fore-color: #212121;
+  --collapse-label-hover-back-color: #f0f0f0;
+  --collapse-selected-label-back-color: #ececec;
+  --collapse-border-color: #ddd;
+  --collapse-content-back-color: #fafafa;
+  --collapse-selected-label-border-color: #0277bd;
+}
+
+.collapse {
+  width: calc(100% - 2 * var(--universal-margin));
+  opacity: 1;
+  display: flex;
+  flex-direction: column;
+  margin: var(--universal-margin);
+  border-radius: var(--universal-border-radius);
+}
+
+.collapse > [type="radio"], .collapse > [type="checkbox"] {
+  height: 1px;
+  width: 1px;
+  margin: -1px;
+  overflow: hidden;
+  position: absolute;
+  clip: rect(0 0 0 0);
+  -webkit-clip-path: inset(100%);
+  clip-path: inset(100%);
+}
+
+.collapse > label {
+  flex-grow: 1;
+  display: inline-block;
+  height: 1.5rem;
+  cursor: pointer;
+  transition: background 0.3s;
+  color: var(--collapse-label-fore-color);
+  background: var(--collapse-label-back-color);
+  border: 0.0625rem solid var(--collapse-border-color);
+  padding: calc(1.5 * var(--universal-padding));
+}
+
+.collapse > label:hover, .collapse > label:focus {
+  background: var(--collapse-label-hover-back-color);
+}
+
+.collapse > label + div {
+  flex-basis: auto;
+  height: 1px;
+  width: 1px;
+  margin: -1px;
+  overflow: hidden;
+  position: absolute;
+  clip: rect(0 0 0 0);
+  -webkit-clip-path: inset(100%);
+  clip-path: inset(100%);
+  transition: max-height 0.3s;
+  max-height: 1px;
+}
+
+.collapse > :checked + label {
+  background: var(--collapse-selected-label-back-color);
+  border-bottom-color: var(--collapse-selected-label-border-color);
+}
+
+.collapse > :checked + label + div {
+  box-sizing: border-box;
+  position: relative;
+  width: 100%;
+  height: auto;
+  overflow: auto;
+  margin: 0;
+  background: var(--collapse-content-back-color);
+  border: 0.0625rem solid var(--collapse-border-color);
+  border-top: 0;
+  padding: var(--universal-padding);
+  clip: auto;
+  -webkit-clip-path: inset(0%);
+  clip-path: inset(0%);
+  max-height: 400px;
+}
+
+.collapse > label:not(:first-of-type) {
+  border-top: 0;
+}
+
+.collapse > label:first-of-type {
+  border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0;
+}
+
+.collapse > label:last-of-type:not(:first-of-type) {
+  border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius);
+}
+
+.collapse > label:last-of-type:first-of-type {
+  border-radius: var(--universal-border-radius);
+}
+
+.collapse > :checked:last-of-type:not(:first-of-type) + label {
+  border-radius: 0;
+}
+
+.collapse > :checked:last-of-type + label + div {
+  border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius);
+}
+
+/*
+  Custom elements for contextual background elements, toasts and tooltips.
+*/
+mark.secondary {
+  --mark-back-color: #d32f2f;
+}
+
+mark.tertiary {
+  --mark-back-color: #308732;
+}
+
+mark.tag {
+  padding: calc(var(--universal-padding)/2) var(--universal-padding);
+  border-radius: 1em;
+}
+
+/*
+  Definitions for progress elements and spinners.
+*/
+/* Progess module CSS variable definitions */
+:root {
+  --progress-back-color: #ddd;
+  --progress-fore-color: #555;
+}
+
+progress {
+  display: block;
+  vertical-align: baseline;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  height: 0.75rem;
+  width: calc(100% - 2 * var(--universal-margin));
+  margin: var(--universal-margin);
+  border: 0;
+  border-radius: calc(2 * var(--universal-border-radius));
+  background: var(--progress-back-color);
+  color: var(--progress-fore-color);
+}
+
+progress::-webkit-progress-value {
+  background: var(--progress-fore-color);
+  border-top-left-radius: calc(2 * var(--universal-border-radius));
+  border-bottom-left-radius: calc(2 * var(--universal-border-radius));
+}
+
+progress::-webkit-progress-bar {
+  background: var(--progress-back-color);
+}
+
+progress::-moz-progress-bar {
+  background: var(--progress-fore-color);
+  border-top-left-radius: calc(2 * var(--universal-border-radius));
+  border-bottom-left-radius: calc(2 * var(--universal-border-radius));
+}
+
+progress[value="1000"]::-webkit-progress-value {
+  border-radius: calc(2 * var(--universal-border-radius));
+}
+
+progress[value="1000"]::-moz-progress-bar {
+  border-radius: calc(2 * var(--universal-border-radius));
+}
+
+progress.inline {
+  display: inline-block;
+  vertical-align: middle;
+  width: 60%;
+}
+
+:root {
+  --spinner-back-color: #ddd;
+  --spinner-fore-color: #555;
+}
+
+@keyframes spinner-donut-anim {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+.spinner {
+  display: inline-block;
+  margin: var(--universal-margin);
+  border: 0.25rem solid var(--spinner-back-color);
+  border-left: 0.25rem solid var(--spinner-fore-color);
+  border-radius: 50%;
+  width: 1.25rem;
+  height: 1.25rem;
+  animation: spinner-donut-anim 1.2s linear infinite;
+}
+
+/*
+  Custom elements for progress bars and spinners.
+*/
+progress.primary {
+  --progress-fore-color: #1976d2;
+}
+
+progress.secondary {
+  --progress-fore-color: #d32f2f;
+}
+
+progress.tertiary {
+  --progress-fore-color: #308732;
+}
+
+.spinner.primary {
+  --spinner-fore-color: #1976d2;
+}
+
+.spinner.secondary {
+  --spinner-fore-color: #d32f2f;
+}
+
+.spinner.tertiary {
+  --spinner-fore-color: #308732;
+}
+
+/*
+  Definitions for icons - powered by Feather (https://feathericons.com/).
+*/
+span[class^='icon-'] {
+  display: inline-block;
+  height: 1em;
+  width: 1em;
+  vertical-align: -0.125em;
+  background-size: contain;
+  margin: 0 calc(var(--universal-margin) / 4);
+}
+
+span[class^='icon-'].secondary {
+  -webkit-filter: invert(25%);
+  filter: invert(25%);
+}
+
+span[class^='icon-'].inverse {
+  -webkit-filter: invert(100%);
+  filter: invert(100%);
+}
+
+span.icon-alert {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-bookmark {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E");
+}
+
+span.icon-calendar {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-credit {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-edit {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E");
+}
+
+span.icon-link {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-help {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-home {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E");
+}
+
+span.icon-info {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-lock {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E");
+}
+
+span.icon-mail {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E");
+}
+
+span.icon-location {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E");
+}
+
+span.icon-phone {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E");
+}
+
+span.icon-rss {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E");
+}
+
+span.icon-search {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-settings {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E");
+}
+
+span.icon-share {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-cart {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E");
+}
+
+span.icon-upload {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E");
+}
+
+span.icon-user {
+  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E");
+}
+
+/*
+  Definitions for utilities and helper classes.
+*/
+/* Utility module CSS variable definitions */
+:root {
+  --generic-border-color: rgba(0, 0, 0, 0.3);
+  --generic-box-shadow: 0 0.25rem 0.25rem 0 rgba(0, 0, 0, 0.125), 0 0.125rem 0.125rem -0.125rem rgba(0, 0, 0, 0.25);
+}
+
+.hidden {
+  display: none !important;
+}
+
+.visually-hidden {
+  position: absolute !important;
+  width: 1px !important;
+  height: 1px !important;
+  margin: -1px !important;
+  border: 0 !important;
+  padding: 0 !important;
+  clip: rect(0 0 0 0) !important;
+  -webkit-clip-path: inset(100%) !important;
+  clip-path: inset(100%) !important;
+  overflow: hidden !important;
+}
+
+.bordered {
+  border: 0.0625rem solid var(--generic-border-color) !important;
+}
+
+.rounded {
+  border-radius: var(--universal-border-radius) !important;
+}
+
+.circular {
+  border-radius: 50% !important;
+}
+
+.shadowed {
+  box-shadow: var(--generic-box-shadow) !important;
+}
+
+.responsive-margin {
+  margin: calc(var(--universal-margin) / 4) !important;
+}
+
+@media screen and (min-width: 768px) {
+  .responsive-margin {
+    margin: calc(var(--universal-margin) / 2) !important;
+  }
+}
+
+@media screen and (min-width: 1280px) {
+  .responsive-margin {
+    margin: var(--universal-margin) !important;
+  }
+}
+
+.responsive-padding {
+  padding: calc(var(--universal-padding) / 4) !important;
+}
+
+@media screen and (min-width: 768px) {
+  .responsive-padding {
+    padding: calc(var(--universal-padding) / 2) !important;
+  }
+}
+
+@media screen and (min-width: 1280px) {
+  .responsive-padding {
+    padding: var(--universal-padding) !important;
+  }
+}
+
+@media screen and (max-width: 767px) {
+  .hidden-sm {
+    display: none !important;
+  }
+}
+
+@media screen and (min-width: 768px) and (max-width: 1279px) {
+  .hidden-md {
+    display: none !important;
+  }
+}
+
+@media screen and (min-width: 1280px) {
+  .hidden-lg {
+    display: none !important;
+  }
+}
+
+@media screen and (max-width: 767px) {
+  .visually-hidden-sm {
+    position: absolute !important;
+    width: 1px !important;
+    height: 1px !important;
+    margin: -1px !important;
+    border: 0 !important;
+    padding: 0 !important;
+    clip: rect(0 0 0 0) !important;
+    -webkit-clip-path: inset(100%) !important;
+    clip-path: inset(100%) !important;
+    overflow: hidden !important;
+  }
+}
+
+@media screen and (min-width: 768px) and (max-width: 1279px) {
+  .visually-hidden-md {
+    position: absolute !important;
+    width: 1px !important;
+    height: 1px !important;
+    margin: -1px !important;
+    border: 0 !important;
+    padding: 0 !important;
+    clip: rect(0 0 0 0) !important;
+    -webkit-clip-path: inset(100%) !important;
+    clip-path: inset(100%) !important;
+    overflow: hidden !important;
+  }
+}
+
+@media screen and (min-width: 1280px) {
+  .visually-hidden-lg {
+    position: absolute !important;
+    width: 1px !important;
+    height: 1px !important;
+    margin: -1px !important;
+    border: 0 !important;
+    padding: 0 !important;
+    clip: rect(0 0 0 0) !important;
+    -webkit-clip-path: inset(100%) !important;
+    clip-path: inset(100%) !important;
+    overflow: hidden !important;
+  }
+}
Index: adme.org
===================================================================
--- readme.org	(revision 09cd8febc0ca73143e82eee0accc72eeab2cd655)
+++ 	(revision )
@@ -1,13 +1,0 @@
-* @w96k
-My blog built with Haunt & Mini.css
-
-** Dependencies
-   - Gnu Guile Haunt
-   - Sassc
-
-#+BEGIN_SRC
-guix install haunt sassc
-make
-#+END_SRC
-
-Open http://localhost:8080
