-
+
+
+
+
-
diff --git a/src/layouts/error.vue b/src/layouts/error.vue
new file mode 100644
index 0000000..ace00c9
--- /dev/null
+++ b/src/layouts/error.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+ {{ $t('error.error').toUpperCase() }} 404
+
+
+ {{ $t('error.error').toUpperCase() }} 500
+
+
+
+
+ {{ $t('error.no_page') }}
+
+
+ {{ $t('error.internal') }}
+
+
+
+
+
+
+
+ {{ $t('error.back') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/locales/en-EN.ts b/src/locales/en-EN.ts
index bc7fc69..9ad5525 100644
--- a/src/locales/en-EN.ts
+++ b/src/locales/en-EN.ts
@@ -1,3 +1,227 @@
export default {
- test: "test"
+ header: {
+ title: 'Arthur Danjou',
+ home: 'Home',
+ about: 'About',
+ blog: 'Blog',
+ work: 'Work',
+ contact: 'Contact'
+ },
+
+ footer: {
+ find_me: 'Find me on :',
+ separator: 'et by',
+ links_click: '(Clic it\'s free 🔗)',
+ credits: 'Developed and designed with ❤ using',
+ credits_separator: 'by',
+ copyrights: '© Copyright {date} - All rights reserved'
+ },
+
+ error: {
+ back: 'Go to home',
+ no_page: 'The page you are looking for does not exist',
+ internal: 'Internal error',
+ error: 'Error'
+ },
+
+ part: {
+ about: 'About',
+ blog: 'My Blog',
+ work: 'My Work',
+ contact: 'Contact me',
+ about_description: 'Learn more about me, how I work and who I am',
+ blog_description: 'I write articles about my life, development and my passions',
+ work_description: 'Discover my creations to get an idea of my skills',
+ contact_description: 'Find all my social networks to contact me'
+ },
+
+ home: {
+ banner: {
+ role: 'Developer & student',
+ hello: 'Hello, I am',
+ description: 'I am a {age} year old self-taught developer. I live in Paris 🇫🇷. I love creating more or less useful applications and software. I use modern technologies to get the best possible result ✨',
+ },
+ },
+
+ blog: {
+ read: {
+ back: 'Go back',
+ thanks: 'Thanks for reading to the end!',
+ time: 'Reading'
+ },
+ tweet: 'I love a new post from @ArthurDanj, check it out here:',
+ no_posts: 'Unfortunately there are no items available yet. Come back later 😉',
+ tags: {
+ search: 'Are you looking for a specific type of article? Test the search by tag 🏷',
+ back: 'Return to all articles',
+ current: 'List of articles with the tag \'{tag}\':'
+ },
+ pagination: {
+ prev: 'Previous',
+ next: 'Next'
+ }
+ },
+
+ about: {
+ banner: {
+ hello: 'Hello, I am',
+ 1: 'I am a young creative developer who loves to tinker and touch everything! I am very interested in new technologies, development and IT.',
+ 2: 'I love sharing my knowledge and helping others through lives on Twitchs, technical articles on my blog, open-source projects or by reviewing community code. As long as I share my passions, I will continue to do this.',
+ 3: 'I am able to quickly learn new technologies to meet the needs of different projects. I often identify the need for new systems or tools to improve workflow efficiency. I am always motivated by a challenge and like to be well organized to produce consistent results.',
+ },
+ title: {
+ skills: 'Skills',
+ interests: 'Interests',
+ technologies: 'Technologies',
+ languages: 'Languages',
+ formations: 'Formations',
+ experiences: 'Experiences'
+ },
+ interests: {
+ dev: 'Development',
+ devops: 'DevOps',
+ startups: 'Startups & innovative companies',
+ sysadmin: 'System administration',
+ trips: 'Trip',
+ moto: 'Motorbike'
+ },
+ languages: {
+ fr: 'French',
+ en: 'English',
+ native: 'Native',
+ fluent: 'Fluent'
+ },
+ cv: 'Download my CV',
+ environment: 'My Environment',
+ env: {
+ description: 'My development environment makes it possible to gain in productivity. Indeed, I organize myself in this way to always optimize my time for reflection and development. Here is a list of all my software that I use on a daily basis and my setup.',
+ ide: 'Text editors',
+ apps: 'Apps & Softwares',
+ hosting: 'Hosting & Co',
+ setup: 'Office setup'
+ },
+ ide: {
+ java: 'Java editor',
+ web: 'Web editor',
+ go: 'Go editor',
+ db: 'Databases editor',
+ all: 'All-In-One'
+ },
+ police: 'Font',
+ console: 'Console',
+ wsl_2: 'WSL 2',
+ email_client: 'Email Client',
+ vpn_client: 'VPN Client',
+ ftp_client: 'FTP Client',
+ web_client: 'Web Browser',
+ design_tool: 'Creation / Graphics',
+ communication_tool: 'Communication tool',
+ organisation_tool: 'Organisation tool',
+ hosting: {
+ vps: 'VPS hosting',
+ ndd: 'Domain name'
+ },
+ setup: {
+ desk: 'Desktop',
+ phone: 'Phone',
+ computer: 'Desktop computer',
+ screen: 'Screen',
+ keyboard: 'Keyboard',
+ mouse: 'Mouse',
+ headphone: 'Headphone',
+ microphone: 'Headset'
+ }
+ },
+
+ work: {
+ no_work: 'Unfortunately there are no projects available yet. Come back later 😉',
+ description: 'Here are the different projects I was able to participate in in my past!',
+ tech_used: 'Lists of skills used',
+ go_back: 'Go back'
+ },
+
+ contact: {
+ newsletter: {
+ title: 'Software & Tech Newsletter 📬',
+ description: 'Subscribe to not miss my next offers, my next articles and my new projects.',
+ unfollow: 'No spam. Unsubscribe whenever you want'
+ },
+ form: {
+ name: 'Name',
+ mail: 'Mail address',
+ submit: 'Subscribe',
+ error: 'Error in the form!',
+ success: 'Registration confirmed for {email}!'
+ },
+ how_to: {
+ title: 'How to contact me? ✉',
+ description: 'Please don\'t hesitate to contact me if you have any questions, think we could work together or if you just want to chat ✌️'
+ },
+ available: {
+ title: 'Am I available? 🚩',
+ description: 'This status will be updated in real time to let you know if I am available for work.',
+ start: 'I am currently',
+ end: 'for work'
+ }
+ },
+
+ date: {
+ today: 'Today'
+ },
+ copied: 'Copied',
+ month: {
+ '01': 'January',
+ '02': 'February',
+ '03': 'March',
+ '04': 'April',
+ '05': 'May',
+ '06': 'June',
+ '07': 'July',
+ '08': 'August',
+ '09': 'September',
+ 10: 'October',
+ 11: 'November',
+ 12: 'December',
+ },
+ hiring: {
+ status: {
+ not_available: 'not available',
+ available: 'available'
+ }
+ },
+
+ tags: {
+ life: 'Life',
+ dev: 'Dev',
+ tech: 'Tech'
+ },
+
+ experiences: {
+ erisium: 'Junior Developer',
+ freelance: 'FullStack Software & Web FullStack Development',
+ idemia: 'Discovery of the IT sector & the data-center',
+ lsam: 'Room cleaning - Waiter - Taking orders - Welcoming customers'
+ },
+
+ formations: {
+ freelance: {
+ title: 'Self-learning',
+ description: 'Java, TypeScript, Go, etc...'
+ },
+ dnb: {
+ title: 'Diplôme National du Brevet',
+ description: 'Obtention du Brevet mention Très Bien'
+ },
+ bac: {
+ title: 'Baccalauréat',
+ description: 'General Baccalaureate Physics / Chemistry & Mathematics'
+ }
+ },
+
+ works: {
+ artapi: 'ArtApi is my personal API connected to my various instances',
+ artsite: 'ArtSite is my personal website creating a single point of contact',
+ erisium: 'Erisium is a french minecraft mini-game server.',
+ artclick: 'ArtClick is my url shortener'
+ }
}
diff --git a/src/locales/fr-FR.ts b/src/locales/fr-FR.ts
index 3c278e8..68e4493 100644
--- a/src/locales/fr-FR.ts
+++ b/src/locales/fr-FR.ts
@@ -1,3 +1,227 @@
export default {
- test: "teste"
+ header: {
+ title: 'Arthur Danjou',
+ home: 'Accueil',
+ about: 'Moi',
+ blog: 'Blog',
+ work: 'Travail',
+ contact: 'Contact'
+ },
+
+ footer: {
+ find_me: 'Retrouvez moi sur :',
+ separator: 'et par',
+ links_click: '(Clique c\'est gratuit 🔗)',
+ credits: 'Développé et conçu avec ❤ en utilisant',
+ credits_separator: 'par',
+ copyrights: '© Copyright {date} - Tous droits réservés'
+ },
+
+ error: {
+ back: 'Revenir à l\'accueil',
+ no_page: 'La page demandée n\'existe pas',
+ internal: 'Erreur interne',
+ error: 'Erreur'
+ },
+
+ part: {
+ about: 'A Propos',
+ blog: 'Mon Blog',
+ work: 'Mon Travail',
+ contact: 'Me Contacter',
+ about_description: 'Apprenez en plus à mon propos, comment je travaille et qui je suis',
+ blog_description: 'Je rédige des articles concernant ma vie, le développement et mes passions',
+ work_description: 'Découvrez mes créations pour avoir une idée de mes compétences',
+ contact_description: 'Retrouvez tous mes réseaux sociaux pour me contacter'
+ },
+
+ home: {
+ banner: {
+ role: 'Développeur & étudiant',
+ hello: 'Bonjour, je suis',
+ description: 'Je suis un jeune développeur autodidacte de {age} ans. J\'habite à Paris 🇫🇷. J\'adore créer des applications et des logiciels plus ou moins utiles. J\'utilise des technologies modernes pour obtenir le meilleur résultat possible ✨',
+ },
+ },
+
+ blog: {
+ read: {
+ back: 'Retour en arrière',
+ thanks: 'Merci d\'avoir lu jusqu\'au bout !',
+ time: 'Lecture'
+ },
+ tweet: 'J\'aime un nouvel article d\'@ArthurDanj, venez le découvrir ici :',
+ no_posts: 'Malheureusement il n\'y a pas encore d\'articles disponibles. Reviens plus tard 😉',
+ tags: {
+ search: 'Vous recherchez un type d\'article en particulier ? Tester la recherche par tag 🏷',
+ back: 'Revenir à tous les articles',
+ current: 'Liste des articles possédant le tag \'{tag}\' :'
+ },
+ pagination: {
+ prev: 'Précédent',
+ next: 'Suivant'
+ }
+ },
+
+ about: {
+ banner: {
+ hello: 'Bonjour, je suis',
+ 1: 'Je suis un jeune développeur créatif qui aime bricoler et toucher à tout ! Je m\'intéresse beaucoup aux nouvelles technologies, au développement et à l\'informatique.',
+ 2: 'J\'adore partager mes connaissances et aider les autres à travers des lives sur Twitchs, des articles techniques sur mon blog, des projets open-sources ou encore en relisant du code de la communauté. Tant que je partage mes passions, je continuerai à faire ça.',
+ 3: 'Je suis capable d\'apprendre rapidement des nouvelles technologies pour répondre aux besoins des différents projets. J\'identifie souvent le besoin de nouveaux systèmes ou outils pour améliorer l\'efficacité du flux de travail. Je suis toujours motivé par un défi et j\'aime être bien organisé pour produire des résultats cohérents.',
+ },
+ title: {
+ skills: 'Compétences',
+ interests: 'Intérêts',
+ technologies: 'Technologies',
+ languages: 'Langues',
+ formations: 'Formations',
+ experiences: 'Expériences'
+ },
+ interests: {
+ dev: 'Développement',
+ devops: 'DevOps',
+ startups: 'Startups & Entreprises innovantes',
+ sysadmin: 'Administration système',
+ trips: 'Voyage',
+ moto: 'Moto'
+ },
+ languages: {
+ fr: 'Français',
+ en: 'Anglais',
+ native: 'Natal',
+ fluent: 'Courant'
+ },
+ cv: 'Télécharger mon CV',
+ environment: 'Mon Environnement',
+ env: {
+ description: 'Mon environnement de développement permet de gagner en productivité. En effet, je m\'organise de la sorte à toujours optimiser mon temps de réflexion et de développement. Voici donc une liste de tous mes logiciels que j\'utilise au quotidien et de mon setup.',
+ ide: 'Editeurs de texte',
+ apps: 'Apps & Logiciels',
+ hosting: 'Hébergement',
+ setup: 'Setup bureautique'
+ },
+ ide: {
+ java: 'Editeur Java',
+ web: 'Editeur Web',
+ go: 'Editeur Go',
+ db: 'Editeur Bases de données',
+ all: 'All-In-One'
+ },
+ police: 'Police d\'Ecriture',
+ console: 'Console',
+ wsl_2: 'WSL 2',
+ email_client: 'Client Email',
+ vpn_client: 'Client VPN',
+ ftp_client: 'Client FTP',
+ web_client: 'Navigateur Web',
+ design_tool: 'Création / Graphisme',
+ communication_tool: 'Outil de Communication',
+ organisation_tool: 'Outil d\'Organisation',
+ hosting: {
+ vps: 'Hébergeur VPS',
+ ndd: 'Nom de domaine'
+ },
+ setup: {
+ desk: 'Bureau',
+ phone: 'Téléphone',
+ computer: 'Ordinateur fixe',
+ screen: 'Ecran',
+ keyboard: 'Clavier',
+ mouse: 'Souris',
+ headphone: 'Ecouteurs',
+ microphone: 'Casque / Micro'
+ }
+ },
+
+ work: {
+ no_work: 'Malheureusement il n\'y a pas encore de projets disponibles. Reviens plus tard 😉',
+ description: 'Voici les différents projets auxquels j\'ai pu participer dans mon passé !',
+ tech_used: 'Listes des compétences utilisées',
+ go_back: 'Retour en arrière'
+ },
+
+ contact: {
+ newsletter: {
+ title: 'Software & Tech Newsletter 📬',
+ description: 'Abonnez vous pour ne pas louper mes prochaines offres, mes prochains articles et mes nouveaux projets.',
+ unfollow: 'Pas de spam. Désabonnement quand vous voulez'
+ },
+ form: {
+ name: 'Prénom',
+ mail: 'Adresse Mail',
+ submit: 'S\'abonner',
+ error: 'Erreur dans le formulaire !',
+ success: 'Inscription confirmée pour {email} !'
+ },
+ how_to: {
+ title: 'Comment me contacter ? ✉',
+ description: 'N\'hésitez pas à me contacter si vous avez des questions, pensez que nous pourrions travailler ensemble ou si vous souhaitez simplement vous discuter ✌️'
+ },
+ available: {
+ title: 'Suis-je disponible ? 🚩',
+ description: 'Ce status sera mis à jour en temps réel pour vous indiquer si je suis disponible pour du travail.',
+ start: 'Je suis actuellement',
+ end: 'pour du travail'
+ }
+ },
+
+ date: {
+ today: 'Aujourd\'hui'
+ },
+ copied: 'Copié',
+ month: {
+ '01': 'Janvier',
+ '02': 'Février',
+ '03': 'Mars',
+ '04': 'Avril',
+ '05': 'Mai',
+ '06': 'Juin',
+ '07': 'Juillet',
+ '08': 'Août',
+ '09': 'Septembre',
+ 10: 'Octobre',
+ 11: 'Novembre',
+ 12: 'Décembre',
+ },
+ hiring: {
+ status: {
+ not_available: 'non disponible',
+ available: 'disponible'
+ }
+ },
+
+ tags: {
+ life: 'Vie',
+ dev: 'Dev',
+ tech: 'Tech'
+ },
+
+ experiences: {
+ erisium: 'Développeur Junior',
+ freelance: 'Développement FullStack Software & Web FullStack',
+ idemia: 'Découverte du secteur IT & du data-center',
+ lsam: 'Nettoyage de la salle – Serveur – Prise de commandes – Accueil des clients'
+ },
+
+ formations: {
+ freelance: {
+ title: 'Auto-apprentissage',
+ description: 'Java, TypeScript, Go, etc...'
+ },
+ dnb: {
+ title: 'Diplôme National du Brevet',
+ description: 'Obtention du Brevet mention Très Bien'
+ },
+ bac: {
+ title: 'Baccalauréat',
+ description: 'Baccalauréat Général Physique/Chimie & Mathématiques'
+ }
+ },
+
+ works: {
+ artapi: 'ArtApi est mon API personnelle connectée à mes diverses instances.',
+ artsite: 'ArtSite est mon site personnel créant un point de contact unique.',
+ erisium: 'Erisium est un serveur minecraft francophone de mini-jeux.',
+ artclick: 'ArtClick est mon raccourcisseur d\'url'
+ }
}
diff --git a/src/middleware/README.md b/src/middleware/README.md
deleted file mode 100644
index 01595de..0000000
--- a/src/middleware/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# MIDDLEWARE
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your application middleware.
-Middleware let you define custom functions that can be run before rendering either a page or a group of pages.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware).
diff --git a/src/plugins/README.md b/src/plugins/README.md
deleted file mode 100644
index ca1f9d8..0000000
--- a/src/plugins/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# PLUGINS
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains Javascript plugins that you want to run before mounting the root Vue.js application.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins).
diff --git a/src/static/README.md b/src/static/README.md
deleted file mode 100644
index cf00435..0000000
--- a/src/static/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# STATIC
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your static files.
-Each file inside this directory is mapped to `/`.
-Thus you'd want to delete this README.md before deploying to production.
-
-Example: `/static/robots.txt` is mapped as `/robots.txt`.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static).
diff --git a/src/static/favicon.ico b/src/static/favicon.ico
index 3632d0c..5c2de9d 100644
Binary files a/src/static/favicon.ico and b/src/static/favicon.ico differ
diff --git a/src/static/favicon.png b/src/static/favicon.png
new file mode 100644
index 0000000..14c4e0a
Binary files /dev/null and b/src/static/favicon.png differ
diff --git a/src/store/README.md b/src/store/README.md
deleted file mode 100644
index 1972d27..0000000
--- a/src/store/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# STORE
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your Vuex Store files.
-Vuex Store option is implemented in the Nuxt.js framework.
-
-Creating a file in this directory automatically activates the option in the framework.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..9acd05a
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,968 @@
+const colors = require('tailwindcss/colors')
+
+module.exports = {
+ purge: {
+ enabled: process.env.NODE_ENV === 'production',
+ content: [
+ 'components/**/*.vue',
+ 'layouts/**/*.vue',
+ 'pages/**/*.vue',
+ 'plugins/**/*.ts',
+ 'nuxt.config.ts',
+ 'content/**/*.md'
+ ]
+ },
+ presets: [],
+ darkMode: 'class',
+ theme: {
+ extend: {
+ typography: (theme) => ({
+ DEFAULT: {
+ css: [
+ {
+ a: {
+ color: theme('colors.green.400'),
+ transitionDuration: '300ms',
+ cursor: 'pointer',
+ borderBottomColor: theme('colors.dark.200'),
+ borderOpacity: '0%',
+ borderBottomWidth: '2px',
+ borderBottomStyle: 'solid',
+ textDecoration: 'none',
+ '&:hover': {
+ borderBottomColor: theme('colors.green.400'),
+ color: theme('colors.black')
+ }
+ }
+ }
+ ]
+ },
+ dark: {
+ css: [
+ {
+ color: theme('colors.dark.100'),
+ '[class~="lead"]': {
+ color: theme('colors.dark.100'),
+ },
+ a: {
+ color: theme('colors.green.400'),
+ transitionDuration: '300ms',
+ cursor: 'pointer',
+ borderBottomColor: theme('colors.dark.200'),
+ borderBottomWidth: '2px',
+ borderBottomStyle: 'solid',
+ textDecoration: 'none',
+ '&:hover': {
+ borderBottomColor: theme('colors.green.400'),
+ color: theme('colors.white')
+ }
+ },
+ strong: {
+ color: theme('colors.white'),
+ },
+ 'ol > li::before': {
+ color: theme('colors.white'),
+ },
+ 'ul > li::before': {
+ backgroundColor: theme('colors.white'),
+ },
+ hr: {
+ borderColor: theme('colors.white'),
+ },
+ blockquote: {
+ color: theme('colors.dark.100'),
+ borderLeftColor: theme('colors.white'),
+ },
+ h1: {
+ color: theme('colors.white'),
+ },
+ h2: {
+ color: theme('colors.white'),
+ },
+ h3: {
+ color: theme('colors.white'),
+ },
+ h4: {
+ color: theme('colors.white'),
+ },
+ 'figure figcaption': {
+ color: theme('colors.dark.700'),
+ },
+ code: {
+ color: theme('colors.white'),
+ },
+ 'a code': {
+ color: theme('colors.white'),
+ },
+ thead: {
+ color: theme('colors.dark.100'),
+ borderBottomColor: theme('colors.white'),
+ },
+ 'tbody tr': {
+ borderBottomColor: theme('colors.white'),
+ },
+ }
+ ]
+ }
+ })
+ },
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+ },
+ colors: {
+ transparent: 'transparent',
+ current: 'currentColor',
+
+ black: colors.black,
+ white: colors.white,
+ rose: colors.rose,
+ pink: colors.pink,
+ fuchsia: colors.fuchsia,
+ purple: colors.purple,
+ violet: colors.violet,
+ indigo: colors.indigo,
+ blue: colors.blue,
+ lightBlue: colors.lightBlue,
+ cyan: colors.cyan,
+ teal: colors.teal,
+ emerald: colors.emerald,
+ green: colors.green,
+ lime: colors.lime,
+ yellow: colors.yellow,
+ amber: colors.amber,
+ orange: colors.orange,
+ red: colors.red,
+ warmGray: colors.warmGray,
+ trueGray: colors.trueGray,
+ gray: colors.gray,
+ coolGray: colors.coolGray,
+ blueGray: colors.blueGray,
+ dark: {
+ 100: 'rgb(150,150,150)',
+ 200: 'rgb(112,112,112)',
+ 700: '#272727',
+ 800: '#212121',
+ 900: '#121212',
+ }
+ },
+ spacing: {
+ px: '1px',
+ 0: '0px',
+ 0.5: '0.125rem',
+ 1: '0.25rem',
+ 1.5: '0.375rem',
+ 2: '0.5rem',
+ 2.5: '0.625rem',
+ 3: '0.75rem',
+ 3.5: '0.875rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem',
+ 11: '2.75rem',
+ 12: '3rem',
+ 14: '3.5rem',
+ 16: '4rem',
+ 20: '5rem',
+ 24: '6rem',
+ 28: '7rem',
+ 32: '8rem',
+ 36: '9rem',
+ 40: '10rem',
+ 44: '11rem',
+ 48: '12rem',
+ 52: '13rem',
+ 56: '14rem',
+ 60: '15rem',
+ 64: '16rem',
+ 72: '18rem',
+ 80: '20rem',
+ 96: '24rem',
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ },
+ animation: {
+ none: 'none',
+ spin: 'spin 1s linear infinite',
+ ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
+ bounce: 'bounce 1s infinite',
+ },
+ backgroundColor: (theme) => theme('colors'),
+ backgroundImage: {
+ none: 'none',
+ 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',
+ 'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',
+ 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
+ 'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
+ 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
+ 'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',
+ 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',
+ 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',
+ },
+ backgroundOpacity: (theme) => theme('opacity'),
+ backgroundPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top',
+ },
+ backgroundSize: {
+ auto: 'auto',
+ cover: 'cover',
+ contain: 'contain',
+ },
+ borderColor: (theme) => ({
+ ...theme('colors'),
+ DEFAULT: theme('colors.gray.200', 'currentColor'),
+ }),
+ borderOpacity: (theme) => theme('opacity'),
+ borderRadius: {
+ none: '0px',
+ sm: '0.125rem',
+ DEFAULT: '0.25rem',
+ md: '0.375rem',
+ lg: '0.5rem',
+ xl: '0.75rem',
+ '2xl': '1rem',
+ '3xl': '1.5rem',
+ full: '9999px',
+ },
+ borderWidth: {
+ DEFAULT: '1px',
+ 0: '0px',
+ 2: '2px',
+ 4: '4px',
+ 6: '6px',
+ 8: '8px',
+ },
+ boxShadow: {
+ sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
+ DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
+ md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
+ lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
+ xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
+ '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
+ inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',
+ white: '0 4px 4px -1px rgba(255,255,255,0.9), 0 2px 2px -1px rgba(255,255,255,0.94)',
+ none: 'none',
+ },
+ container: {},
+ cursor: {
+ auto: 'auto',
+ default: 'default',
+ pointer: 'pointer',
+ wait: 'wait',
+ text: 'text',
+ move: 'move',
+ 'not-allowed': 'not-allowed',
+ },
+ divideColor: (theme) => theme('borderColor'),
+ divideOpacity: (theme) => theme('borderOpacity'),
+ divideWidth: (theme) => theme('borderWidth'),
+ fill: { current: 'currentColor' },
+ flex: {
+ 1: '1 1 0%',
+ auto: '1 1 auto',
+ initial: '0 1 auto',
+ none: 'none',
+ },
+ flexGrow: {
+ 0: '0',
+ DEFAULT: '1',
+ },
+ flexShrink: {
+ 0: '0',
+ DEFAULT: '1',
+ },
+ fontFamily: {
+ sans: [
+ 'Raleway',
+ 'ui-sans-serif',
+ 'system-ui',
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ '"Helvetica Neue"',
+ 'Arial',
+ '"Noto Sans"',
+ 'sans-serif',
+ '"Apple Color Emoji"',
+ '"Segoe UI Emoji"',
+ '"Segoe UI Symbol"',
+ '"Noto Color Emoji"',
+ ],
+ serif: ['raleway', 'ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'],
+ mono: [
+ 'raleway',
+ 'ui-monospace',
+ 'SFMono-Regular',
+ 'Menlo',
+ 'Monaco',
+ 'Consolas',
+ '"Liberation Mono"',
+ '"Courier New"',
+ 'monospace',
+ ],
+ },
+ fontSize: {
+ xs: ['0.75rem', { lineHeight: '1rem' }],
+ sm: ['0.875rem', { lineHeight: '1.25rem' }],
+ base: ['1rem', { lineHeight: '1.5rem' }],
+ lg: ['1.125rem', { lineHeight: '1.75rem' }],
+ xl: ['1.25rem', { lineHeight: '1.75rem' }],
+ '2xl': ['1.5rem', { lineHeight: '2rem' }],
+ '3xl': ['1.875rem', { lineHeight: '2.25rem' }],
+ '4xl': ['2.25rem', { lineHeight: '2.5rem' }],
+ '5xl': ['3rem', { lineHeight: '1' }],
+ '6xl': ['3.75rem', { lineHeight: '1' }],
+ '7xl': ['4.5rem', { lineHeight: '1' }],
+ '8xl': ['6rem', { lineHeight: '1' }],
+ '9xl': ['8rem', { lineHeight: '1' }],
+ },
+ fontWeight: {
+ thin: '100',
+ extralight: '200',
+ light: '300',
+ normal: '400',
+ medium: '500',
+ semibold: '600',
+ bold: '700',
+ extrabold: '800',
+ black: '900',
+ },
+ gap: (theme) => theme('spacing'),
+ gradientColorStops: (theme) => theme('colors'),
+ gridAutoColumns: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)',
+ },
+ gridAutoRows: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)',
+ },
+ gridColumn: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-7': 'span 7 / span 7',
+ 'span-8': 'span 8 / span 8',
+ 'span-9': 'span 9 / span 9',
+ 'span-10': 'span 10 / span 10',
+ 'span-11': 'span 11 / span 11',
+ 'span-12': 'span 12 / span 12',
+ 'span-full': '1 / -1',
+ },
+ gridColumnEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
+ },
+ gridColumnStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
+ },
+ gridRow: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-full': '1 / -1',
+ },
+ gridRowStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ },
+ gridRowEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ },
+ transformOrigin: {
+ center: 'center',
+ top: 'top',
+ 'top-right': 'top right',
+ right: 'right',
+ 'bottom-right': 'bottom right',
+ bottom: 'bottom',
+ 'bottom-left': 'bottom left',
+ left: 'left',
+ 'top-left': 'top left',
+ },
+ gridTemplateColumns: {
+ none: 'none',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ 7: 'repeat(7, minmax(0, 1fr))',
+ 8: 'repeat(8, minmax(0, 1fr))',
+ 9: 'repeat(9, minmax(0, 1fr))',
+ 10: 'repeat(10, minmax(0, 1fr))',
+ 11: 'repeat(11, minmax(0, 1fr))',
+ 12: 'repeat(12, minmax(0, 1fr))',
+ },
+ gridTemplateRows: {
+ none: 'none',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ },
+ height: (theme) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ screen: '100vh',
+ }),
+ inset: (theme, { negative }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%',
+ '-1/2': '-50%',
+ '-1/3': '-33.333333%',
+ '-2/3': '-66.666667%',
+ '-1/4': '-25%',
+ '-2/4': '-50%',
+ '-3/4': '-75%',
+ '-full': '-100%',
+ }),
+ keyframes: {
+ spin: {
+ to: {
+ transform: 'rotate(360deg)',
+ },
+ },
+ ping: {
+ '75%, 100%': {
+ transform: 'scale(2)',
+ opacity: '0',
+ },
+ },
+ pulse: {
+ '50%': {
+ opacity: '.5',
+ },
+ },
+ bounce: {
+ '0%, 100%': {
+ transform: 'translateY(-25%)',
+ animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',
+ },
+ '50%': {
+ transform: 'none',
+ animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',
+ },
+ },
+ },
+ letterSpacing: {
+ tighter: '-0.05em',
+ tight: '-0.025em',
+ normal: '0em',
+ wide: '0.025em',
+ wider: '0.05em',
+ widest: '0.1em',
+ },
+ lineHeight: {
+ none: '1',
+ tight: '1.25',
+ snug: '1.375',
+ normal: '1.5',
+ relaxed: '1.625',
+ loose: '2',
+ 3: '.75rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem',
+ },
+ listStyleType: {
+ none: 'none',
+ disc: 'disc',
+ decimal: 'decimal',
+ },
+ margin: (theme, { negative }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ }),
+ maxHeight: (theme) => ({
+ ...theme('spacing'),
+ full: '100%',
+ screen: '100vh',
+ }),
+ maxWidth: (theme, { breakpoints }) => ({
+ none: 'none',
+ 0: '0rem',
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ prose: '65ch',
+ ...breakpoints(theme('screens')),
+ }),
+ minHeight: {
+ 0: '0px',
+ full: '100%',
+ screen: '100vh',
+ },
+ minWidth: {
+ 0: '0px',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ },
+ objectPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top',
+ },
+ opacity: {
+ 0: '0',
+ 5: '0.05',
+ 10: '0.1',
+ 20: '0.2',
+ 25: '0.25',
+ 30: '0.3',
+ 40: '0.4',
+ 50: '0.5',
+ 60: '0.6',
+ 70: '0.7',
+ 75: '0.75',
+ 80: '0.8',
+ 90: '0.9',
+ 95: '0.95',
+ 100: '1',
+ },
+ order: {
+ first: '-9999',
+ last: '9999',
+ none: '0',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ },
+ outline: {
+ none: ['2px solid transparent', '2px'],
+ white: ['2px dotted white', '2px'],
+ black: ['2px dotted black', '2px'],
+ },
+ padding: (theme) => theme('spacing'),
+ placeholderColor: (theme) => theme('colors'),
+ placeholderOpacity: (theme) => theme('opacity'),
+ ringColor: (theme) => ({
+ DEFAULT: theme('colors.blue.500', '#3b82f6'),
+ ...theme('colors'),
+ }),
+ ringOffsetColor: (theme) => theme('colors'),
+ ringOffsetWidth: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ ringOpacity: (theme) => ({
+ DEFAULT: '0.5',
+ ...theme('opacity'),
+ }),
+ ringWidth: {
+ DEFAULT: '3px',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ rotate: {
+ '-180': '-180deg',
+ '-90': '-90deg',
+ '-45': '-45deg',
+ '-12': '-12deg',
+ '-6': '-6deg',
+ '-3': '-3deg',
+ '-2': '-2deg',
+ '-1': '-1deg',
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg',
+ 45: '45deg',
+ 90: '90deg',
+ 180: '180deg',
+ },
+ scale: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 90: '.9',
+ 95: '.95',
+ 100: '1',
+ 105: '1.05',
+ 110: '1.1',
+ 125: '1.25',
+ 150: '1.5',
+ },
+ skew: {
+ '-12': '-12deg',
+ '-6': '-6deg',
+ '-3': '-3deg',
+ '-2': '-2deg',
+ '-1': '-1deg',
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg',
+ },
+ space: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ }),
+ stroke: {
+ current: 'currentColor',
+ },
+ strokeWidth: {
+ 0: '0',
+ 1: '1',
+ 2: '2',
+ },
+ textColor: (theme) => theme('colors'),
+ textOpacity: (theme) => theme('opacity'),
+ transitionDuration: {
+ DEFAULT: '150ms',
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms',
+ },
+ transitionDelay: {
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms',
+ },
+ transitionProperty: {
+ none: 'none',
+ all: 'all',
+ DEFAULT: 'background-color, border-color, color, fill, stroke, opacity, box-shadow, transform',
+ colors: 'background-color, border-color, color, fill, stroke',
+ opacity: 'opacity',
+ shadow: 'box-shadow',
+ transform: 'transform',
+ },
+ transitionTimingFunction: {
+ DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',
+ linear: 'linear',
+ in: 'cubic-bezier(0.4, 0, 1, 1)',
+ out: 'cubic-bezier(0, 0, 0.2, 1)',
+ 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
+ },
+ translate: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%',
+ '-1/2': '-50%',
+ '-1/3': '-33.333333%',
+ '-2/3': '-66.666667%',
+ '-1/4': '-25%',
+ '-2/4': '-50%',
+ '-3/4': '-75%',
+ '-full': '-100%',
+ }),
+ width: (theme) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ screen: '100vw',
+ min: 'min-content',
+ max: 'max-content',
+ }),
+ zIndex: {
+ auto: 'auto',
+ 0: '0',
+ 10: '10',
+ 20: '20',
+ 30: '30',
+ 40: '40',
+ 50: '50',
+ },
+ },
+ variantOrder: [
+ 'first',
+ 'last',
+ 'odd',
+ 'even',
+ 'visited',
+ 'checked',
+ 'group-hover',
+ 'group-focus',
+ 'focus-within',
+ 'hover',
+ 'focus',
+ 'focus-visible',
+ 'active',
+ 'disabled',
+ ],
+ variants: {
+ accessibility: ['responsive', 'focus-within', 'focus'],
+ alignContent: ['responsive'],
+ alignItems: ['responsive'],
+ alignSelf: ['responsive'],
+ animation: ['responsive'],
+ appearance: ['responsive'],
+ backgroundAttachment: ['responsive'],
+ backgroundClip: ['responsive'],
+ backgroundColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
+ backgroundImage: ['responsive'],
+ backgroundOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
+ backgroundPosition: ['responsive'],
+ backgroundRepeat: ['responsive'],
+ backgroundSize: ['responsive'],
+ borderCollapse: ['responsive'],
+ borderColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
+ borderOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus', 'dark'],
+ borderRadius: ['responsive'],
+ borderStyle: ['responsive'],
+ borderWidth: ['responsive'],
+ boxShadow: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus', 'dark'],
+ boxSizing: ['responsive'],
+ clear: ['responsive'],
+ container: ['responsive'],
+ cursor: ['responsive'],
+ display: ['responsive'],
+ divideColor: ['responsive', 'dark'],
+ divideOpacity: ['responsive'],
+ divideStyle: ['responsive'],
+ divideWidth: ['responsive'],
+ fill: ['responsive'],
+ flex: ['responsive'],
+ flexDirection: ['responsive'],
+ flexGrow: ['responsive'],
+ flexShrink: ['responsive'],
+ flexWrap: ['responsive'],
+ float: ['responsive'],
+ fontFamily: ['responsive'],
+ fontSize: ['responsive'],
+ fontSmoothing: ['responsive'],
+ fontStyle: ['responsive'],
+ fontVariantNumeric: ['responsive'],
+ fontWeight: ['responsive'],
+ gap: ['responsive'],
+ gradientColorStops: ['responsive', 'dark', 'hover', 'focus'],
+ gridAutoColumns: ['responsive'],
+ gridAutoFlow: ['responsive'],
+ gridAutoRows: ['responsive'],
+ gridColumn: ['responsive'],
+ gridColumnEnd: ['responsive'],
+ gridColumnStart: ['responsive'],
+ gridRow: ['responsive'],
+ gridRowEnd: ['responsive'],
+ gridRowStart: ['responsive'],
+ gridTemplateColumns: ['responsive'],
+ gridTemplateRows: ['responsive'],
+ height: ['responsive'],
+ inset: ['responsive'],
+ justifyContent: ['responsive'],
+ justifyItems: ['responsive'],
+ justifySelf: ['responsive'],
+ letterSpacing: ['responsive'],
+ lineHeight: ['responsive'],
+ listStylePosition: ['responsive'],
+ listStyleType: ['responsive'],
+ margin: ['responsive'],
+ maxHeight: ['responsive'],
+ maxWidth: ['responsive'],
+ minHeight: ['responsive'],
+ minWidth: ['responsive'],
+ objectFit: ['responsive'],
+ objectPosition: ['responsive'],
+ opacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
+ order: ['responsive'],
+ outline: ['responsive', 'focus-within', 'focus'],
+ overflow: ['responsive'],
+ overscrollBehavior: ['responsive'],
+ padding: ['responsive'],
+ placeContent: ['responsive'],
+ placeItems: ['responsive'],
+ placeSelf: ['responsive'],
+ placeholderColor: ['responsive', 'dark', 'focus'],
+ placeholderOpacity: ['responsive', 'focus'],
+ pointerEvents: ['responsive'],
+ position: ['responsive'],
+ resize: ['responsive'],
+ ringColor: ['responsive', 'dark', 'focus-within', 'focus'],
+ ringOffsetColor: ['responsive', 'dark', 'focus-within', 'focus'],
+ ringOffsetWidth: ['responsive', 'focus-within', 'focus'],
+ ringOpacity: ['responsive', 'focus-within', 'focus'],
+ ringWidth: ['responsive', 'focus-within', 'focus'],
+ rotate: ['responsive', 'hover', 'focus'],
+ scale: ['responsive', 'hover', 'focus'],
+ skew: ['responsive', 'hover', 'focus'],
+ space: ['responsive'],
+ stroke: ['responsive'],
+ strokeWidth: ['responsive'],
+ tableLayout: ['responsive'],
+ textAlign: ['responsive'],
+ textColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
+ textDecoration: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
+ textOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
+ textOverflow: ['responsive'],
+ textTransform: ['responsive'],
+ transform: ['responsive'],
+ transformOrigin: ['responsive'],
+ transitionDelay: ['responsive'],
+ transitionDuration: ['responsive'],
+ transitionProperty: ['responsive'],
+ transitionTimingFunction: ['responsive'],
+ translate: ['responsive', 'hover', 'focus'],
+ typography: ['dark', 'responsive'],
+ userSelect: ['responsive'],
+ verticalAlign: ['responsive'],
+ visibility: ['responsive'],
+ whitespace: ['responsive'],
+ width: ['responsive'],
+ wordBreak: ['responsive'],
+ zIndex: ['responsive', 'focus-within', 'focus'],
+ },
+ plugins: [
+ require('@tailwindcss/typography'),
+ ],
+}
diff --git a/todo_and_review b/todo_and_review
new file mode 100644
index 0000000..e69de29