progress towards rendering playing cards preview, separated parsed cardsToSolve into

This commit is contained in:
Adam Piontek 2022-09-11 09:55:51 -04:00
parent 6681f0ec1c
commit 63e2fe4a49
4 changed files with 671 additions and 4 deletions

View file

@ -11,6 +11,7 @@
<div class="container">
<div class="row">
<div class="col pt-3 pt-lg-5">
<h1>Tripeaks Solver</h1>
<p>Enter cards representing a Tripeaks game below. Enter each card as 2 characters each, representing the rank (A, 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K) and suit (C, D, H, S). For example, "TH" is the Ten of Hearts.</p>
@ -25,6 +26,7 @@
<li>7c03s0qsjc00JSasTSadtcqd9s4s2h9h8sjh6c3dks5s5c6h9C2Cac8C6d5DTH8dkckd9d4c5h8hqh6s</li>
</ul>
<!-- User input of game cards -->
<form
id="cardsInputForm"
x-data="cardsInputForm"
@ -46,7 +48,7 @@
:class="{ 'is-valid': isFormValid && inputValue.length > 2, 'is-invalid': !isFormValid && inputValue.length > 2 }"
maxlength="206"
@keyup.debounce="validateCardsInput()"
:placeholder="useDelim ? 'e.g., 2S TC 4S QD KH 5S 9S ...' : 'e.g., 2STC4SQDKH5S9S...'"
placeholder="e.g., 2S TC 4S QD KH 5S 9S ..."
/>
<template x-for="msg in validMessages">
@ -65,6 +67,13 @@
</template>
</div>
</form>
<!-- Friendly display of game cards -->
<div
id="playingCardsPreview"
x-data="playingCardsPreview">
<div class="mb-3">
<label
id="cardsToSolveLabel"
@ -76,13 +85,21 @@
id="cardsToSolve"
aria-describedby="cardsToSolveLabel"
class="form-control"
x-text="cardsToSolve.join(' ')"
x-text="$store.global.cardsToSolve.join(' ')"
rows="4"
disabled
readonly
></textarea>
</div>
</form>
<div id="playingCardsDisplay" class="playingCards">
<span class="card rank-2 diams">
<span class="rank">2</span>
<span class="suit">&diams;</span>
</span>
</div>
</div>
</div>
</div>

11
main.js
View file

