├── .github └── workflows │ └── deploy.yaml ├── .gitignore ├── .sassrc.js ├── App.vue ├── cards ├── c01.jpg ├── c02.jpg ├── c03.jpg ├── c04.jpg ├── c05.jpg ├── c06.jpg ├── c07.jpg ├── c08.jpg ├── c09.jpg ├── c10.jpg ├── c11.jpg ├── c12.jpg ├── c13.jpg ├── c14.jpg ├── m00.jpg ├── m01.jpg ├── m02.jpg ├── m03.jpg ├── m04.jpg ├── m05.jpg ├── m06.jpg ├── m07.jpg ├── m08.jpg ├── m09.jpg ├── m10.jpg ├── m11.jpg ├── m12.jpg ├── m13.jpg ├── m14.jpg ├── m15.jpg ├── m16.jpg ├── m17.jpg ├── m18.jpg ├── m19.jpg ├── m20.jpg ├── m21.jpg ├── p01.jpg ├── p02.jpg ├── p03.jpg ├── p04.jpg ├── p05.jpg ├── p06.jpg ├── p07.jpg ├── p08.jpg ├── p09.jpg ├── p10.jpg ├── p11.jpg ├── p12.jpg ├── p13.jpg ├── p14.jpg ├── s01.jpg ├── s02.jpg ├── s03.jpg ├── s04.jpg ├── s05.jpg ├── s06.jpg ├── s07.jpg ├── s08.jpg ├── s09.jpg ├── s10.jpg ├── s11.jpg ├── s12.jpg ├── s13.jpg ├── s14.jpg ├── w01.jpg ├── w02.jpg ├── w03.jpg ├── w04.jpg ├── w05.jpg ├── w06.jpg ├── w07.jpg ├── w08.jpg ├── w09.jpg ├── w10.jpg ├── w11.jpg ├── w12.jpg ├── w13.jpg └── w14.jpg ├── colorThemes.mjs ├── components ├── GlobalHeader.vue ├── Icon.vue ├── SpreadItem.vue └── TarotCard.vue ├── cup.svg ├── defaultSpreads.js ├── index.html ├── models ├── card.ts ├── size.ts └── spread.ts ├── package-lock.json ├── package.json ├── pages ├── About.vue ├── Input.vue ├── Meanings.vue ├── Settings.vue ├── Spread.vue └── Spreads.vue ├── pentacles.svg ├── script.ts ├── suits cropped.afdesign ├── suits.afdesign ├── sword.svg ├── tarot.mjs ├── variables.scss ├── vue-shim.d.ts └── wand.svg /.github/workflows/deploy.yaml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Build with Node 12 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: 12.x 20 | - run: npm install 21 | - run: npx parcel build index.html 22 | env: 23 | CI: true 24 | - name: Deploy to S3 25 | uses: jakejarvis/s3-sync-action@master 26 | with: 27 | args: --acl public-read --delete 28 | env: 29 | AWS_S3_BUCKET: ${{ secrets.AWS_PRODUCTION_BUCKET_NAME }} 30 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 31 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 32 | AWS_REGION: ${{ secrets.AWS_REGION }} 33 | SOURCE_DIR: "dist" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules/ 3 | .cache/ 4 | dist/ 5 | .parcel-cache/ -------------------------------------------------------------------------------- /.sassrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | data: '@import "./variables.scss";' 3 | } -------------------------------------------------------------------------------- /App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 49 | 50 | -------------------------------------------------------------------------------- /cards/c01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c01.jpg -------------------------------------------------------------------------------- /cards/c02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c02.jpg -------------------------------------------------------------------------------- /cards/c03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c03.jpg -------------------------------------------------------------------------------- /cards/c04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c04.jpg -------------------------------------------------------------------------------- /cards/c05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c05.jpg -------------------------------------------------------------------------------- /cards/c06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c06.jpg -------------------------------------------------------------------------------- /cards/c07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c07.jpg -------------------------------------------------------------------------------- /cards/c08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c08.jpg -------------------------------------------------------------------------------- /cards/c09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c09.jpg -------------------------------------------------------------------------------- /cards/c10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c10.jpg -------------------------------------------------------------------------------- /cards/c11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c11.jpg -------------------------------------------------------------------------------- /cards/c12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c12.jpg -------------------------------------------------------------------------------- /cards/c13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c13.jpg -------------------------------------------------------------------------------- /cards/c14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/c14.jpg -------------------------------------------------------------------------------- /cards/m00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m00.jpg -------------------------------------------------------------------------------- /cards/m01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m01.jpg -------------------------------------------------------------------------------- /cards/m02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m02.jpg -------------------------------------------------------------------------------- /cards/m03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m03.jpg -------------------------------------------------------------------------------- /cards/m04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m04.jpg -------------------------------------------------------------------------------- /cards/m05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m05.jpg -------------------------------------------------------------------------------- /cards/m06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m06.jpg -------------------------------------------------------------------------------- /cards/m07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m07.jpg -------------------------------------------------------------------------------- /cards/m08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m08.jpg -------------------------------------------------------------------------------- /cards/m09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m09.jpg -------------------------------------------------------------------------------- /cards/m10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m10.jpg -------------------------------------------------------------------------------- /cards/m11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m11.jpg -------------------------------------------------------------------------------- /cards/m12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m12.jpg -------------------------------------------------------------------------------- /cards/m13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m13.jpg -------------------------------------------------------------------------------- /cards/m14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m14.jpg -------------------------------------------------------------------------------- /cards/m15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m15.jpg -------------------------------------------------------------------------------- /cards/m16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m16.jpg -------------------------------------------------------------------------------- /cards/m17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m17.jpg -------------------------------------------------------------------------------- /cards/m18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m18.jpg -------------------------------------------------------------------------------- /cards/m19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m19.jpg -------------------------------------------------------------------------------- /cards/m20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m20.jpg -------------------------------------------------------------------------------- /cards/m21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/m21.jpg -------------------------------------------------------------------------------- /cards/p01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p01.jpg -------------------------------------------------------------------------------- /cards/p02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p02.jpg -------------------------------------------------------------------------------- /cards/p03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p03.jpg -------------------------------------------------------------------------------- /cards/p04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p04.jpg -------------------------------------------------------------------------------- /cards/p05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p05.jpg -------------------------------------------------------------------------------- /cards/p06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p06.jpg -------------------------------------------------------------------------------- /cards/p07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p07.jpg -------------------------------------------------------------------------------- /cards/p08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p08.jpg -------------------------------------------------------------------------------- /cards/p09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p09.jpg -------------------------------------------------------------------------------- /cards/p10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p10.jpg -------------------------------------------------------------------------------- /cards/p11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p11.jpg -------------------------------------------------------------------------------- /cards/p12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p12.jpg -------------------------------------------------------------------------------- /cards/p13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p13.jpg -------------------------------------------------------------------------------- /cards/p14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/p14.jpg -------------------------------------------------------------------------------- /cards/s01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s01.jpg -------------------------------------------------------------------------------- /cards/s02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s02.jpg -------------------------------------------------------------------------------- /cards/s03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s03.jpg -------------------------------------------------------------------------------- /cards/s04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s04.jpg -------------------------------------------------------------------------------- /cards/s05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s05.jpg -------------------------------------------------------------------------------- /cards/s06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s06.jpg -------------------------------------------------------------------------------- /cards/s07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s07.jpg -------------------------------------------------------------------------------- /cards/s08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s08.jpg -------------------------------------------------------------------------------- /cards/s09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s09.jpg -------------------------------------------------------------------------------- /cards/s10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s10.jpg -------------------------------------------------------------------------------- /cards/s11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s11.jpg -------------------------------------------------------------------------------- /cards/s12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s12.jpg -------------------------------------------------------------------------------- /cards/s13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s13.jpg -------------------------------------------------------------------------------- /cards/s14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/s14.jpg -------------------------------------------------------------------------------- /cards/w01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w01.jpg -------------------------------------------------------------------------------- /cards/w02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w02.jpg -------------------------------------------------------------------------------- /cards/w03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w03.jpg -------------------------------------------------------------------------------- /cards/w04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w04.jpg -------------------------------------------------------------------------------- /cards/w05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w05.jpg -------------------------------------------------------------------------------- /cards/w06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w06.jpg -------------------------------------------------------------------------------- /cards/w07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w07.jpg -------------------------------------------------------------------------------- /cards/w08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w08.jpg -------------------------------------------------------------------------------- /cards/w09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w09.jpg -------------------------------------------------------------------------------- /cards/w10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w10.jpg -------------------------------------------------------------------------------- /cards/w11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w11.jpg -------------------------------------------------------------------------------- /cards/w12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w12.jpg -------------------------------------------------------------------------------- /cards/w13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w13.jpg -------------------------------------------------------------------------------- /cards/w14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/cards/w14.jpg -------------------------------------------------------------------------------- /colorThemes.mjs: -------------------------------------------------------------------------------- 1 | export default [ 2 | { name: 'The Fool', colors: { bg: '#2d678b', mid: '#7dc4e3', fg: '#f6b93b' }}, 3 | { name: 'The Magician', colors: { bg: '#60395f', mid: '#c2f6ff', fg: '#ff85cc' }}, 4 | { name: 'The High Priestess', colors: { bg: '#abc176', mid: '#b92da8', fg: '#000000' }}, 5 | { name: 'The Empress', colors: { bg: '#2c1d2f', mid: '#f6b93b', fg: '#ffffff' }}, 6 | { name: 'The Emperor', colors: { bg: '#ffffff', mid: '#ffae00', fg: '#9e16d0' }}, 7 | { name: 'The Hierophant', colors: { bg: '#151b23', mid: '#ffc800', fg: '#ffffff' }}, 8 | { name: 'The Lovers', colors: { bg: '#2f090f', mid: '#dd97ce', fg: '#ff0095' }}, 9 | { name: 'The Chariot', colors: { bg: '#e1a056', mid: '#cd3c18', fg: '#42546c' }}, 10 | { name: 'Strength', colors: { bg: '#000000', mid: '#d82234', fg: '#ffffff' }}, 11 | { name: 'The Hermit', colors: { bg: '#326c5b', mid: '#52dcff', fg: '#ecc8a7' }}, 12 | { name: 'Wheel of Fortune', colors: { bg: '#ccf9ff', mid: '#e68d28', fg: '#2b5a97' }}, 13 | { name: 'Justice', colors: { bg: '#fafafa', mid: '#b0b0b0', fg: '#545454' }}, 14 | { name: 'The Hanged Man', colors: { bg: '#080808', mid: '#616161', fg: '#d6d6d6' }}, 15 | { name: 'Death', colors: { bg: '#c52020', mid: '#ffffff', fg: '#ffffff' }}, 16 | { name: 'Temperance', colors: { bg: '#f9f5e1', mid: '#40be27', fg: '#684e22' }}, 17 | { name: 'The Devil', colors: { bg: '#ffd500', mid: '#ff0000', fg: '#000000' }}, 18 | { name: 'The Tower', colors: { bg: '#104221', mid: '#fbff00', fg: '#00ffb7' }}, 19 | { name: 'The Star', colors: { bg: '#231f1f', mid: '#9f332d', fg: '#eeafa0' }}, 20 | { name: 'The Moon', colors: { bg: '#070709', mid: '#618198', fg: '#2bb5e3' }}, 21 | { name: 'Temperance', colors: { bg: '#d4ede2', mid: '#db7629', fg: '#493218' }}, 22 | { name: 'The World', colors: { bg: '#f8f8f8', mid: '#6ecd0e', fg: '#f08a8a' }}, 23 | ] -------------------------------------------------------------------------------- /components/GlobalHeader.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 70 | 71 | -------------------------------------------------------------------------------- /components/Icon.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 184 | 185 | -------------------------------------------------------------------------------- /components/SpreadItem.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 27 | 28 | -------------------------------------------------------------------------------- /components/TarotCard.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 72 | 73 | -------------------------------------------------------------------------------- /cup.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /defaultSpreads.js: -------------------------------------------------------------------------------- 1 | import { Spread, SpreadCard } from './models/spread' 2 | 3 | function slugify(text) { 4 | text = text.replace(/\s/g, '-') 5 | text = text.replace(/[^\w-]/g, '') 6 | text = text.toLowerCase() 7 | 8 | return text 9 | } 10 | 11 | function simpleNCardSpreadGenerator(cards, group) { 12 | let spread = { 13 | id: slugify(cards.join(' ')), 14 | group: group, 15 | // name: `${card1}, ${card2} & ${card3}`, 16 | cards: cards.map((card, index) => { 17 | return { 18 | number: index + 1, 19 | name: card, 20 | position: { 21 | x: index + 1, 22 | y: 1, 23 | }, 24 | } 25 | }) 26 | } 27 | 28 | return spread 29 | } 30 | 31 | let threeCardSpreads = [ 32 | ['Past', 'Present', 'Future'], 33 | ['Nature', 'Cause', 'Solution'], 34 | ['Current Situation', 'Obstacle', 'Advice'], 35 | ['Situation', 'Action', 'Outcome'], 36 | ['Context', 'Where To Focus', 'Outcome'], 37 | ['What I Think', 'What I Feel', 'What I Do'], 38 | ].map(a => simpleNCardSpreadGenerator(a)) 39 | 40 | let spreads = [] 41 | 42 | spreads.push(simpleNCardSpreadGenerator(['Past', 'Present', 'Future'])) 43 | spreads.push(simpleNCardSpreadGenerator(['Nature', 'Cause', 'Solution'])) 44 | spreads.push(simpleNCardSpreadGenerator(['Current Situation', 'Obstacle', 'Advice'])) 45 | spreads.push(simpleNCardSpreadGenerator(['Situation', 'Action', 'Outcome'])) 46 | spreads.push(simpleNCardSpreadGenerator(['Context', 'Where To Focus', 'Outcome'])) 47 | spreads.push(simpleNCardSpreadGenerator(['What I Think', 'What I Feel', 'What I Do'])) 48 | 49 | spreads.push(simpleNCardSpreadGenerator(['Where you stand now', 'What you aspire to', 'How to get there'])) 50 | spreads.push(simpleNCardSpreadGenerator(['What you aspire to', 'What is standing in your way', 'How you can overcome this'])) 51 | spreads.push(simpleNCardSpreadGenerator(['What will help you', 'What will hinder you', 'What is your unrealised potential'])) 52 | 53 | spreads.push(simpleNCardSpreadGenerator(['What you can change', 'What you can\'t change', 'What you may not be aware of'])) 54 | spreads.push(simpleNCardSpreadGenerator(['What worked well', 'What didn\'t work well', 'Key learnings'])) 55 | 56 | spreads.push(simpleNCardSpreadGenerator(['Strengths', 'Weaknesses', 'Advice'])) 57 | spreads.push(simpleNCardSpreadGenerator(['Opportunities', 'Challenges', 'Outcome'])) 58 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2', 'Option 3'])) 59 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2', 'What you need to know to make a decision'])) 60 | spreads.push(simpleNCardSpreadGenerator(['A solution', 'An alternate solution', 'How to choose'])) 61 | 62 | function simple3CardBalancedGenerator(card1, card2, card3) { 63 | return { 64 | id: slugify(`${card1} ${card2} ${card3}`), 65 | // name: `Balanced Spread`, 66 | group: 'Balanced', 67 | cards: [ 68 | { 69 | number: 1, 70 | name: card1, 71 | position: { 72 | x: 2, 73 | y: 1, 74 | }, 75 | }, 76 | { 77 | number: 2, 78 | name: card2, 79 | rotation: 225, 80 | position: { 81 | x: 1, 82 | y: 2, 83 | }, 84 | }, 85 | { 86 | number: 3, 87 | name: card3, 88 | rotation: 135, 89 | position: { 90 | x: 3, 91 | y: 2, 92 | }, 93 | } 94 | ] 95 | } 96 | } 97 | 98 | spreads.push(simple3CardBalancedGenerator('Mind', 'Body', 'Soul')) 99 | spreads.push(simple3CardBalancedGenerator('Physical State', 'Emotional State', 'Spiritual State')) 100 | spreads.push(simple3CardBalancedGenerator('Subconscious', 'Conscious', 'Super Conscious')) 101 | spreads.push(simple3CardBalancedGenerator('Option 1', 'Option 2', 'Option 3')) 102 | spreads.push(simple3CardBalancedGenerator('What I Think', 'What I Feel', 'What I Do')) 103 | 104 | spreads.push({ 105 | id: slugify(`single card reading`), 106 | name: `Draw a single card`, 107 | cards: [ 108 | { 109 | number: 1, 110 | name: 'Card', 111 | position: { 112 | x: 1, 113 | y: 0, 114 | }, 115 | } 116 | ] 117 | }) 118 | 119 | function simple2CardCrossGenerator(card1, card2) { 120 | return { 121 | id: slugify(`${card1}, ${card2}`), 122 | group: `Cross`, 123 | cards: [ 124 | { 125 | number: 1, 126 | name: card1, 127 | position: { 128 | x: 1, 129 | y: 1, 130 | }, 131 | }, 132 | { 133 | number: 2, 134 | name: card2, 135 | position: { 136 | x: 1, 137 | y: 1, 138 | }, 139 | rotation: 90, 140 | layer: 1, 141 | } 142 | ] 143 | } 144 | } 145 | 146 | spreads.push(simpleNCardSpreadGenerator(['Situation', 'Advice'])) 147 | spreads.push(simpleNCardSpreadGenerator(['Yes', 'No'])) 148 | spreads.push(simpleNCardSpreadGenerator(['Option 1', 'Option 2'])) 149 | spreads.push(simpleNCardSpreadGenerator(['Accept', 'Reject'])) 150 | 151 | spreads.push(simple2CardCrossGenerator('Situation', 'Challenge')) 152 | spreads.push(simple2CardCrossGenerator('Aim', 'Blockage')) 153 | spreads.push(simple2CardCrossGenerator('Blockage', 'Solution')) 154 | spreads.push(simple2CardCrossGenerator('Ideal', 'Settling for')) 155 | spreads.push(simple2CardCrossGenerator('Situation', 'Extra Info')) 156 | spreads.push(simple2CardCrossGenerator('Querent', 'Adversary')) 157 | 158 | spreads.push(simpleNCardSpreadGenerator(['Positive', 'Negative', 'Result', 'Advice'])) 159 | 160 | module.exports = spreads.map(spread => Spread.fromObject(spread)) -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 |
12 | 41 | 42 | -------------------------------------------------------------------------------- /models/card.ts: -------------------------------------------------------------------------------- 1 | export enum Arcana { 2 | Major, 3 | Minor, 4 | } 5 | 6 | export enum Suit { 7 | Trump, 8 | Swords, 9 | Wands, 10 | Cups, 11 | Pentacles, 12 | } 13 | 14 | export class Card { 15 | id: string 16 | name: string 17 | number: number 18 | arcana: Arcana 19 | suit: Suit 20 | // reversed: boolean 21 | meanings: { 22 | upright: string[], 23 | reversed: string[], 24 | } 25 | searchKey: string 26 | questions: string[] 27 | fortunes: string[] 28 | archetype: string | null 29 | element: string | null 30 | hebrewAlphabet: string | null 31 | spiritual: string | null 32 | numerology: string | null 33 | affirmation: string | null 34 | 35 | isMajorArcana() { 36 | return this.arcana == Arcana.Major 37 | } 38 | 39 | suitName() { 40 | return Suit[+this.suit] 41 | } 42 | 43 | suitSymbol() { 44 | return ['swords', 'wands', 'cups', 'pentacles'][this.suit - 1] 45 | } 46 | 47 | numberSymbol() { 48 | return ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'P', 'N', 'Q', 'K'][this.number - 1] 49 | } 50 | 51 | majorArcanaRomanNumeral() { 52 | let n = this.number 53 | 54 | if (n == 0) { 55 | return '0' 56 | } 57 | 58 | const lookup = [ 59 | { symbol: 'X', number: 10 }, 60 | { symbol: 'IX', number: 9 }, 61 | { symbol: 'V', number: 5 }, 62 | { symbol: 'IV', number: 4 }, 63 | { symbol: 'I', number: 1 }, 64 | ] 65 | 66 | let roman = '' 67 | for (let pair of lookup) { 68 | while (n >= pair.number) { 69 | roman += pair.symbol 70 | n -= pair.number 71 | } 72 | } 73 | 74 | return roman 75 | } 76 | 77 | symbol() { 78 | if(this.isMajorArcana()) { 79 | return this.majorArcanaRomanNumeral() 80 | } else { 81 | return this.numberSymbol() 82 | } 83 | } 84 | 85 | static fromObject(object: any) { 86 | let card: Card = new Card() 87 | card.id = object.id 88 | card.name = object.name 89 | card.number = object.number 90 | // card.reversed = false 91 | card.meanings = { 92 | upright: object.meanings.new.upright, 93 | reversed: object.meanings.new.reversed, 94 | }, 95 | 96 | card.arcana = object.arcana == 'Major Arcana' ? Arcana.Major : Arcana.Minor 97 | 98 | let suits = { 99 | Trump: Suit.Trump, 100 | Swords: Suit.Swords, 101 | Wands: Suit.Wands, 102 | Cups: Suit.Cups, 103 | Pentacles: Suit.Pentacles, 104 | } 105 | 106 | card.suit = suits[object.suit] 107 | 108 | card.searchKey = object.searchKey 109 | card.questions = object.questions 110 | card.fortunes = object.fortuneTelling 111 | card.archetype = object.archetype 112 | card.element = object.elemental 113 | card.hebrewAlphabet = object.hebrewAlphabet 114 | card.spiritual = object.spiritual 115 | card.numerology = object.numerology 116 | card.affirmation = object.affirmation 117 | 118 | return card 119 | } 120 | } -------------------------------------------------------------------------------- /models/size.ts: -------------------------------------------------------------------------------- 1 | export enum Size { 2 | Small, 3 | Medium, 4 | Large, 5 | } -------------------------------------------------------------------------------- /models/spread.ts: -------------------------------------------------------------------------------- 1 | import { Card } from "./card" 2 | import { Size } from "./size" 3 | 4 | export class SpreadCard { 5 | position: { 6 | x: number, 7 | y: number 8 | } 9 | rotation: number 10 | size: Size 11 | layer: number 12 | number: number 13 | name: string 14 | description: string 15 | card?: [Card, boolean] 16 | 17 | draw(deck) { 18 | let index = Math.floor(Math.random() * deck.length) 19 | 20 | let drawn = deck.splice(index, 1)[0] 21 | this.card = [drawn, Math.round(Math.random()) > 0.5] 22 | } 23 | 24 | set(card, reversed) { 25 | this.card = [card, reversed] 26 | } 27 | 28 | static fromObject(object: any) { 29 | let card = new SpreadCard() 30 | 31 | card.position = { 32 | x: object.position.x, 33 | y: object.position.y, 34 | } 35 | 36 | card.rotation = object.rotation || 0 37 | 38 | let sizes = { 39 | small: Size.Small, 40 | medium: Size.Medium, 41 | large: Size.Large 42 | } 43 | 44 | card.size = object.size ? sizes[object.size] : Size.Medium 45 | 46 | card.layer = object.layer || 0 47 | card.number = object.number || 1 48 | card.name = object.name 49 | card.description = object.description || '' 50 | card.card = undefined 51 | return card 52 | } 53 | } 54 | 55 | export class Spread { 56 | id: string 57 | cards: SpreadCard[] 58 | name: string 59 | group: string 60 | description: string 61 | 62 | constructor(id, name?, description?, group?) { 63 | this.id = id 64 | this.name = name || '' 65 | this.group = group || '' 66 | this.description = description || '' 67 | this.cards = [] 68 | } 69 | 70 | addCard(card: SpreadCard) { 71 | this.cards.push(card) 72 | } 73 | 74 | reset() { 75 | for(let card of this.cards) { 76 | card.card = undefined 77 | } 78 | } 79 | 80 | draw(deck) { 81 | // just in case, we don't want to modify the base deck 82 | let deckCopy = deck.slice() 83 | 84 | for(let card of this.cards) { 85 | card.draw(deckCopy) 86 | } 87 | } 88 | 89 | static fromObject(object: any) { 90 | let spread = new Spread(object.id) 91 | 92 | spread.cards = [] 93 | for(let card of object.cards) { 94 | spread.cards.push(SpreadCard.fromObject(card)) 95 | } 96 | 97 | spread.name = object.name 98 | spread.description = object.description 99 | spread.group = object.group 100 | 101 | return spread 102 | } 103 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "fuse.js": "^6.4.0", 4 | "vue": "^2.6.11", 5 | "vue-hot-reload-api": "^2.3.4", 6 | "vue-router": "^3.3.4", 7 | "vuex": "^3.5.1" 8 | }, 9 | "devDependencies": { 10 | "@parcel/transformer-vue": "^2.0.0-beta.2", 11 | "@vue/component-compiler-utils": "^3.1.2", 12 | "cssnano": "^4.1.10", 13 | "parcel": "^1.12.4", 14 | "parcel-plugin-nuke-dist": "^1.0.1", 15 | "sass": "^1.26.10", 16 | "typescript": "^3.9.7", 17 | "vue-template-compiler": "^2.6.11" 18 | }, 19 | "browserslist": [ 20 | "last 2 Chrome versions" 21 | ], 22 | "name": "tarot", 23 | "version": "0.5.1", 24 | "main": "index.html", 25 | "scripts": { 26 | "start": "npx parcel start index.html", 27 | "build": "npx parcel build index.html --public-url=./" 28 | }, 29 | "repository": { 30 | "type": "git", 31 | "url": "git+https://github.com/cesque/tarot.git" 32 | }, 33 | "author": "", 34 | "license": "ISC", 35 | "bugs": { 36 | "url": "https://github.com/cesque/tarot/issues" 37 | }, 38 | "homepage": "https://github.com/cesque/tarot#readme", 39 | "description": "" 40 | } 41 | -------------------------------------------------------------------------------- /pages/About.vue: -------------------------------------------------------------------------------- 1 | 92 | 93 | 110 | 111 | -------------------------------------------------------------------------------- /pages/Input.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 44 | 45 | -------------------------------------------------------------------------------- /pages/Meanings.vue: -------------------------------------------------------------------------------- 1 | 74 | 75 | 212 | 213 | -------------------------------------------------------------------------------- /pages/Settings.vue: -------------------------------------------------------------------------------- 1 | 96 | 97 | 203 | 204 | -------------------------------------------------------------------------------- /pages/Spread.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 301 | 302 | -------------------------------------------------------------------------------- /pages/Spreads.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 64 | 65 | -------------------------------------------------------------------------------- /pentacles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /script.ts: -------------------------------------------------------------------------------- 1 | import packageJSON from "./package.json" 2 | 3 | import Vue from 'vue' 4 | import Vuex from 'vuex' 5 | import VueRouter from 'vue-router' 6 | 7 | import Tarot from './tarot' 8 | import DefaultSpreads from './defaultSpreads' 9 | import ColorThemes from './colorThemes' 10 | 11 | import App from './App.vue' 12 | import Meanings from './pages/Meanings.vue' 13 | import About from './pages/About.vue' 14 | import Input from './pages/Input.vue' 15 | import Spreads from './pages/Spreads.vue' 16 | import Spread from './pages/Spread.vue' 17 | import Settings from './pages/Settings.vue' 18 | 19 | import { Card } from './models/card' 20 | 21 | Vue.use(VueRouter) 22 | Vue.use(Vuex) 23 | 24 | let cards: Card[] = Tarot.cards.map(card => Card.fromObject(card)) 25 | 26 | function makePageTitle(name) { 27 | let siteName = 'hierophant.app' 28 | if (!name) { 29 | return siteName 30 | } 31 | 32 | return siteName + ' | ' + name 33 | } 34 | 35 | let defaults = { 36 | useColoredFavicon: false, 37 | fonts: { 38 | mono: "'Overpass Mono', monospace" 39 | }, 40 | colors: { 41 | bg: '#ffffff', 42 | mid: '#ff0033', 43 | fg: '#000000', 44 | }, 45 | } 46 | 47 | let loadedConfig = JSON.parse(localStorage.getItem('config')) 48 | 49 | // let config = { 50 | // useColoredFavicon: loadedConfig?.useColoredFavicon, 51 | // fonts: { 52 | // mono: loadedConfig?.fonts?.mono ?? defaults.fonts.mono 53 | // }, 54 | // colors: { 55 | // bg: loadedConfig?.colors?.bg ?? defaults.colors.bg, 56 | // mid: loadedConfig?.colors?.mid ?? defaults.colors.mid, 57 | // fg: loadedConfig?.colors?.fg ?? defaults.colors.fg, 58 | // }, 59 | // } 60 | 61 | // this line is a way better version of the above 62 | let config = { ...defaults, ...loadedConfig } 63 | 64 | document.addEventListener('DOMContentLoaded', () => { 65 | const store = new Vuex.Store({ 66 | state: { 67 | cards: cards, 68 | spreads: DefaultSpreads, 69 | siteVersion: packageJSON.version, 70 | colorThemes: ColorThemes, 71 | config: { 72 | useColoredFavicon: config.useColoredFavicon, 73 | fonts: { 74 | mono: config.fonts.mono 75 | }, 76 | colors: { 77 | bg: config.colors.bg, 78 | mid: config.colors.mid, 79 | fg: config.colors.fg, 80 | }, 81 | }, 82 | defaults: { 83 | useColoredFavicon: config.useColoredFavicon, 84 | fonts: { 85 | mono: config.fonts.mono 86 | }, 87 | colors: { 88 | bg: config.colors.bg, 89 | mid: config.colors.mid, 90 | fg: config.colors.fg, 91 | }, 92 | }, 93 | temporaryConfig: null 94 | }, 95 | mutations: { 96 | saveConfig: (state, config) => { 97 | console.log(config) 98 | state.config.useColoredFavicon = config.useColoredFavicon 99 | 100 | for(let key in config.colors) { 101 | state.config.colors[key] = config.colors[key] 102 | } 103 | 104 | if(config.fonts.mono) { 105 | state.config.fonts.mono = config.fonts.mono 106 | } 107 | }, 108 | setTemporaryConfig: (state, config) => { 109 | state.temporaryConfig = config 110 | }, 111 | clearTemporaryConfig: state => { 112 | state.temporaryConfig = null 113 | } 114 | }, 115 | getters: { 116 | test: state => param => { 117 | return param 118 | }, 119 | romanNumeral: state => n => { 120 | if (n == 0) { 121 | return '0' 122 | } 123 | 124 | const lookup = [ 125 | { symbol: 'X', number: 10 }, 126 | { symbol: 'IX', number: 9 }, 127 | { symbol: 'V', number: 5 }, 128 | { symbol: 'IV', number: 4 }, 129 | { symbol: 'I', number: 1 }, 130 | ] 131 | 132 | let roman = '' 133 | for (let pair of lookup) { 134 | while (n >= pair.number) { 135 | roman += pair.symbol 136 | n -= pair.number 137 | } 138 | } 139 | return roman 140 | }, 141 | pageTitle: state => makePageTitle, 142 | }, 143 | actions: { 144 | saveConfig (context, config) { 145 | context.commit('saveConfig', config) 146 | try { 147 | localStorage.setItem('config', JSON.stringify(context.state.config)) 148 | return true 149 | } catch(e) { 150 | console.error('failed to save config to localstorage!') 151 | console.error(e) 152 | return false 153 | } 154 | } 155 | } 156 | }) 157 | 158 | let router = new VueRouter({ 159 | // mode: 'history', 160 | routes: [ 161 | { 162 | path: '/', 163 | component: Meanings, 164 | meta: { 165 | title: makePageTitle('home') 166 | } 167 | }, 168 | { 169 | path: '/meanings/', 170 | component: Meanings, 171 | meta: { 172 | title: makePageTitle('card meanings') 173 | } 174 | }, 175 | { 176 | path: '/meanings/:id', 177 | component: Meanings, 178 | meta: { 179 | title: makePageTitle('card meanings') 180 | } 181 | }, 182 | { 183 | path: '/spreads', 184 | component: Spreads, 185 | meta: { 186 | title: makePageTitle('spreads') 187 | } 188 | }, 189 | { 190 | path: '/spread/:id', 191 | component: Spread, 192 | meta: { 193 | title: makePageTitle('spread') 194 | } 195 | }, 196 | { 197 | path: '/spread/:id/*', 198 | component: Spread, 199 | meta: { 200 | title: makePageTitle('spread') 201 | } 202 | }, 203 | { 204 | path: '/about', 205 | component: About, 206 | meta: { 207 | title: makePageTitle('about') 208 | } 209 | }, 210 | { 211 | path: '/settings', 212 | component: Settings, 213 | meta: { 214 | title: makePageTitle('settings') 215 | } 216 | }, 217 | { 218 | path: '/input', 219 | component: Input, 220 | } 221 | ] 222 | }) 223 | 224 | router.beforeEach((to, from, next) => { 225 | document.title = to.meta.title 226 | 227 | next() 228 | }) 229 | 230 | new Vue({ 231 | el: '#app', 232 | store, 233 | router, 234 | render: h => h(App) 235 | }) 236 | }) -------------------------------------------------------------------------------- /suits cropped.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/suits cropped.afdesign -------------------------------------------------------------------------------- /suits.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cesque/tarot/0f981e30335d50e54ba93a41b7e928b2f3bc6a7d/suits.afdesign -------------------------------------------------------------------------------- /sword.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /variables.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Overpass+Mono:wght@300;400;600;700&display=swap'); 2 | 3 | $font-mono: var(--font-mono); 4 | $breakpoint-sm: 500px; 5 | $breakpoint-lg: 900px; 6 | $breakpoint-xl: 1200px; 7 | 8 | * { 9 | box-sizing: border-box; 10 | } 11 | 12 | body { 13 | margin: 0; 14 | padding: 0; 15 | font-family: $font-mono; 16 | } 17 | 18 | .content { 19 | padding: 50px; 20 | max-width: 800px; 21 | width: 100%; 22 | margin: 0 auto; 23 | } 24 | -------------------------------------------------------------------------------- /vue-shim.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } -------------------------------------------------------------------------------- /wand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | --------------------------------------------------------------------------------