@ -1,7 +1,16 @@
import "./style.scss";
import "./style-cards.css";
import Alpine from "alpinejs";
// import 'bootstrap/dist/js/bootstrap'
Alpine.store('global', {
cardsToSolve: []
})
Alpine.data("playingCardsPreview", () => ({
testing: true
}));
Alpine.data("cardsInputForm", () => ({
// "constants" for validation etc
nonAlphaNumRegEx: /[\W_]+/g,
@ -120,7 +129,7 @@ Alpine.data("cardsInputForm", () => ({
}
// set the game cards to try solving, based on current input
this.cardsToSolve = Array(this.deck.length - this.validCards.length)
this.$store.global.cardsToSolve = Array(this.deck.length - this.validCards.length)
.fill(0)
.concat(this.validCards)
.map((c) => (c === "0" ? 0 : c));

630
style-cards.css Normal file
View file

@ -0,0 +1,630 @@
/**
* Styles for CSS Playing Cards
*
* @author Anika Henke <anika@selfthinker.org>
* @license CC BY-SA [http://creativecommons.org/licenses/by-sa/3.0]
* @version 2011-06-14
* @link http://selfthinker.github.com/CSS-Playing-Cards/
*/
/* card itself
********************************************************************/
.playingCards .card {
display: inline-block;
width: 3.3em;
height: 4.6em;
border: 1px solid #666;
border-radius: .3em;
-moz-border-radius: .3em;
-webkit-border-radius: .3em;
-khtml-border-radius: .3em;
padding: .25em;
margin: 0 .5em .5em 0;
text-align: center;
font-size: 1.2em; /* @change: adjust this value to make bigger or smaller cards */
font-weight: normal;
font-family: Arial, sans-serif;
position: relative;
background-color: #fff;
-moz-box-shadow: .2em .2em .5em #333;
-webkit-box-shadow: .2em .2em .5em #333;
box-shadow: .2em .2em .5em #333;
}
.playingCards a.card {
text-decoration: none;
}
/* selected and hover state */
.playingCards a.card:hover, .playingCards a.card:active, .playingCards a.card:focus,
.playingCards label.card:hover,
.playingCards strong .card {
bottom: 1em;
}
.playingCards label.card {
cursor: pointer;
}
.playingCards .card.back {
text-indent: -4000px;
background-color: #ccc;
background-repeat: repeat;
background-image: url(data:image/gif;base64,R0lGODlhJAAkAJEAAOjFsezdztOKbL5QKCH5BAAAAAAALAAAAAAkACQAAAL/HC4RAqm/mmLHyHmAbczB11Ea8ombJKSgKo6Z17pXFznmS1JptiX0z3vVhpEKDoUIkoa0olGIUeZUk1RI6Yn2mh/FDAt6frOrRRTqXPpsVLYugzxaVy+YcBdnoWPZOT0E4eckQtZFZBjWoHixQFWl6Nhol6R2p1Okt5TGaEWZA6fjiMdhZgPHeWrTWGVq+jTZg1HYyAEWKLYzmyiGKoUimilz+YYryyTlg5RcDJSAbNx0Q7lMcbIGEyzTK8zVdfVaImzs/QV+prYqWWW2ObkoOApM/Em/rUlIm7fijs8a2EEKEaZ3AsMUgneEU6RcpJbZ27aGHkAO2Ors8xQH1IR0Bn5YnOtVAAA7); /* image is "Pattern 069" from http://www.squidfingers.com/patterns/ */
background-image: -moz-repeating-linear-gradient(34% 6% 135deg,#0F1E59, #75A1BF, #3E3E63 50%);
background-image: -webkit-gradient(radial, center center, 20, center center, 80, from(#3c3), color-stop(0.4, #363), to(#030));
/* yes, it's intentional that Mozilla, Webkit, Opera and IE all will get different backgrounds ... why not? :) */
}
/* suit colours
********************************************************************/
.playingCards .card.diams {
color: #f00 !important;
}
.playingCards.fourColours .card.diams {
color: #00f !important;
}
[lang=de] .playingCards.fourColours .card.diams {
color: #f60 !important;
}
.playingCards .card.hearts {
color: #f00 !important;
}
.playingCards .card.spades {
color: #000 !important;
}
[lang=de] .playingCards.fourColours .card.spades {
color: #090 !important;
}
.playingCards .card.clubs {
color: #000 !important;
}
.playingCards.fourColours .card.clubs {
color: #090 !important;
}
[lang=de] .playingCards.fourColours .card.clubs {
color: #000 !important;
}
.playingCards .card.joker {
color: #000 !important;
}
.playingCards .card.joker.big {
color: #f00 !important;
}
/* inner bits
********************************************************************/
/* top left main info (rank and suit) */
.playingCards .card .rank,
.playingCards .card .suit {
display: block;
line-height: 1;
text-align: left;
}
.playingCards .card .rank {
}
.playingCards .card .suit {
line-height: .7;
}
/* checkbox */
.playingCards .card input {
margin-top: -.05em;
font: inherit;
}
.playingCards.simpleCards .card input,
.playingCards .card.rank-j input,
.playingCards .card.rank-q input,
.playingCards .card.rank-k input,
.playingCards .card.rank-a input {
margin-top: 2.4em;
}
.playingCards.inText .card input {
margin-top: 0;
}
/* different rank letters for different languages */
.playingCards .card .rank:after,
.playingCards .card.joker .rank:before {
position: absolute;
top: .25em;
left: .25em;
background: #fff;
}
[lang=de] .playingCards .card.rank-j .rank:after {
content: "B";
}
[lang=fr] .playingCards .card.rank-j .rank:after {
content: "V";
}
[lang=de] .playingCards .card.rank-q .rank:after,
[lang=fr] .playingCards .card.rank-q .rank:after {
content: "D";
}
[lang=fr] .playingCards .card.rank-k .rank:after {
content: "R";
}
/* joker (top left symbol) */
.playingCards .card.joker .rank {
position: absolute;
}
.playingCards .card.joker .rank:before {
content: "\2605";
top: 0;
left: 0;
}
.playingCards .card.joker .suit {
text-indent: -9999px;
}
/* inner multiple suits */
.playingCards .card .suit:after {
display: block;
margin-top: -.8em;
text-align: center;
white-space: pre;
line-height: .9;
font-size: 1.3em;
word-spacing: -.05em;
}
/* make the hearts and clubs symbols fit, because they are a bit bigger than the others */
.playingCards .card.hearts .suit:after {
word-spacing: -.15em;
}
.playingCards .card.hearts.rank-10 .suit:after {
word-spacing: -.05em;
letter-spacing: -.1em;
}
.playingCards .card.clubs.rank-10 .suit:after {
word-spacing: -.15em;
}
/* 8, 9, 10 are the most crowded */
.playingCards .card.rank-8 .suit:after,
.playingCards .card.rank-9 .suit:after {
letter-spacing: -.075em;
}
.playingCards .card.rank-10 .suit:after {
letter-spacing: -.1em;
}
.playingCards .card.clubs .suit:after {
letter-spacing: -.125em;
}
/*____________ symbols in the middle (suits, full) ____________*/
/* diamonds */
.playingCards .card.rank-2.diams .suit:after {
content: "\2666 \A\A\2666";
}
.playingCards .card.rank-3.diams .suit:after {
content: "\2666 \A\2666 \A\2666";
}
.playingCards .card.rank-4.diams .suit:after {
content: "\2666\00A0\00A0\00A0\2666 \A\A\2666\00A0\00A0\00A0\2666";
}
.playingCards .card.rank-5.diams .suit:after {
content: "\2666\00A0\00A0\00A0\2666 \A\2666 \A\2666\00A0\00A0\00A0\2666";
}
.playingCards .card.rank-6.diams .suit:after {
content: "\2666\00A0\00A0\00A0\2666 \A\2666\00A0\00A0\00A0\2666 \A\2666\00A0\00A0\00A0\2666";
}
.playingCards .card.rank-7.diams .suit:after {
content: "\2666\00A0\00A0\2666 \A\2666\00A0\2666\00A0\2666 \A\2666\00A0\00A0\2666";
}
.playingCards .card.rank-8.diams .suit:after {
content: "\2666\00A0\2666\00A0\2666 \A\2666\00A0\00A0\2666 \A\2666\00A0\2666\00A0\2666";
}
.playingCards .card.rank-9.diams .suit:after {
content: "\2666\00A0\2666\00A0\2666 \A\2666\00A0\2666\00A0\2666 \A\2666\00A0\2666\00A0\2666";
}
.playingCards .card.rank-10.diams .suit:after {
content: "\2666\00A0\2666\00A0\2666 \A\2666\00A0\2666\00A0\2666\00A0\2666 \A\2666\00A0\2666\00A0\2666";
}
/* hearts */
.playingCards .card.rank-2.hearts .suit:after {
content: "\2665 \A\A\2665";
}
.playingCards .card.rank-3.hearts .suit:after {
content: "\2665 \A\2665 \A\2665";
}
.playingCards .card.rank-4.hearts .suit:after {
content: "\2665\00A0\00A0\00A0\2665 \A\A\2665\00A0\00A0\00A0\2665";
}
.playingCards .card.rank-5.hearts .suit:after {
content: "\2665\00A0\00A0\00A0\2665 \A\2665 \A\2665\00A0\00A0\00A0\2665";
}
.playingCards .card.rank-6.hearts .suit:after {
content: "\2665\00A0\00A0\00A0\2665 \A\2665\00A0\00A0\00A0\2665 \A\2665\00A0\00A0\00A0\2665";
}
.playingCards .card.rank-7.hearts .suit:after {
content: "\2665\00A0\00A0\2665 \A\2665\00A0\2665\00A0\2665 \A\2665\00A0\00A0\2665";
}
.playingCards .card.rank-8.hearts .suit:after {
content: "\2665\00A0\2665\00A0\2665 \A\2665\00A0\00A0\2665 \A\2665\00A0\2665\00A0\2665";
}
.playingCards .card.rank-9.hearts .suit:after {
content: "\2665\00A0\2665\00A0\2665 \A\2665\00A0\2665\00A0\2665 \A\2665\00A0\2665\00A0\2665";
}
.playingCards .card.rank-10.hearts .suit:after {
content: "\2665\00A0\2665\00A0\2665 \A\2665\00A0\2665\00A0\2665\00A0\2665 \A\2665\00A0\2665\00A0\2665";
}
/* spades */
.playingCards .card.rank-2.spades .suit:after {
content: "\2660 \A\A\2660";
}
.playingCards .card.rank-3.spades .suit:after {
content: "\2660 \A\2660 \A\2660";
}
.playingCards .card.rank-4.spades .suit:after {
content: "\2660\00A0\00A0\00A0\2660 \A\A\2660\00A0\00A0\00A0\2660";
}
.playingCards .card.rank-5.spades .suit:after {
content: "\2660\00A0\00A0\00A0\2660 \A\2660 \A\2660\00A0\00A0\00A0\2660";
}
.playingCards .card.rank-6.spades .suit:after {
content: "\2660\00A0\00A0\00A0\2660 \A\2660\00A0\00A0\00A0\2660 \A\2660\00A0\00A0\00A0\2660";
}
.playingCards .card.rank-7.spades .suit:after {
content: "\2660\00A0\00A0\2660 \A\2660\00A0\2660\00A0\2660 \A\2660\00A0\00A0\2660";
}
.playingCards .card.rank-8.spades .suit:after {
content: "\2660\00A0\2660\00A0\2660 \A\2660\00A0\00A0\2660 \A\2660\00A0\2660\00A0\2660";
}
.playingCards .card.rank-9.spades .suit:after {
content: "\2660\00A0\2660\00A0\2660 \A\2660\00A0\2660\00A0\2660 \A\2660\00A0\2660\00A0\2660";
}
.playingCards .card.rank-10.spades .suit:after {
content: "\2660\00A0\2660\00A0\2660 \A\2660\00A0\2660\00A0\2660\00A0\2660 \A\2660\00A0\2660\00A0\2660";
}
/* clubs */
.playingCards .card.rank-2.clubs .suit:after {
content: "\2663 \A\A\2663";
}
.playingCards .card.rank-3.clubs .suit:after {
content: "\2663 \A\2663 \A\2663";
}
.playingCards .card.rank-4.clubs .suit:after {
content: "\2663\00A0\00A0\00A0\2663 \A\A\2663\00A0\00A0\00A0\2663";
}
.playingCards .card.rank-5.clubs .suit:after {
content: "\2663\00A0\00A0\00A0\2663 \A\2663 \A\2663\00A0\00A0\00A0\2663";
}
.playingCards .card.rank-6.clubs .suit:after {
content: "\2663\00A0\00A0\00A0\2663 \A\2663\00A0\00A0\00A0\2663 \A\2663\00A0\00A0\00A0\2663";
}
.playingCards .card.rank-7.clubs .suit:after {
content: "\2663\00A0\00A0\2663 \A\2663\00A0\2663\00A0\2663 \A\2663\00A0\00A0\2663";
}
.playingCards .card.rank-8.clubs .suit:after {
content: "\2663\00A0\2663\00A0\2663 \A\2663\00A0\00A0\2663 \A\2663\00A0\2663\00A0\2663";
}
.playingCards .card.rank-9.clubs .suit:after {
content: "\2663\00A0\2663\00A0\2663 \A\2663\00A0\2663\00A0\2663 \A\2663\00A0\2663\00A0\2663";
}
.playingCards .card.rank-10.clubs .suit:after {
content: "\2663\00A0\2663\00A0\2663 \A\2663\00A0\2663\00A0\2663\00A0\2663 \A\2663\00A0\2663\00A0\2663";
}
/*____________ symbols in the middle (faces as images) ____________*/
.playingCards.faceImages .card.rank-j .suit:after,
.playingCards.faceImages .card.rank-q .suit:after,
.playingCards.faceImages .card.rank-k .suit:after {
content: '';
}
.playingCards.faceImages .card.rank-j,
.playingCards.faceImages .card.rank-q,
.playingCards.faceImages .card.rank-k,
.playingCards.faceImages .card.joker {
background-repeat: no-repeat;
background-position: -1em 0;
/* @change: smaller cards: more negative distance from the left
bigger cards: 0 or more positive distance from the left */
/* for a centered full background image:
background-position: .35em 0;
-moz-background-size: contain;
-o-background-size: contain;
-webkit-background-size: contain;
-khtml-background-size: contain;
background-size: contain;
*/
}
.playingCards.faceImages .card.rank-j.diams { background-image: url(faces/JD.gif); }
.playingCards.faceImages .card.rank-j.hearts { background-image: url(faces/JH.gif); }
.playingCards.faceImages .card.rank-j.spades { background-image: url(faces/JS.gif); }
.playingCards.faceImages .card.rank-j.clubs { background-image: url(faces/JC.gif); }
.playingCards.faceImages .card.rank-q.diams { background-image: url(faces/QD.gif); }
.playingCards.faceImages .card.rank-q.hearts { background-image: url(faces/QH.gif); }
.playingCards.faceImages .card.rank-q.spades { background-image: url(faces/QS.gif); }
.playingCards.faceImages .card.rank-q.clubs { background-image: url(faces/QC.gif); }
.playingCards.faceImages .card.rank-k.diams { background-image: url(faces/KD.gif); }
.playingCards.faceImages .card.rank-k.hearts { background-image: url(faces/KH.gif); }
.playingCards.faceImages .card.rank-k.spades { background-image: url(faces/KS.gif); }
.playingCards.faceImages .card.rank-k.clubs { background-image: url(faces/KC.gif); }
.playingCards.faceImages .card.joker { background-image: url(faces/joker.gif); }
.playingCards.simpleCards .card.rank-j,
.playingCards.simpleCards .card.rank-q,
.playingCards.simpleCards .card.rank-k { background-image: none !important; }
/*____________ symbols in the middle (faces as dingbat symbols) ____________*/
.playingCards.simpleCards .card .suit:after,
.playingCards .card.rank-j .suit:after,
.playingCards .card.rank-q .suit:after,
.playingCards .card.rank-k .suit:after,
.playingCards .card.rank-a .suit:after,
.playingCards .card.joker .rank:after {
font-family: Georgia, serif;
position: absolute;
font-size: 3em;
right: .1em;
bottom: .25em;
word-spacing: normal;
letter-spacing: normal;
line-height: 1;
}
.playingCards .card.rank-j .suit:after {
content: "\265F";
right: .15em;
}
.playingCards .card.rank-q .suit:after {
content: "\265B";
}
.playingCards .card.rank-k .suit:after {
content: "\265A";
}
/* joker (inner symbol) */
.playingCards.faceImages .card.joker .rank:after {
content: "";
}
.playingCards .card.joker .rank:after {
position: absolute;
content: "\2766";
top: .4em;
left: .1em;
}
/* big suits in middle */
.playingCards.simpleCards .card .suit:after,
.playingCards .card.rank-a .suit:after {
font-family: Arial, sans-serif;
line-height: .9;
bottom: .35em;
}
.playingCards.simpleCards .card.diams .suit:after,
.playingCards .card.rank-a.diams .suit:after {
content: "\2666";
right: .4em;
}
.playingCards.simpleCards .card.hearts .suit:after,
.playingCards .card.rank-a.hearts .suit:after {
content: "\2665";
right: .35em;
}
.playingCards.simpleCards .card.spades .suit:after,
.playingCards .card.rank-a.spades .suit:after {
content: "\2660";
right: .35em;
}
.playingCards.simpleCards .card.clubs .suit:after,
.playingCards .card.rank-a.clubs .suit:after {
content: "\2663";
right: .3em;
}
/*____________ smaller cards for use inside text ____________*/
.playingCards.inText .card {
font-size: .4em;
vertical-align: middle;
}
.playingCards.inText .card span.rank,
.playingCards.inText .card span.suit {
text-align: center;
}
.playingCards.inText .card span.rank {
font-size: 2em;
margin-top: .2em;
}
.playingCards.inText .card span.suit {
font-size: 2.5em;
}
.playingCards.inText .card .suit:after,
.playingCards.inText .card.joker .rank:after {
content: "" !important;
}
.playingCards.inText .card .rank:after {
left: .5em;
padding: 0 .1em;
}
/* hand (in your hand or on table or as a deck)
********************************************************************/
.playingCards ul.table,
.playingCards ul.hand,
.playingCards ul.deck {
list-style-type: none;
padding: 0;
margin: 0 0 1.5em 0;
position: relative;
clear: both;
}
.playingCards ul.hand {
margin-bottom: 3.5em;
}
.playingCards ul.table li,
.playingCards ul.hand li,
.playingCards ul.deck li {
margin: 0;
padding: 0;
list-style-type: none;
float: left;
}
.playingCards ul.hand,
.playingCards ul.deck {
height: 8em;
}
.playingCards ul.hand li,
.playingCards ul.deck li {
position: absolute;
}
.playingCards ul.hand li {
bottom: 0;
}
.playingCards ul.hand li:nth-child(1) { left: 0; }
.playingCards ul.hand li:nth-child(2) { left: 1.1em; }
.playingCards ul.hand li:nth-child(3) { left: 2.2em; }
.playingCards ul.hand li:nth-child(4) { left: 3.3em; }
.playingCards ul.hand li:nth-child(5) { left: 4.4em; }
.playingCards ul.hand li:nth-child(6) { left: 5.5em; }
.playingCards ul.hand li:nth-child(7) { left: 6.6em; }
.playingCards ul.hand li:nth-child(8) { left: 7.7em; }
.playingCards ul.hand li:nth-child(9) { left: 8.8em; }
.playingCards ul.hand li:nth-child(10) { left: 9.9em; }
.playingCards ul.hand li:nth-child(11) { left: 11em; }
.playingCards ul.hand li:nth-child(12) { left: 12.1em; }
.playingCards ul.hand li:nth-child(13) { left: 13.2em; }
.playingCards ul.hand li:nth-child(14) { left: 14.3em; }
.playingCards ul.hand li:nth-child(15) { left: 15.4em; }
.playingCards ul.hand li:nth-child(16) { left: 16.5em; }
.playingCards ul.hand li:nth-child(17) { left: 17.6em; }
.playingCards ul.hand li:nth-child(18) { left: 18.7em; }
.playingCards ul.hand li:nth-child(19) { left: 19.8em; }
.playingCards ul.hand li:nth-child(20) { left: 20.9em; }
.playingCards ul.hand li:nth-child(21) { left: 22em; }
.playingCards ul.hand li:nth-child(22) { left: 23.1em; }
.playingCards ul.hand li:nth-child(23) { left: 24.2em; }
.playingCards ul.hand li:nth-child(24) { left: 25.3em; }
.playingCards ul.hand li:nth-child(25) { left: 26.4em; }
.playingCards ul.hand li:nth-child(26) { left: 27.5em; }
/* rotate cards if rotateHand option is on */
.playingCards.rotateHand ul.hand li:nth-child(1) {
-moz-transform: translate(1.9em, .9em) rotate(-42deg);
-webkit-transform: translate(1.9em, .9em) rotate(-42deg);
-o-transform: translate(1.9em, .9em) rotate(-42deg);
transform: translate(1.9em, .9em) rotate(-42deg);
}
.playingCards.rotateHand ul.hand li:nth-child(2) {
-moz-transform: translate(1.5em, .5em) rotate(-33deg);
-webkit-transform: translate(1.5em, .5em) rotate(-33deg);
-o-transform: translate(1.5em, .5em) rotate(-33deg);
transform: translate(1.5em, .5em) rotate(-33deg);
}
.playingCards.rotateHand ul.hand li:nth-child(3) {
-moz-transform: translate(1.1em, .3em) rotate(-24deg);
-webkit-transform: translate(1.1em, .3em) rotate(-24deg);
-o-transform: translate(1.1em, .3em) rotate(-24deg);
transform: translate(1.1em, .3em) rotate(-24deg);
}
.playingCards.rotateHand ul.hand li:nth-child(4) {
-moz-transform: translate(.7em, .2em) rotate(-15deg);
-webkit-transform: translate(.7em, .2em) rotate(-15deg);
-o-transform: translate(.7em, .2em) rotate(-15deg);
transform: translate(.7em, .2em) rotate(-15deg);
}
.playingCards.rotateHand ul.hand li:nth-child(5) {
-moz-transform: translate(.3em, .1em) rotate(-6deg);
-webkit-transform: translate(.3em, .1em) rotate(-6deg);
-o-transform: translate(.3em, .1em) rotate(-6deg);
transform: translate(.3em, .1em) rotate(-6deg);
}
.playingCards.rotateHand ul.hand li:nth-child(6) {
-moz-transform: translate(-.1em, .1em) rotate(3deg);
-webkit-transform: translate(-.1em, .1em) rotate(3deg);
-o-transform: translate(-.1em, .1em) rotate(3deg);
transform: translate(-.1em, .1em) rotate(3deg);
}
.playingCards.rotateHand ul.hand li:nth-child(7) {
-moz-transform: translate(-.5em, .2em) rotate(12deg);
-webkit-transform: translate(-.5em, .2em) rotate(12deg);
-o-transform: translate(-.5em, .2em) rotate(12deg);
transform: translate(-.5em, .2em) rotate(12deg);
}
.playingCards.rotateHand ul.hand li:nth-child(8) {
-moz-transform: translate(-.9em, .3em) rotate(21deg);
-webkit-transform: translate(-.9em, .3em) rotate(21deg);
-o-transform: translate(-.9em, .3em) rotate(21deg);
transform: translate(-.9em, .3em) rotate(21deg);
}
.playingCards.rotateHand ul.hand li:nth-child(9) {
-moz-transform: translate(-1.3em, .6em) rotate(30deg);
-webkit-transform: translate(-1.3em, .6em) rotate(30deg);
-o-transform: translate(-1.3em, .6em) rotate(30deg);
transform: translate(-1.3em, .6em) rotate(30deg);
}
.playingCards.rotateHand ul.hand li:nth-child(10) {
-moz-transform: translate(-1.7em, 1em) rotate(39deg);
-webkit-transform: translate(-1.7em, 1em) rotate(39deg);
-o-transform: translate(-1.7em, 1em) rotate(39deg);
transform: translate(-1.7em, 1em) rotate(39deg);
}
.playingCards.rotateHand ul.hand li:nth-child(11) {
-moz-transform: translate(-2.2em, 1.5em) rotate(48deg);
-webkit-transform: translate(-2.2em, 1.5em) rotate(48deg);
-o-transform: translate(-2.2em, 1.5em) rotate(48deg);
transform: translate(-2.2em, 1.5em) rotate(48deg);
}
.playingCards.rotateHand ul.hand li:nth-child(12) {
-moz-transform: translate(-2.8em, 2.1em) rotate(57deg);
-webkit-transform: translate(-2.8em, 2.1em) rotate(57deg);
-o-transform: translate(-2.8em, 2.1em) rotate(57deg);
transform: translate(-2.8em, 2.1em) rotate(57deg);
}
.playingCards.rotateHand ul.hand li:nth-child(13) {
-moz-transform: translate(-3.5em, 2.8em) rotate(66deg);
-webkit-transform: translate(-3.5em, 2.8em) rotate(66deg);
-o-transform: translate(-3.5em, 2.8em) rotate(66deg);
transform: translate(-3.5em, 2.8em) rotate(66deg);
}
/* deck */
.playingCards ul.deck li:nth-child(1) { left: 0; bottom: 0; }
.playingCards ul.deck li:nth-child(2) { left: 2px; bottom: 1px; }
.playingCards ul.deck li:nth-child(3) { left: 4px; bottom: 2px; }
.playingCards ul.deck li:nth-child(4) { left: 6px; bottom: 3px; }
.playingCards ul.deck li:nth-child(5) { left: 8px; bottom: 4px; }
.playingCards ul.deck li:nth-child(6) { left: 10px; bottom: 5px; }
.playingCards ul.deck li:nth-child(7) { left: 12px; bottom: 6px; }
.playingCards ul.deck li:nth-child(8) { left: 14px; bottom: 7px; }
.playingCards ul.deck li:nth-child(9) { left: 16px; bottom: 8px; }
.playingCards ul.deck li:nth-child(10) { left: 18px; bottom: 9px; }
.playingCards ul.deck li:nth-child(11) { left: 20px; bottom: 10px; }
.playingCards ul.deck li:nth-child(12) { left: 22px; bottom: 11px; }
.playingCards ul.deck li:nth-child(13) { left: 24px; bottom: 12px; }
.playingCards ul.deck li:nth-child(14) { left: 26px; bottom: 13px; }
.playingCards ul.deck li:nth-child(15) { left: 28px; bottom: 14px; }
.playingCards ul.deck li:nth-child(16) { left: 30px; bottom: 15px; }
.playingCards ul.deck li:nth-child(17) { left: 32px; bottom: 16px; }
.playingCards ul.deck li:nth-child(18) { left: 34px; bottom: 17px; }
.playingCards ul.deck li:nth-child(19) { left: 36px; bottom: 18px; }
.playingCards ul.deck li:nth-child(20) { left: 38px; bottom: 19px; }
.playingCards ul.deck li:nth-child(21) { left: 40px; bottom: 20px; }
.playingCards ul.deck li:nth-child(22) { left: 42px; bottom: 21px; }
.playingCards ul.deck li:nth-child(23) { left: 44px; bottom: 22px; }
.playingCards ul.deck li:nth-child(24) { left: 46px; bottom: 23px; }
.playingCards ul.deck li:nth-child(25) { left: 48px; bottom: 24px; }
.playingCards ul.deck li:nth-child(26) { left: 50px; bottom: 25px; }
.playingCards ul.deck li:nth-child(27) { left: 52px; bottom: 26px; }
.playingCards ul.deck li:nth-child(28) { left: 54px; bottom: 27px; }
.playingCards ul.deck li:nth-child(29) { left: 56px; bottom: 28px; }
.playingCards ul.deck li:nth-child(30) { left: 58px; bottom: 29px; }
.playingCards ul.deck li:nth-child(31) { left: 60px; bottom: 30px; }
.playingCards ul.deck li:nth-child(32) { left: 62px; bottom: 31px; }

View file

@ -1 +1,12 @@
@import "../node_modules/bootstrap/scss/bootstrap";
.playingCards {
.card {
box-shadow: .1em .1em .3em #999 !important;
.suit {
&::after {
line-height: .8 !important;
}
}
}
}