INDEX

  1. Introduction
  2. Commenting
  3. Conditional Statements
  4. case Statement
  5. Looping
    1. For Loop
    2. While Loop
    3. Until
    4. break and continue statements
  6. Array
  7. Command Line Arguments
  8. Exit Staus

Introduction

All shell script files start with #!/bin/bash line.
This is called a shebang. This tells which interpreter
should call to parse the script. Example of a shell
script file:

1
2
3
#!/bin/bash

echo "hello, world"

Commenting

Any line begin with # is a comment.

1
2
3
4
#!/bin/bash

# This is a comment
echo "hello, world" # This is a comment too

Here documents

Feed text as it is into the standard input including whitespace and quotation marks.
Here documents have the following form:

1
2
3
command << token
text
token

For example following script will feed the whole text to cat. As a result whole text will
be printed as it is into the shell.

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

cat << __EOF__
#include <stdio.h>

int main() {
printf("hello, world!\n");
return 0;
}
__EOF__
  • if <<- is used insted of <<, leading tabs will be ignored.
  • Can be used for multiline comment:
1
2
3
4
5
6
7
8
9
#!/bin/bash

<< __TOKEN__
This will be ignored
This line too
And this
__TOKEN__

echo "hello, world!"

Output:

1
2
3
$ ./script.sh
hello, world!
$

Variables

When variable isn’t set or have empty string default value can be set.

1
2
3
#!/bin/bash

arg1=${1:-"dfile.txt"}

Conditional Statements

Following example will show conditional statements in shell scripting

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

# Structure
#
# if [ Expression ]; then
# do something
# elif [ Expression ]; then
# do something else
# else
# do something else
# fi

number=2

if [ $number -lt "2" ]; then
echo "Less than 2"
elif [ $number -gt "2" ]; then
echo "Greater than 2"
else
echo "Equal to 2"
fi

File expressions can be used to do different tests on file/directory

1
2
3
4
5
6
7
8
#!/bin/bash

FILE_NAME=$HOME/hello.o

# Remove file if exists
if [ -e "$FILE_NAME" ]; then # quotation used so that empty variable don't cause error
rm $FILE_NAME
fi

TODO: String expressions and regular expression matching. [[ ]] and (()).

To see how to write the conditional expressions see man test.

case Statement

case statements has the following form:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case $variable in
pattern1)
do something
;;

pattern2)
do something else
;;

pattern3 | pattern4)
do third important work
;;

*)
do another thing
;;
esac
  • | matches multiple patterns.
  • * default action if no pattern matches.

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

# A program to do some usefull things with unix tools

TOOL=shell

case $TOOL in
shell)
echo "Throw into the sea."
;;

strip)
echo "Jump into the water."
;;

time)
echo "Jump in a black hole"
;;

sleep)
echo "Now do a interstellar travel"
;;

*)
echo "You are in a limbo"
;;
esac

Looping

For Loop

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# Structure of the for loop
#
# for $variable in sequence; do
# something with the variables
# done

for f in $(ls); do
echo $f
done

While Loop

Executes while a condition is true.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# Structure of while loop
#
# while [ Expression ]; do
# do something
# done

number=0

while [ $number -lt 10 ]; do
echo "Number: $number"
number=$((number + 1))
done

Until

Executes until a condition is true.

1
2
3
4
5
6
number=0

until [ $number -gt 10 ]; do
echo "Number $number"
number=$((number + 1))
done

break and continue

Like any other programming languages break and continue
statement can be applied in a loop to break the loop or continue
the loop on some condition.

Array

Arrays are defined as array_name=(0 "name" 4)
where array_name is the name of the array
an 0, name are the elements of the array.
Array can be subscripted and iterated in following
way:

1
2
3
4
5
6
7
8
9
10
array_name=(0 "name" 4)

# Print first element of the array
echo ${array_name[1]}

# Iterating through the array
# Print all the elements of the array
for elem in ${array_name[@]}; do
echo $elem
done

Functions

Structure of a function in shell script is following:

1
2
3
4
5
6
7
func_name () {
commands
return
}

# Function call
func_name

Example:

1
2
3
4
5
6
7
8
#!/bin/bash

get_hostname () {
echo $HOSTNAME
return
}

get_hostname
  • Functions must be defined before they are called.
  • In shell all variables are global. A local variable can be created using local command.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

ID=0

get_hostname () {
local ID
ID=1
echo $HOSTNAME
echo "local ID before calling function: ${ID}"
return
}

echo "global ID before calling function: ${ID}"
get_hostname
echo "global ID after calling function: ${ID}"

Command Line Arguments

sample code:

1
2
3
4
5
6
7
#!/bin/bash

echo "Number of arguments: '$#'"
echo "All arguments(space seperated): '$@'"
echo "Program name: '$0'"
echo "Argument 1: '$1'"
echo "Argument 2: '$2'"

sample output:

1
2
3
4
5
Number of arguments: '2'
All arguments(space seperated): 'hello world'
Program name: './cmd.sh'
Argument 1: 'hello'
Argument 2: 'world'

sample code:

1
2
3
4
5
6
7
8
echo "Number of arguments given: $#"

number=1
while [ "$1" != "" ]; do
echo "Argument $number: $1"
number=$((number + 1)) # number+=1
shift
done

sample output:

1
2
3
Number of arguments given: '2'
Argument 1: hello
Argument 2: world

Exit Status

1
2
touch
echo $?

Index

Structure

1
awk 'BEGIN{ACTION} PATTERN{ACTION} END{ACTION}'

Printing

1
2
3
4
awk 'BEGIN{print "hello", "world"}'   # hello world
awk 'BEGIN{print "hello" "world"}' # helloworld
awk 'BEGIN{print "hello"; print "world"}' # hello\nworld
awk 'BEGIN{printf "%s","hello"; printf "%s","world"}' # helloworld

Using bash variable inside awk

Quoting

1
2
3
4
#!/bin/bash

var=4
awk 'BEGIN{print '$var'}'

Commandline

1
2
3
4
#!/bin/bash

var=4
awk -v v=$var 'BEGIN{print v}'
1
2
3
4
5
#!/bin/bash

var=4
car=5
awk -v v=$var -v c=$car 'BEGIN{print v,c}'

Summary of programming constructs in awk

1
2
3
4
5
6
7
8
9
10
11
12
if ( conditional ) statement [ else statement ]
while ( conditional ) statement
for ( expression ; conditional ; expression ) statement
for ( variable in array ) statement
break
continue
{ [ statement ] ...}
variable=expression
print [ expression-list ] [ > expression ]
printf format [ , expression-list ] [ > expression ]
next
exit

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

echo "AWK example:"

awk '
BEGIN{
start=1;
end=10;

for(i=start; i <= end; i++) {
if (i % 2 == 0) {
print i;
}
}
}
'

Regular Expression match

~ can be used to check if a string matches a regular expression. And !~ will evaluate to true if a string
doesn’t match with a regular expression.

1
2
3
#!/bin/bash

awk 'BEGIN{word="other";if(word ~ /the/){print "match"}}'

AWK builtin variables

  • FS - Input field seperator
  • OFS - Output field seperator
  • RS - Inpute record field seperator
  • ORS - Output record field seperator
  • NF - Number of fields/columns
  • NR - record number/line number
  • FILENAME - Name of the file being read

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
/* *******************************************************************************************
* GLOBAL CONFIG
* Vue.config is an object containing Vue’s global configurations.
* You can modify its properties listed below before bootstrapping your application.
* https://vuejs.org/v2/api/#Global-Config
* ******************************************************************************************* */


// Configure whether to allow vue-devtools inspection
Vue.config.devtools = true

// Enable component init, compile, render and patch performance tracing in the browser devtool timeline.
Vue.config.performance = true

// Prevent the production tip on Vue startup.
Vue.config.productionTip = false

// Suppress all Vue logs and warnings
Vue.config.silent = false

// Make Vue ignore custom elements defined outside of Vue
Vue.config.ignoredElements = [
'my-custom-web-component',
'another-web-component',
/^ion-/
]

// Define custom key alias(es) for v-on.
Vue.config.keyCodes = {
v: 86,
f1: 112,
// camelCase won`t work
mediaPlayPause: 179,
// instead you can use kebab-case with double quotation marks
"media-play-pause": 179,
up: [38, 87]
}

// Assign a handler for uncaught errors during component render function and watchers.
Vue.config.errorHandler = function (err, vm, info) {
// handle error
// `info` is a Vue-specific error info, e.g. which lifecycle hook
// the error was found in. Only available in 2.2.0+
}

// Define custom merging strategies for options
Vue.config.optionMergeStrategies._my_option = function (parent, child, vm) {
return child + 1
}

// Assign a custom handler for runtime Vue warnings.
// Note this only works during development and is ignored in production.
Vue.config.warnHandler = function (msg, vm, trace) {
// `trace` is the component hierarchy trace
}


/* *******************************************************************************************
* GLOBAL API
* https://vuejs.org/v2/api/#Global-API
* ******************************************************************************************* */


Vue.version // Provides the installed version of Vue as a string.

Vue.extend(options) // Create a “subclass” of the base Vue constructor.
Vue.mixin( mixin ) // Apply a mixin globally, which affects every Vue instance created afterwards.
Vue.nextTick([callback, context]) // Defer the callback to be executed after the next DOM update cycle.
Vue.use(plugin) // Install a Vue.js plugin. If the plugin is an Object, it must expose an install method.

Vue.set(target, key, value) // Set a property on an object. If the object is reactive, ensure the property is created as a reactive property and trigger view updates.
Vue.delete(target, key) // Delete a property on an object. If the object is reactive, ensure the deletion triggers view updates.

// Register or retrieve a global directive.
Vue.directive('my-directive', {
bind: function () {},
inserted: function () {},
update: function () {},
componentUpdated: function () {},
unbind: function () {}
})

// Register (function directive)
Vue.directive('my-directive', function () {
// This will be called as `bind` and `update`
})

// Getter, return the directive definition if registered
var myDirective = Vue.directive('my-directive')

// Register a global filter
Vue.filter('my-filter', function (value) { })

// Getter, return the filter if registered
var myFilter = Vue.filter('my-filter')

// Register an extended constructor
Vue.component('my-component', Vue.extend({ }))

// Register an options object (automatically call Vue.extend)
Vue.component('my-component', { })

// Retrieve a registered component (always return constructor)
var MyComponent = Vue.component('my-component')

Vue.compile(template) // Compiles a template string into a render function


/* *******************************************************************************************
* OPTIONS > DATA
* https://vuejs.org/v2/api/#Options-Data
* ******************************************************************************************* */


new Vue({
// A list/hash of attributes that are exposed to accept data from the parent component.
// It has an Array-based simple syntax and an alternative Object-based syntax that allows
// advanced configurations such as type checking, custom validation and default values.
props: {
height: Number,
age: {
type: Number,
default: 0,
required: true,
validator: function (value) {
return value >= 0
}
}
},

// Primarily intended to make unit testing easier
propsData: {
age: 12
},

// The data object for the Vue instance.
// Vue will recursively convert its properties into getter/setters to make it “reactive”.
// Note: you should not use an arrow function with the data property
data () {
return {
a: 1,
b: 2
}
},

// Computed properties to be mixed into the Vue instance.
// All getters and setters have their this context automatically bound to the Vue instance.
// Computed properties are cached, and only re-computed on reactive dependency changes.
// Note that if a certain dependency is out of the instance’s scope (i.e. not reactive),
// the computed property will not be updated.
computed: {
// Note: you should not use an arrow function to define a computed property.
aDouble: function () {
return this.a * 2
},
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v - 1
}
}
},

// An object where keys are expressions to watch and values are the corresponding callbacks.
// The value can also be a string of a method name, or an Object that contains additional options.
// The Vue instance will call $watch() for each entry in the object at instantiation.
watch: {
// Note: you should not use an arrow function to define a watcher.
a: function (val, oldVal) {
console.log('new: %s, old: %s', val, oldVal)
},
// String method name
b: 'someMethod',
// Deep watcher
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// The callback will be called immediately after the start of the observation
d: {
handler: function (val, oldVal) { /* ... */ },
immediate: true
}
},

// Methods to be mixed into the Vue instance. You can access these methods directly on the VM instance,
// or use them in directive expressions. All methods will have their this context automatically bound to
// the Vue instance.
methods: {
// Note: you should not use an arrow function to define a method.
plus () {
this.a++
}
}
})


/* *******************************************************************************************
* OPTIONS > DOM
* https://vuejs.org/v2/api/#Options-DOM
* ******************************************************************************************* */


new Vue({
// Provide the Vue instance an existing DOM element to mount on.
// It can be a CSS selector string or an actual HTMLElement.
// After the instance is mounted, the resolved element will be accessible as vm.$el.
el: '#example',

// A string template to be used as the markup for the Vue instance.
// The template will replace the mounted element.
// Any existing markup inside the mounted element will be ignored,
// unless content distribution slots are present in the template.
// If the string starts with # it will be used as a querySelector and
// use the selected element’s innerHTML as the template string. This
// allows the use of the common <script type="x-template"> trick to include templates.
template: `
<div class="checkbox-wrapper" @click="check">
<div :class="{ checkbox: true, checked: checked }"></div>
<div class="title">{{ title }}</div>
</div>
`,

// An alternative to string templates allowing you to leverage the full programmatic power of JavaScript.
// The render function receives a createElement method as it’s first argument used to create VNodes.
// If the component is a functional component, the render function also receives an extra argument context,
// which provides access to contextual data since functional components are instance-less.
render (createElement) {
// create kebabCase id
var headingId = getChildrenTextContent(this.$slots.default)
.toLowerCase()
.replace(/\W+/g, '-')
.replace(/(^\-|\-$)/g, '')

return createElement(
'h' + this.level,
[
createElement('a', {
attrs: {
name: headingId,
href: '#' + headingId
}
}, this.$slots.default)
]
)
},

// Provide an alternative render output when the default render function encounters an error.
// The error will be passed to renderError as the second argument.
// This is particularly useful when used together with hot-reload.
renderError (createElement, err) {
return createElement('pre', { style: { color: 'red' }}, err.stack)
}
})


/* *******************************************************************************************
* OPTIONS > LIFECYCLE HOOKS
* https://vuejs.org/v2/api/#Options-Lifecycle-Hooks
* ******************************************************************************************* */


// All lifecycle hooks automatically have their this context bound to the instance,
// so that you can access data, computed properties, and methods. This means you should not
// use an arrow function to define a lifecycle method (e.g. created: () => this.fetchTodos()).
// The reason is arrow functions bind the parent context, so this will not be the Vue instance as
// you expect and this.fetchTodos will be undefined.

new Vue({
// Called synchronously immediately after the instance has been initialized,
// before data observation and event/watcher setup.
beforeCreate () {
console.log('The instance has been initialized')
},

// Called synchronously after the instance is created. At this stage, the instance has
// finished processing the options which means the following have been set up: data observation,
// computed properties, methods, watch/event callbacks. However, the mounting phase has not been
// started, and the $el property will not be available yet.
created () {
console.log('The instance has been created')
},

// Called right before the mounting begins: the render function
// is about to be called for the first time.
beforeMount () {
console.log('The instance is about to be mounted')
},

// Called after the instance has been mounted, where el is replaced by the newly created vm.$el.
// If the root instance is mounted to an in-document element, vm.$el will also be in-document when
// mounted is called.
mounted () {
console.log('The instance has been mounted')

// Note that mounted does not guarantee that all child components have also been mounted.
// If you want to wait until the entire view has been rendered, you can use vm.$nextTick
// inside of mounted:
this.$nextTick(function () {
// Code that will run only after the
// entire view has been rendered
})
},

// Called when the data changes, before the virtual DOM is re-rendered and patched.
// You can perform further state changes in this hook and they will not trigger additional re-renders.
// This hook is not called during server-side rendering.
beforeUpdate () {
console.log('The instance is about to be re-rendered and patched')
},

// The component’s DOM will have been updated when this hook is called, so you can perform DOM-dependent
// operations here. However, in most cases you should avoid changing state inside the hook. To react
// to state changes, it’s usually better to use a computed property or watcher instead.
updated () {
console.log('The instance has been re-rendered and patched')

// Note that updated does not guarantee that all child components have also been re-rendered.
// If you want to wait until the entire view has been re-rendered, you can use vm.$nextTick
// inside of updated:
this.$nextTick(function () {
// Code that will run only after the
// entire view has been re-rendered
})
},

// Called when a kept-alive component is activated.
activated () {
console.log('Component activated')
},

// Called when a kept-alive component is deactivated.
deactivated () {
console.log('Component deactivated')
},

// Called right before a Vue instance is destroyed.
// At this stage the instance is still fully functional.
beforeDestroy () {
console.log('The instance is about to be destroyed')
},

// Called after a Vue instance has been destroyed.
// When this hook is called, all directives of the Vue instance have been unbound,
// all event listeners have been removed, and all child Vue instances have also been destroyed.
destroyed () {
console.log('The instance has been destroyed')
},

// Called when an error from any descendent component is captured.
// The hook receives three arguments: the error, the component instance that triggered the error,
// and a string containing information on where the error was captured.
// The hook can return false to stop the error from propagating further.
errorCaptured (error, vm, info) {
console.log(`The error (${error}) has been captured for ${vm}: ${info}`)

// An errorCaptured hook can return false to prevent the error from propagating further.
// This is essentially saying “this error has been handled and should be ignored.”
// It will prevent any additional errorCaptured hooks or the global config.errorHandler
// from being invoked for this error.
return false
},
})


/* *******************************************************************************************
* OPTIONS > ASSETS
* https://vuejs.org/v2/api/#Options-Assets
* ******************************************************************************************* */


new Vue({
// A hash of directives to be made available to the Vue instance.
directives: {
myDirective: {
// Called only once, when the directive is first bound to the element.
// This is where you can do one-time setup work.
bind: function (el, binding, vnode, oldVnode) {
console.log('The directive is first bound to the element.')
},

// Called when the bound element has been inserted into its parent node
// (this only guarantees parent node presence, not necessarily in-document).
inserted: function (el, binding, vnode, oldVnode) {
console.log('The bound element has been inserted into its parent node.')
},

// Called after the containing component’s VNode has updated, but possibly before its
// children have updated. The directive’s value may or may not have changed, but you can
// skip unnecessary updates by comparing the binding’s current and old values (see below
// on hook arguments).
update: function (el, binding, vnode, oldVnode) {
console.log('The component VNode has updated.')
},

// Called after the containing component’s VNode and the VNodes of its children have updated.
componentUpdated: function (el, binding, vnode, oldVnode) {
console.log('The component’s VNode and the VNodes of its children have updated.')
},

// Called only once, when the directive is unbound from the element.
unbind: function (el, binding, vnode, oldVnode) {
console.log('The directive is unbound from the element.')
},
}
},

// A hash of filters to be made available to the Vue instance.
filters: {
myFilter: function (value) {
console.log('Do your computations and return something to display.')
}
}
})


/* *******************************************************************************************
* OPTIONS > COMPOSITION
* https://vuejs.org/v2/api/#Options-Composition
* ******************************************************************************************* */


new Vue({
// Specify the parent instance for the instance to be created. Establishes a parent-child
// relationship between the two. The parent will be accessible as this.$parent for the child,
// and the child will be pushed into the parent’s $children array.
parent: vueInstance,

// The mixins option accepts an array of mixin objects. These mixin objects can contain instance
// options like normal instance objects, and they will be merged against the eventual options
// using the same option merging logic in Vue.extend(). e.g. If your mixin contains a created
// hook and the component itself also has one, both functions will be called.
// Mixin hooks are called in the order they are provided, and called before the component’s own hooks.
mixins: [mixin],

// Allows declaratively extending another component (could be either a plain options object or a
// constructor) without having to use Vue.extend. This is primarily intended to make it easier to
// extend between single file components. This is similar to mixins, the difference being that
// the component’s own options takes higher priority than the source component being extended.
extends: ObjectOrFunction,
})


/* *******************************************************************************************
* OPTIONS > MISC
* https://vuejs.org/v2/api/#Options-Lifecycle-Hooks
* ******************************************************************************************* */


new Vue({
// Allow the component to recursively invoke itself in its template.
// Note that when a component is registered globally with Vue.component(), the global ID is
// automatically set as its name.
// Another benefit of specifying a name option is debugging. Named components result in more
// helpful warning messages. Also, when inspecting an app in the vue-devtools, unnamed components
// will show up as <AnonymousComponent>, which isn’t very informative. By providing the name
// option, you will get a much more informative component tree.
name: 'myComponent',

// Change the plain text interpolation delimiters.
delimiters: ['${', '}'],

// Causes a component to be stateless (no data) and instanceless (no this context). They are
// only a render function that returns virtual nodes making them much cheaper to render.
functional: true,

// By default, parent scope attribute bindings that are not recognized as props will
// “fallthrough” and be applied to the root element of the child component as normal HTML
// attributes. When authoring a component that wraps a target element or another component,
// this may not always be the desired behavior. By setting inheritAttrs to false, this default
// behavior can be disabled. The attributes are available via the $attrs instance property
// (also new in 2.4) and can be explicitly bound to a non-root element using v-bind.
// Note: this option does not affect class and style bindings.
inheritAttrs: true,

// When set to true, will preserve and render HTML comments found in templates. The default
// behavior is discarding them.
comments: true,
})


/* *******************************************************************************************
* INSTANCE PROPERTIES
* https://vuejs.org/v2/api/#Instance-Properties
* ******************************************************************************************* */


// The data object that the Vue instance is observing.
// The Vue instance proxies access to the properties on its data object.
vm.$data

// An object representing the current props a component has received.
// The Vue instance proxies access to the properties on its props object.
vm.$props

// The root DOM element that the Vue instance is managing.
vm.$el

// The instantiation options used for the current Vue instance.
// This is useful when you want to include custom properties in the options:
vm.$options

// The parent instance, if the current instance has one.
vm.$parent

// The root Vue instance of the current component tree.
// If the current instance has no parents this value will be itself.
vm.$root

// The direct child components of the current instance.
// Note there’s no order guarantee for $children, and it is not reactive.
// If you find yourself trying to use $children for data binding,
// consider using an Array and v-for to generate child components,
// and use the Array as the source of truth.
vm.$children

// Used to programmatically access content distributed by slots.
// Each named slot has its own corresponding property (e.g. the contents of slot="foo" will
// be found at vm.$slots.foo). The default property contains any nodes not included in a named slot.
// Accessing vm.$slots is most useful when writing a component with a render function.
vm.$slots

// Used to programmatically access scoped slots. For each slot, including the default one, the
// object contains a corresponding function that returns VNodes.
// Accessing vm.$scopedSlots is most useful when writing a component with a render function.
vm.$scopedSlots

// An object that holds child components that have ref registered.
vm.$refs

// Whether the current Vue instance is running on the server.
vm.$isServer

// Contains parent-scope attribute bindings (except for class and style) that are not recognized
// (and extracted) as props. When a component doesn’t have any declared props, this essentially
// contains all parent-scope bindings (except for class and style), and can be passed down to an
// inner component via v-bind="$attrs" - useful when creating higher-order components.
vm.$attrs

// Contains parent-scope v-on event listeners (without .native modifiers).
// This can be passed down to an inner component via v-on="$listeners" - useful when creating
// higher-order components.
vm.$listeners


/* *******************************************************************************************
* INSTANCE METHODS > DATA
* https://vuejs.org/v2/api/#Instance-Methods-Data
* ******************************************************************************************* */


// Watch an expression or a computed function on the Vue instance for changes.
// The callback gets called with the new value and the old value.
// The expression only accepts dot-delimited paths.
// For more complex expressions, use a function instead.
var unwatch = vm.$watch('a.b.c', function (newVal, oldVal) {
// do something
}, {
// To also detect nested value changes inside Objects, you need to pass in deep: true
// in the options argument. Note that you don’t need to do so to listen for Array mutations.
deep: true,

// Passing in immediate: true in the option will trigger the callback immediately with the
// current value of the expression:
immediate: true
})

// later, teardown the watcher
unwatch()

// This is the alias of the global Vue.set.
vm.$set(target,key, value)

// This is the alias of the global Vue.delete.
vm.$delete(target, key)


/* *******************************************************************************************
* INSTANCE METHODS > EVENTS
* https://vuejs.org/v2/api/#Instance-Methods-Events
* ******************************************************************************************* */


// Listen for a custom event on the current vm. Events can be triggered by vm.$emit.
// The callback will receive all the additional arguments passed into these event-triggering methods.
vm.$on(event, callback)

// Listen for a custom event, but only once.
// The listener will be removed once it triggers for the first time.
vm.$once(event, callback)

// Remove custom event listener(s).
// If no arguments are provided, remove all event listeners;
// If only the event is provided, remove all listeners for that event;
// If both event and callback are given, remove the listener for that specific callback only.
vm.$off([event, callback])

// Trigger an event on the current instance.
// Any additional arguments will be passed into the listener’s callback function.
vm.$emit(event, […args])


/* *******************************************************************************************
* INSTANCE METHODS > LIFECYCLE
* https://vuejs.org/v2/api/#Instance-Methods-Lifecycle
* ******************************************************************************************* */


// If a Vue instance didn’t receive the el option at instantiation, it will be in “unmounted”
// state, without an associated DOM element. vm.$mount() can be used to manually start the mounting
// of an unmounted Vue instance.
vm.$mount([elementOrSelector])

// Force the Vue instance to re-render. Note it does not affect all child components,
// only the instance itself and child components with inserted slot content.
vm.$forceUpdate()

// Defer the callback to be executed after the next DOM update cycle.
// Use it immediately after you’ve changed some data to wait for the DOM update.
// This is the same as the global Vue.nextTick, except that the callback’s this context is
// automatically bound to the instance calling this method.
vm.$nextTick([callback])

// Completely destroy a vm. Clean up its connections with other existing vms, unbind all its
// directives, turn off all event listeners.
// Triggers the beforeDestroy and destroyed hooks.
vm.$destroy()


/* *******************************************************************************************
* DIRECTIVES
* https://vuejs.org/v2/api/#Directives
* ******************************************************************************************* */


// <!-- Updates the element’s textContent. -->
// <!-- If you need to update the part of textContent, you should use {{ Mustache }} interpolations. -->

// <span v-text="msg"></span>


// <!-- Updates the element’s innerHTML. Note that the contents are inserted as plain HTML -->
// <!-- they will not be compiled as Vue templates. If you find yourself trying to compose templates -->
// <!-- using v-html, try to rethink the solution by using components instead. -->

// <div v-html="html"></div>


// <!-- Toggle’s the element’s display CSS property based on the truthy-ness of the expression value. -->
// <!-- This directive triggers transitions when its condition changes. -->

// <div v-show="condition"></div>


// <!-- Conditionally render the element based on the truthy-ness of the expression value. -->
// <!-- The element and its contained directives / components are destroyed and re-constructed -->
// <!-- during toggles. If the element is a <template> element, its content will be extracted as -->
// <!-- the conditional block. This directive triggers transitions when its condition changes. -->

// <div v-if="condition"></div>
// <div v-else-if="anotherCondition"></div>
// <div v-else></div>


// <!-- Render the element or template block multiple times based on the source data. -->
// <!-- The directive’s value must use the special syntax alias in expression to provide an alias -->
// <!-- for the current element being iterated on: -->

// <div v-for="item in items">{{ item.text }}</div>


// <!-- Alternatively, you can also specify an alias for the index (or the key if used on an Object): -->

// <div v-for="(item, index) in items"></div>
// <div v-for="(val, key) in object"></div>
// <div v-for="(val, key, index) in object"></div>


// <!-- Attaches an event listener to the element. The event type is denoted by the argument. -->
// <!-- The expression can be a method name, an inline statement, or omitted if there are modifiers present. -->

// .stop: Call event.stopPropagation().
// .prevent: Call event.preventDefault().
// .capture: Add event listener in capture mode.
// .self: Only trigger handler if event was dispatched from this element.
// .{keyCode | keyAlias}: Only trigger handler on certain keys.
// .native: Listen for a native event on the root element of component.
// .once: Trigger handler at most once.
// .left: (2.2.0+) only trigger handler for left button mouse events.
// .right: (2.2.0+) only trigger handler for right button mouse events.
// .middle: (2.2.0+) only trigger handler for middle button mouse events.
// .passive: (2.3.0+) attaches a DOM event with { passive: true }.

// Method handler: <button v-on:click="doThis"></button>
// Object syntax (2.4.0+): <button v-on="{ mousedown: onMouseDown, mouseup: onMouseUp }"></button>
// Inline statement: <button v-on:click="doThat('hello', $event)"></button>
// Shorthand: <button @click="doThis"></button>
// Stop propagation: <button @click.stop="doThis"></button>
// Prevent default: <button @click.prevent="doThis"></button>
// Prevent default without expression: <form @submit.prevent></form>
// Chain modifiers: <button @click.stop.prevent="doThis"></button>
// Key modifier using keyAlias: <input @keyup.enter="onEnter">
// Key modifier using keyCode: <input @keyup.13="onEnter">
// The click event will be triggered at most once: <button v-on:click.once="doThis"></button>


// <!-- Dynamically bind one or more attributes, or a component prop to an expression. -->
// <!-- When used to bind the class or style attribute, it supports additional value types such as -->
// <!-- Array or Objects. See linked guide section below for more details. -->

// .prop: Bind as a DOM property instead of an attribute.
// .camel: (2.1.0+) transform the kebab-case attribute name into camelCase.
// .sync: (2.3.0+) a syntax sugar that expands into a v-on handler for updating the bound value.

// Bind an attribute: <img v-bind:src="imageSrc">
// Shorthand: <img :src="imageSrc">
// With inline string concatenation: <img :src="'/path/to/images/' + fileName">
// Class binding: <div :class="{ red: isRed }"></div>
// Style binding: <div :style="{ fontSize: size + 'px' }"></div>
// Binding an object of attributes <div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
// DOM attribute binding with prop modifier: <div v-bind:text-content.prop="text"></div>
// Prop binding. "prop" must be declared in my-component: <my-component :prop="someThing"></my-component>
// Pass down parent props in common with a child component: <child-component v-bind="$props"></child-component>
// XLink: <svg><a :xlink:special="foo"></a></svg>


// <!-- Create a two-way binding on a form input element or a component. -->
// <!-- For detailed usage and other notes, see the Guide section linked below. -->

// .lazy: Listen to change events instead of input
// .number: Cast input string to numbers
// .trim: Trim input

// <input v-model="message" placeholder="edit me">
// <textarea v-model="message" placeholder="add multiple lines"></textarea>
// <input type="checkbox" id="checkbox" v-model="checked">


// <!-- Skip compilation for this element and all its children. -->
// <!-- You can use this for displaying raw mustache tags. -->
// <!-- Skipping large numbers of nodes with no directives on them can also speed up compilation. -->

// <span v-pre>{{ this will not be compiled }}</span>


// <!-- This directive will remain on the element until the associated Vue instance finishes -->
// <!-- compilation. Combined with CSS rules such as [v-cloak] { display: none }, this directive -->
// <!-- can be used to hide un-compiled mustache bindings until the Vue instance is ready. -->

// <div v-cloak>{{ message }}</div>
// [v-cloak] { display: none; }


// <!-- Render the element and component once only. On subsequent re-renders, the element/component -->
// <!-- and all its children will be treated as static content and skipped. This can be used to -->
// <!-- optimize update performance. -->

// <span v-once>This will never change: {{msg}}</span>
// <my-component v-once :comment="msg"></my-component>


/* *******************************************************************************************
* SPECIAL ATTRIBUTES
* https://vuejs.org/v2/api/#Special-Attributes
* ******************************************************************************************* */


// <!-- The key special attribute is primarily used as a hint for Vue’s virtual DOM algorithm to -->
// <!-- identify VNodes when diffing the new list of nodes against the old list. Without keys, Vue uses -->
// <!-- an algorithm that minimizes element movement and tries to patch/reuse elements of the same type -->
// <!-- in-place as much as possible. With keys, it will reorder elements based on the order change of -->
// <!-- keys, and elements with keys that are no longer present will always be removed/destroyed. -->

// <ul><li v-for="item in items" :key="item.id">...</li></ul>
// <transition><span :key="text">{{ text }}</span></transition>


// <!-- ref is used to register a reference to an element or a child component. The reference will be -->
// <!-- registered under the parent component’s $refs object. If used on a plain DOM element, the -->
// <!-- reference will be that element; if used on a child component, the reference will be component instance: -->

// <!-- vm.$refs.p will be the DOM node -->
// <p ref="p">hello</p>

// <!-- vm.$refs.child will be the child comp instance -->
// <child-comp ref="child"></child-comp>


// <!-- Used on content inserted into child components to indicate which named slot the content belongs to. -->
// <!-- Child markup: -->
// <header><slot name="header"></slot></header>
// <!-- Parent markup: -->
// <app-layout><h1 slot="header">Here might be a page title</h1></app-layout>


// <!-- Used for dynamic components and to work around limitations of in-DOM templates. -->
// <component :is="currentView"></component>

Shortcuts

Linux

General

  • Ctrl+Shift+P, F1: Show Command Palette
  • Ctrl+Shift+T: Open last closed tab
  • Ctrl+P: Quick Open, Go to File
  • Ctrl+Shift+N: New window/instance
  • Ctrl+W: Close window/instance
  • Ctrl+,: User Settings
  • Ctrl+K, Ctrl+S: Keyboard Shortcuts

Basic editing

  • Ctrl+X: Cut line (empty selection)
  • Ctrl+C: Copy line (empty selection)
  • Ctrl+↓/↑: Move line down / up
  • Ctrl+Shift+K: Delete line
  • Ctrl+Enter / Ctrl+Shift+Enter: Insert line below / above
  • Ctrl+Shift+\: Jump to matching bracket
  • Ctrl+] / Ctrl+[: Indent / Outdent line
  • Ctrl+Home / End: Go to beginning / end of file
  • Ctrl+↑ / ↓: Scroll line up / down
  • Alt+PgUp / PgDn: Scroll page up / down
  • Ctrl+Shift+[ / ]: Fold / unfold region
  • Ctrl+K, Ctrl+[ / ]: Fold / unfold all subregions
  • Ctrl+K, Ctrl+0 / Ctrl+K, Ctrl+J: Fold /Unfold all regions
  • Ctrl+K, Ctrl+C: Add line comment
  • Ctrl+K, Ctrl+U: Remove line comment
  • Ctrl+/: Toggle line comment
  • Ctrl+Shift+A: Toggle block comment
  • Alt+Z: Toggle word wrap

Useful Extensions

HTML & CSS

  • CSScomb: Coding style formatter for CSS, Less, SCSS and Saas.

  • Puglint: Linter and style checker for pug.

  • Sass: Indented Sass syntax highlighting, autocomplete & snippets.

  • SCSS IntelliSense: Advanced autocompletion and refactoring support for SCSS.

  • XML Format: Format XML documents.

JavaScript, Node & NPM

  • Import Cost: This extension will display inline in the editor the size of the imported package.

  • ESLint: Integrates ESLint into VS Code

  • NPM: NPM support for VS Code.

  • NPM Intellisense: Visual Studio Code plugin that autocompletes NPM modules in import statements.

  • Version Lens: Shows the latest version for each package using code lens.

  • Vetur: Vue tooling for VS Code.

PHP

Perl

  • Perl: Code intelligence for the Perl language.

  • Perl Toolbox: Perl Toolbox for linting and syntax checking for Perl.

  • Perl Moose: Perl Moose syntax highlight support for Visual Studio Code.

Git

  • Git History: View git log, file history, compare branches or commits.

  • Gitignore: An extension for Visual Studio Code that assists you in working with .gitignore files.

  • GitLens: Visualize code authorship, code lens, seamlessly Git blame annotations and more.

  • Gitmoji: An emoji tool for your git commit messages.

Themes

Handy

My Settings

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{
// Controls the font size in pixels
"editor.fontSize": 14,

// Render vertical rulers after a certain number of
// monospace characters. Use multiple values for multiple
// rulers. No rulers are drawn if array is empty
"editor.rulers": [100],

// The number of spaces a tab is equal to
"editor.tabSize": 2,

"[python]": {
"editor.tabSize": 4
},

// Controls the line height
"editor.lineHeight": 22,

// Controls the font family
"editor.fontFamily": "Fira Code",

// Enables font ligatures
"editor.fontLigatures": true,

// Controls whether snippets are shown with other suggestions and how they are sorted.
"editor.snippetSuggestions": "top",

// Ignore extension recommendations
"extensions.ignoreRecommendations": false,

// Controls auto save of dirty files
"files.autoSave": "afterDelay",

// Controls the delay in ms after which a dirty file is saved automatically
"files.autoSaveDelay": 1000,

// Configure glob patterns for excluding files and folders
"files.exclude": {
".yarn": true,
"**/*.pyc": true
},

// Insert a final new line at the end of the file when saving it
"files.insertFinalNewline": true,

// Confirm before synchronizing git repositories
"git.confirmSync": false,

// Commit all changes when there are no staged changes
"git.enableSmartCommit": true,

// Whether to lint Python files using pylint
"python.linting.pylintEnabled": false,

// Whether to lint Python files using flake8
"python.linting.flake8Enabled": true,

// Configure glob patterns for excluding files and folders in
// searches. Inherits all glob patterns from the files.exclude setting.
"search.exclude": {
"**/.git": true,
"**/.nuxt": true,
"**/build": true,
"**/data": true,
"**/dist": true,
"**/env": true
},

// Adjust the zoom level of the window. The original size is 0
// and each increment above (e.g. 1) or below (e.g. -1) represents
// zooming 20% larger or smaller. You can also enter decimals to
// adjust the zoom level with a finer granularity.
"window.zoomLevel": 0,

// Overrides colors from the currently selected color theme.
"workbench.colorCustomizations": {
"statusBar.background": "#8252be",
"statusBar.foreground": "#eeffff",
"titleBar.activeBackground": "#282b3c",
"titleBar.activeForeground": "#eeefff"
},

// Specifies the color theme used in the workbench
"workbench.colorTheme": "Material Palenight",

// Specifies the icon theme used in the workbench
"workbench.iconTheme": "material-icon-theme",

// Controls font aliasing method in the workbench
"workbench.fontAliasing": "antialiased",
"explorer.confirmDragAndDrop": false
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667


##############################################################################
# VIM CHEATSHEET
# WEBSITE: http://www.vim.org/
# DOCUMENTATION: https://vim.sourceforge.io/docs.php
##############################################################################


##############################################################################
# CURSOR MOVEMENTS
##############################################################################


h move left
j move down
k move up
l move right
w jump by start of words (punctuation considered words)
W jump by words (spaces separate words)
e jump to end of words (punctuation considered words)
E jump to end of words (no punctuation)
b jump backward by words (punctuation considered words)
B jump backward by words (no punctuation)
ge jump backward to end of words
0 (zero) start of line
^ first non-blank character of line
$ end of line
- move line upwards, on the first non blank character
+ move line downwards, on the first non blank character
<enter> move line downwards, on the first non blank character
gg go to first line
G go to last line
ngg go to line n
nG go To line n
:n go To line n
) move the cursor forward to the next sentence.
( move the cursor backward by a sentence.
{ move the cursor a paragraph backwards
} move the cursor a paragraph forwards
]] move the cursor a section forwards or to the next {
[[ move the cursor a section backwards or the previous {
CTRL-f move the cursor forward by a screen of text
CTRL-b move the cursor backward by a screen of text
CTRL-u move the cursor up by half a screen
CTRL-d move the cursor down by half a screen
H move the cursor to the top of the screen.
M move the cursor to the middle of the screen.
L move the cursor to the bottom of the screen.
fx search line forward for 'x'
Fx search line backward for 'x'
tx search line forward before 'x'
Tx search line backward before 'x'


##############################################################################
# BOOKMARKS
##############################################################################


:marks list all the current marks
ma make a bookmark named a at the current cursor position
`a go to position of bookmark a
'a go to the line with bookmark a
`. go to the line that you last edited


##############################################################################
# INSERT MODE
##############################################################################


i start insert mode at cursor
I insert at the beginning of the line
a append after the cursor
A append at the end of the line
o open (append) blank line below current line
O open blank line above current line
Esc exit insert mode


##############################################################################
# EDITING
##############################################################################


r replace a single character (does not use insert mode)
R enter Insert mode, replacing characters rather than inserting
J join line below to the current one
cc change (replace) an entire line
cw change (replace) to the end of word
C change (replace) to the end of line
ct' change (replace) until the ' character (can change ' for any character)
s delete character at cursor and substitute text
S delete line at cursor and substitute text (same as cc)
xp transpose two letters (delete and paste, technically)
u undo
CTRL-r redo
. repeat last command
~ switch case
g~iw switch case of current word
gUiw make current word uppercase
guiw make current word lowercase
gU$ make uppercase until end of line
gu$ make lowercase until end of line
>> indent line one column to right
<< indent line one column to left
== auto-indent current line
ddp swap current line with next
ddkP swap current line with previous
:%retab fix spaces / tabs issues in whole file
:r [name] insert the file [name] below the cursor.
:r !{cmd} execute {cmd} and insert its standard output below the cursor.


##############################################################################
# DELETING TEXT
##############################################################################


x delete current character
X delete previous character
dw delete the current word
dd delete (cut) a line
dt' delete until the next ' character on the line (replace ' by any character)
D delete from cursor to end of line
:[range]d delete [range] lines


##############################################################################
# COPYING AND MOVING TEXT
##############################################################################


yw yank word
yy yank (copy) a line
2yy yank 2 lines
y$ yank to end of line
p put (paste) the clipboard after cursor/current line
P put (paste) before cursor/current line
:set paste avoid unexpected effects in pasting
:registers display the contents of all registers
"xyw yank word into register x
"xyy yank line into register x
:[range]y x yank [range] lines into register x
"xp put the text from register x after the cursor
"xP put the text from register x before the cursor
"xgp just like "p", but leave the cursor just after the new text
"xgP just like "P", but leave the cursor just after the new text
:[line]put x put the text from register x after [line]


##############################################################################
# MACROS
##############################################################################


qa start recording macro 'a'
q end recording macro
@a replay macro 'a'
@: replay last command


##############################################################################
# VISUAL MODE
##############################################################################


v start visual mode, mark lines, then do command (such as y-yank)
V start linewise visual mode
o move to other end of marked area
U upper case of marked area
CTRL-v start visual block mode
O move to other corner of block
aw mark a word
ab a () block (with braces)
ab a {} block (with brackets)
ib inner () block
ib inner {} block
Esc exit visual mode

VISUAL MODE COMMANDS
--------------------

> shift right
< shift left
c change (replace) marked text
y yank (copy) marked text
d delete marked text
~ switch case

VISUAL MODE SHORTCUTS
---------------------

v% selects matching parenthesis
vi{ selects matching curly brace
vi" selects text between double quotes
vi' selects text between single quotes

##############################################################################
# SPELLING
##############################################################################


]s next misspelled word
[s previous misspelled word
zg add word to wordlist
zug undo last add word
z= suggest word


##############################################################################
# EXITING
##############################################################################


:q quit Vim. This fails when changes have been made.
:q! quit without writing.
:cq quit always, without writing.
:w save without exiting.
:wq write the current file and exit.
:wq! write the current file and exit always.
:wq {file} write to {file}. Exit if not editing the last
:wq! {file} write to {file} and exit always.
:[range]wq[!] same as above, but only write the lines in [range].
ZZ write current file, if modified, and exit.
ZQ quit current file and exit (same as ":q!").


##############################################################################
# SEARCH/REPLACE
##############################################################################


/pattern search for pattern
?pattern search backward for pattern
n repeat search in same direction
N repeat search in opposite direction
* search forward, word under cursor
# search backward, word under cursor
set ic ignore case: turn on
set noic ignore case: turn off
:%s/old/new/g replace all old with new throughout file
:%s/old/new/gc replace all old with new throughout file with confirmation
:argdo %s/old/new/gc | wq open multiple files and run this command to replace old
with new in every file with confirmation, save and quit


##############################################################################
# MULTIPLE FILES
##############################################################################


:e filename edit a file in a new buffer
:tabe filename edit a file in a new tab (Vim7, gVim)
:ls list all buffers
:bn go to next buffer
:bp go to previous buffer
:bd delete a buffer (close a file)
:b1 show buffer 1
:b vimrc show buffer whose filename begins with "vimrc"
:bufdo <command> run 'command(s)' in all buffers
:[range]bufdo <command> run 'command(s)' for buffers in 'range'


##############################################################################
# WINDOWS
##############################################################################


:sp f split open f
:vsp f vsplit open f
CTRL-w s split windows
CTRL-w w switch between windows
CTRL-w q quit a window
CTRL-w v split windows vertically
CTRL-w x swap windows
CTRL-w h left window
CTRL-w j down window
CTRL-w k up window
CTRL-w l right window
CTRL-w + increase window height
CTRL-w - decrease window height
CTRL-w < increase window width
CTRL-w > decrease window width
CTRL-w = equal window
CTRL-w o close other windows
zz Centers the window to the current line


##############################################################################
# QUICKFIX WINDOW
##############################################################################


copen open quickfix window
cclose close quickfix window
cc [nr] display error [nr]
cfirst display the first error
clast display the last error
[count]cn display [count] next error
[count]cp display [count] previous error


##############################################################################
# PROGRAMMING
##############################################################################


% show matching brace, bracket, or parenthese
gf edit the file whose name is under or after the cursor
gd when the cursor is on a local variable or function, jump to its declaration
'' return to the line where the cursor was before the latest jump
gi return to insert mode where you inserted text the last time
CTRL-o move to previous position you were at
CTRL-i move to more recent position you were at


##############################################################################
# PLUGINS > ACK
##############################################################################


:Ack Search recursively in directory
o to open (same as enter)
go to preview file (open but maintain focus on ack.vim results)
t to open in new tab
T to open in new tab silently
q to close the quickfix window


##############################################################################
# PLUGINS > CHEAT
##############################################################################


:Cheat open cheat sheet (with autocomplete)
<leader>ch open cheat sheet for word under the cursor


##############################################################################
# PLUGINS > GIST
##############################################################################


:Gist post whole text to gist
:Gist XXXXX get gist XXXXX
:Gist -l list my gists


##############################################################################
# PLUGINS > GUNDO
##############################################################################


:GundoToggle show undo tree


##############################################################################
# PLUGINS > LUSTYJUGGLER
##############################################################################


<Leader>lj show open buffers


##############################################################################
# PLUGINS > NERDCOMMENTER
##############################################################################


<leader>cc comment out line(s)
<leader>c<space> toggle the comment state of the selected line(s)


##############################################################################
# PLUGINS > NERDTREE
##############################################################################


:NERDTreeToggle show / hide file browser
:NERDTreeFind show current file in file browser
:Bookmark name bookmark the current node as "name"

FILE
----

o open in prev window
go preview
t open in new tab
T open in new tab silently
i open split
gi preview split
s open vsplit
gs preview vsplit

DIRECTORY
---------

o open & close node
O recursively open node
x close parent of node
X close all child nodes of current node recursively
e explore selected dir

BOOKMARK
--------

o open bookmark
t open in new tab
T open in new tab silently
D delete bookmark

TREE NAVIGATION
---------------

P go to root
p go to parent
K go to first child
J go to last child
CTRL-j go to next sibling
CTRL-k go to prev sibling

FILESYSTEM
----------

C change tree root to the selected dir
u move tree root up a dir
U move tree root up a dir but leave old root open
r refresh cursor dir
R refresh current root
m show menu
cd change the CWD to the selected dir

TREE FILTERING
--------------

I hidden files
f file filters
F files
B bookmarks

OTHER
-----

q close the NERDTree window
A zoom (maximize-minimize) the NERDTree window
? toggle help


##############################################################################
# PLUGINS > PDV
##############################################################################


CTRL-P generate PHP DOC


##############################################################################
# PLUGINS > PICKACOLOR
##############################################################################


:PickHEX choose color in system color picker


##############################################################################
# PLUGINS > SNIPMATE
##############################################################################


<tab> expand snippet


##############################################################################
# PLUGINS > SPARKUP
##############################################################################


CTRL-e execute sparkup (zen coding expansion)
CTRL-n jump to the next empty tag / attribute


##############################################################################
# PLUGINS > SURROUND
##############################################################################


cs'" change surrounding quotes to double-quotes
cs(} change surrounding parens to braces
cs({ change surrounding parens to braces with space
ds' delete surrounding quotes
dst delete surrounding tags
ysiw[ surround inner word with brackets
vees' surround 2 words (ee) with quotes '


##############################################################################
# PLUGINS > TABULAR
##############################################################################


:Tabularize /, line the selected lines up on the commas


##############################################################################
# PLUGINS > TAGLIST
##############################################################################


:TlistToggle open / close taglist window
<enter> jump to tag or file
<space> display the tag prototype


##############################################################################
# PLUGINS > UNIMPAIRED
##############################################################################


[space new line above
]space new line below
[e exchange line above
]e exchange line below
[x XML encode
]x XML decode (with htmlentities)
[q jump to previous quickfix item
]q jump to next quickfix item
[Q jump to first quickfix item
]Q jump to last quickfix item


##############################################################################
# PLUGINS > VIM-FUGITIVE
##############################################################################


:Git run a git command
:Gstatus git status : - to (un)stage , p to patch, C to commit
:Gcommit git commit
:Gread empty the buffer and revert to the last commit
:Gwrite write the current file and stage the results
:Gmove git mv
:Gremove git rm
:Glog git log
:Gdiff perform a vimdiff against the current file of a certain revision
:Gblame open blame information in a scroll bound vertical splitt
:Gbrowse open github


##############################################################################
# PLUGINS > VIM-MARKDOWN-PREVIEW
##############################################################################


:Mm preview markdown document in webbrowser


##############################################################################
# PLUGINS > VIM-PEEPOPEN
##############################################################################


<Leader>p open the current directory with the peepopen application (fuzzy search)


##############################################################################
# PLUGINS > VIM-SYMFONY
##############################################################################


:Sview open template file
:Saction open action file
:Smodel open model file
:Sfilter open filter file
:Sform open form file
:Spartial open partial file / write selected content in partial + include
:Scomponent open component file / write selected content in component + include
:Salternate open alternate model file (class - table class)
:Symfony execute task


##############################################################################
# PERSONAL .VIMRC
##############################################################################


<leader>ev edit vimrc file
<leader>sv reload vimrc file
<leader>sh show syntax highlighting groups for word under cursor

<space> page down
jj exit insertion mode
<leader>q close the current window

<leader>/ clear the search register

<leader>h toggle hidden characters

<leader>W strip all trailing whitespace

CTRL-h go to left window
CTRL-j go to down window
CTRL-k go to top window
CTRL-l go to right window
<leader>w open vertical split window and activate

%% will expand to current directory
<leader>ew open file from current directory
<leader>es open file in split window from current directory
<leader>cd change directory to parent dir of current file
## will expand to webroot

:Wrap wrap text
<F2> toggle wrapped text

<F3> toggle spell check

<F4> toggle light/dark background

<F5> underline with dashes
<F6> underline with double lines

<leader><up> bubble line(s) up
<leader><down> bublle line(s) down

:Ltag load tags file
:Project cd to project and load tags file
<leader>t show current tag for word under cursor
<leader>st show current tag for word under cursor in split window
<leader>tj show current tag list for word under cursor
<leader>stj show current tag list for word under cursor in split window

CTRL-<space> show omnicomplete menu

<leader>b surround with strong tags
<leader>i surround with em tags

CTRL-p generate PHP DOC

<leader>a run Ack

<leader>md preview markdown

<leader>s preview in safari

<leader>x colorpicker

<leader>n toggle Nerdtree
<leader>N close Nerdtree
<leader>f find current file in Nerdtree

<leader>l toggle Taglist
<leader>L close Taglist

<leader>ph set filetype to php.html
<leader>r reload all snipmate snippets

CTRL-<tab> switch between buffers

CTRL-y go to next tag of attribute in sparkup plugin

<leader>g toggle Gundo window

IMG<CR> show image browser to insert image tag with src, width and height
b insert image tag with dimensions from NERDTree
(http://stackoverflow.com/questions/5707925/vim-image-placement)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
/* *******************************************************************************************
* TAILWIND.CSS
* DOCUMENTATION: https://tailwindcss.com/
* ******************************************************************************************* */

/*
* Available breakpoints
* --------------------
* sm: min-width: 640px;
* md: min-width: 768px;
* lg: min-width: 1024px;
* xl: min-width: 1280px;
*/

/* *******************************************************************************************
* LAYOUT
* ******************************************************************************************* */

/*
* Container
* --------------------
* A component for fixing an element's width to the current breakpoint.
*/

.container

/*
* Box-sizing
* --------------------
* Utilities for controlling how the browser should calculate an element's total size.
* By default, only responsive variants are generated for box-sizing utilities.
*/

.box-border /* box-sizing: border-box; */
.box-content /* box-sizing: content-box; */

/*
* Display
* --------------------
* Utilities for controlling the display box type of an element.
* By default, only responsive variants are generated for display utilities.
*/

.hidden /* display: none; */
.block /* display: block; */
.inline-block /* display: inline-block; */
.inline /* display: inline; */
.flex /* display: flex; */
.inline-flex /* display: inline-flex; */
.grid /* display: grid; */
.table /* display: table; */
.table-caption /* display: table-caption; */
.table-cell /* display: table-cell; */
.table-column /* display: table-column; */
.table-column-group /* display: table-column-group; */
.table-footer-group /* display: table-footer-group; */
.table-header-group /* display: table-header-group; */
.table-row-group /* display: table-row-group; */
.table-row /* display: table-row; */

/*
* Floats
* --------------------
* Utilities for controlling the wrapping of content around an element.
* By default, only responsive variants are generated for float utilities.
*/

.float-right /* float: right; */
.float-left /* float: left; */
.float-none /* float: none; */
.clearfix /* &::after { content: ""; display: table; clear: both; } */

/*
* Clear
* --------------------
* Utilities for controlling the wrapping of content around an element.
* By default, only responsive variants are generated for clear utilities.
*/

.clear-left /* clear: left; */
.clear-right /* clear: right; */
.clear-both /* clear: both; */

/*
* Object Fit
* --------------------
* Utilities for controlling how a replaced element's content should be resized.
* By default, only responsive variants are generated for object-fit utilities.
*/

.object-contain /* object-fit: contain; */
.object-cover /* object-fit: cover; */
.object-fill /* object-fit: fill; */
.object-none /* object-fit: none; */
.object-scale-down /* object-fit: scale-down; */

/*
* Object Position
* --------------------
* Utilities for controlling how a replaced element's content should be positioned within its container.
* By default, only responsive variants are generated for object position utilities.
*/

.object-bottom /* object-position: bottom; */
.object-center /* object-position: center; */
.object-left /* object-position: left; */
.object-left-bottom /* object-position: left bottom; */
.object-left-top /* object-position: left top; */
.object-right /* object-position: right; */
.object-right-bottom /* object-position: right bottom; */
.object-right-top /* object-position: right top; */
.object-top /* object-position: top; */

/*
* Overflow
* --------------------
* Utilities for controlling how an element handles content that is too large for the container.
* By default, only responsive variants are generated for overflow utilities.
*/

.overflow-auto /* overflow: auto; */
.overflow-hidden /* overflow: hidden; */
.overflow-visible /* overflow: visible; */
.overflow-scroll /* overflow: scroll; */
.overflow-x-auto /* overflow-x: auto; */
.overflow-y-auto /* overflow-y: auto; */
.overflow-x-hidden /* overflow-x: hidden; */
.overflow-y-hidden /* overflow-y: hidden; */
.overflow-x-visible /* overflow-x: visible; */
.overflow-y-visible /* overflow-y: visible; */
.overflow-x-scroll /* overflow-x: scroll; */
.overflow-y-scroll /* overflow-y: scroll; */
.scrolling-touch /* -webkit-overflow-scrolling: touch; */
.scrolling-auto /* -webkit-overflow-scrolling: auto; */

/*
* Position
* --------------------
* Utilities for controlling how an element is positioned in the DOM.
* By default, only responsive variants are generated for position utilities.
*/

.static /* position: static; */
.fixed /* position: fixed; */
.absolute /* position: absolute; */
.relative /* position: relative; */
.sticky /* position: sticky; */

/*
* Top / Right / Bottom / Left
* --------------------
* Utilities for controlling the placement of positioned elements.
* By default, only responsive variants are generated for top, right, bottom, left, and inset utilities.
*/

.inset-0 /* top: 0; right: 0; bottom: 0; left: 0; */
.inset-y-0 /* top: 0; bottom: 0; */
.inset-x-0 /* right: 0; left: 0; */
.top-0 /* top: 0; */
.right-0 /* right: 0; */
.bottom-0 /* bottom: 0; */
.left-0 /* left: 0; */
.inset-auto /* top: auto; right: auto; bottom: auto; left: auto; */
.inset-y-auto /* top: auto; bottom: auto; */
.inset-x-auto /* left: auto; right: auto; */
.top-auto /* top: auto; */
.bottom-auto /* bottom: auto; */
.left-auto /* left: auto; */
.right-auto /* right: auto; */

/*
* Visibility
* --------------------
* Utilities for controlling the visibility of an element.
* By default, only responsive variants are generated for visibility utilities.
*/

.visible /* visibility: visible; */
.invisible /* visibility: hidden; */

/*
* Z-Index
* --------------------
* Utilities for controlling the stack order of an element.
* By default, only responsive variants are generated for z-index utilities.
*/

.z-0 /* z-index: 0; */
.z-10 /* z-index: 10; */
.z-20 /* z-index: 20; */
.z-30 /* z-index: 30; */
.z-40 /* z-index: 40; */
.z-50 /* z-index: 50; */
.z-auto /* z-index: auto; */

/* *******************************************************************************************
* FLEXBOX
* ******************************************************************************************* */

.flex /* display: flex; */
.inline-flex /* display: inline-flex; */

/*
* Flex Direction
* --------------------
* Utilities for controlling the direction of flex items.
* By default, only responsive variants are generated for flex-direction utilities.
*/

.flex-row /* flex-direction: row; */
.flex-row-reverse /* flex-direction: row-reverse; */
.flex-col /* flex-direction: column; */
.flex-col-reverse /* flex-direction: column-reverse; */

/*
* Flex Wrap
* --------------------
* Utilities for controlling how flex items wrap.
* By default, only responsive variants are generated for flex-wrap utilities.
*/

.flex-no-wrap /* flex-wrap: nowrap; */
.flex-wrap /* flex-wrap: wrap; */
.flex-wrap-reverse /* flex-wrap: wrap-reverse; */

/*
* Align Items
* --------------------
* Utilities for controlling how flex items are positioned along a container's cross axis.
* By default, only responsive variants are generated for align-items utilities.
*/

.items-stretch /* align-items: stretch; */
.items-start /* align-items: flex-start; */
.items-center /* align-items: center; */
.items-end /* align-items: flex-end; */
.items-baseline /* align-items: baseline; */

/*
* Align Content
* --------------------
* Utilities for controlling how lines are positioned in multi-line flex containers.
* By default, only responsive variants are generated for align-content utilities.
*/

.content-start /* align-content: flex-start; */
.content-center /* align-content: center; */
.content-end /* align-content: flex-end; */
.content-between /* align-content: space-between; */
.content-around /* align-content: space-around; */

/*
* Align Self
* --------------------
* Utilities for controlling how an individual flex item is positioned along its container's cross axis.
* By default, only responsive variants are generated for align-self utilities.
*/

.self-auto /* align-self: auto; */
.self-start /* align-self: flex-start; */
.self-center /* align-self: center; */
.self-end /* align-self: flex-end; */
.self-stretch /* align-self: stretch; */

/*
* Justify Content
* --------------------
* Utilities for controlling how flex items are positioned along a container's main axis.
* By default, only responsive variants are generated for justify-content utilities.
*/

.justify-start /* justify-content: flex-start; */
.justify-center /* justify-content: center; */
.justify-end /* justify-content: flex-end; */
.justify-between /* justify-content: space-between; */
.justify-around /* justify-content: space-around; */

/*
* Flex
* --------------------
* Utilities for controlling how flex items both grow and shrink.
* By default, only responsive variants are generated for flex utilities.
*/

.flex-initial /* flex: 0 1 auto; */
.flex-1 /* flex: 1 1 0%; */
.flex-auto /* flex: 1 1 auto; */
.flex-none /* flex: none; */

/*
* Flex Grow
* --------------------
* Utilities for controlling how flex items grow.
* By default, only responsive variants are generated for flex grow utilities.
*/

.flex-grow /* flex-grow: 1; */
.flex-grow-0 /* flex-grow: 0; */

/*
* Flex Shrink
* --------------------
* Utilities for controlling how flex items shrink.
* By default, only responsive variants are generated for flex shrink utilities.
*/

.flex-shrink /* flex-shrink: 1; */
.flex-shrink-0 /* flex-shrink: 0; */

/*
* Order
* --------------------
* Utilities for controlling the order of flex items.
* By default, only responsive variants are generated for order utilities.
*/

.order-first /* order: -9999; */
.order-last /* order: 9999; */
.order-none /* order: 0; */
.order-1 /* order: 1; */
.order-2 /* order: 2; */
.order-3 /* order: 3; */
.order-4 /* order: 4; */
.order-5 /* order: 5; */
.order-6 /* order: 6; */
.order-7 /* order: 7; */
.order-8 /* order: 8; */
.order-9 /* order: 9; */
.order-10 /* order: 10; */
.order-11 /* order: 11; */
.order-12 /* order: 12; */

/* *******************************************************************************************
* GRID
* ******************************************************************************************* */

.grid /* display: grid; */

/*
* Grid Template Columns
* --------------------
* Utilities for specifying the columns in a grid layout.
* By default, only responsive variants are generated for grid-template-columns utilities.
*/

.grid-cols-1 /* grid-template-columns: repeat(1, minmax(0, 1fr)); */
.grid-cols-2 /* grid-template-columns: repeat(2, minmax(0, 1fr)); */
.grid-cols-3 /* grid-template-columns: repeat(3, minmax(0, 1fr)); */
.grid-cols-4 /* grid-template-columns: repeat(4, minmax(0, 1fr)); */
.grid-cols-5 /* grid-template-columns: repeat(5, minmax(0, 1fr)); */
.grid-cols-6 /* grid-template-columns: repeat(6, minmax(0, 1fr)); */
.grid-cols-7 /* grid-template-columns: repeat(7, minmax(0, 1fr)); */
.grid-cols-8 /* grid-template-columns: repeat(8, minmax(0, 1fr)); */
.grid-cols-9 /* grid-template-columns: repeat(9, minmax(0, 1fr)); */
.grid-cols-10 /* grid-template-columns: repeat(10, minmax(0, 1fr)); */
.grid-cols-11 /* grid-template-columns: repeat(11, minmax(0, 1fr)); */
.grid-cols-12 /* grid-template-columns: repeat(12, minmax(0, 1fr)); */
.grid-cols-none /* grid-template-columns: none; */

/*
* Grid Column Start / End
* --------------------
* Utilities for controlling how elements are sized and placed across grid columns.
* By default, only responsive variants are generated for grid-column utilities.
*/

.col-auto /* grid-column: auto; */
.col-span-1 /* grid-column: span 1 / span 1; */
.col-span-2 /* grid-column: span 2 / span 2; */
.col-span-3 /* grid-column: span 3 / span 3; */
.col-span-4 /* grid-column: span 4 / span 4; */
.col-span-5 /* grid-column: span 5 / span 5; */
.col-span-6 /* grid-column: span 6 / span 6; */
.col-span-7 /* grid-column: span 7 / span 7; */
.col-span-8 /* grid-column: span 8 / span 8; */
.col-span-9 /* grid-column: span 9 / span 9; */
.col-span-10 /* grid-column: span 10 / span 10; */
.col-span-11 /* grid-column: span 11 / span 11; */
.col-span-12 /* grid-column: span 12 / span 12; */
.col-start-1 /* grid-column-start: 1; */
.col-start-2 /* grid-column-start: 2; */
.col-start-3 /* grid-column-start: 3; */
.col-start-4 /* grid-column-start: 4; */
.col-start-5 /* grid-column-start: 5; */
.col-start-6 /* grid-column-start: 6; */
.col-start-7 /* grid-column-start: 7; */
.col-start-8 /* grid-column-start: 8; */
.col-start-9 /* grid-column-start: 9; */
.col-start-10 /* grid-column-start: 10; */
.col-start-11 /* grid-column-start: 11; */
.col-start-12 /* grid-column-start: 12; */
.col-start-13 /* grid-column-start: 13; */
.col-start-auto /* grid-column-start: auto; */
.col-end-1 /* grid-column-end: 1; */
.col-end-2 /* grid-column-end: 2; */
.col-end-3 /* grid-column-end: 3; */
.col-end-4 /* grid-column-end: 4; */
.col-end-5 /* grid-column-end: 5; */
.col-end-6 /* grid-column-end: 6; */
.col-end-7 /* grid-column-end: 7; */
.col-end-8 /* grid-column-end: 8; */
.col-end-9 /* grid-column-end: 9; */
.col-end-10 /* grid-column-end: 10; */
.col-end-11 /* grid-column-end: 11; */
.col-end-12 /* grid-column-end: 12; */
.col-end-13 /* grid-column-end: 13; */
.col-end-auto /* grid-column-end: auto; */

/*
* Grid Template Rows
* --------------------
* Utilities for specifying the rows in a grid layout.
* By default, only responsive variants are generated for grid-template-rows utilities.
*/

.grid-rows-1 /* grid-template-rows: repeat(1, minmax(0, 1fr)); */
.grid-rows-2 /* grid-template-rows: repeat(2, minmax(0, 1fr)); */
.grid-rows-3 /* grid-template-rows: repeat(3, minmax(0, 1fr)); */
.grid-rows-4 /* grid-template-rows: repeat(4, minmax(0, 1fr)); */
.grid-rows-5 /* grid-template-rows: repeat(5, minmax(0, 1fr)); */
.grid-rows-6 /* grid-template-rows: repeat(6, minmax(0, 1fr)); */
.grid-rows-none /* grid-template-rows: none; */

/*
* Grid Row Start / End
* --------------------
* Utilities for controlling how elements are sized and placed across grid rows.
* By default, only responsive variants are generated for grid-row utilities.
*/

.row-auto /* grid-row: auto; */
.row-span-1 /* grid-row: span 1 / span 1; */
.row-span-2 /* grid-row: span 2 / span 2; */
.row-span-3 /* grid-row: span 3 / span 3; */
.row-span-4 /* grid-row: span 4 / span 4; */
.row-span-5 /* grid-row: span 5 / span 5; */
.row-span-6 /* grid-row: span 6 / span 6; */
.row-start-1 /* grid-row-start: 1; */
.row-start-2 /* grid-row-start: 2; */
.row-start-3 /* grid-row-start: 3; */
.row-start-4 /* grid-row-start: 4; */
.row-start-5 /* grid-row-start: 5; */
.row-start-6 /* grid-row-start: 6; */
.row-start-7 /* grid-row-start: 7; */
.row-start-auto /* grid-row-start: auto; */
.row-end-1 /* grid-row-end: 1; */
.row-end-2 /* grid-row-end: 2; */
.row-end-3 /* grid-row-end: 3; */
.row-end-4 /* grid-row-end: 4; */
.row-end-5 /* grid-row-end: 5; */
.row-end-6 /* grid-row-end: 6; */
.row-end-7 /* grid-row-end: 7; */
.row-end-auto /* grid-row-end: auto; */

/*
* Gap
* --------------------
* Utilities for controlling gutters between grid rows and columns.
* By default, no responsive, hover, focus, active, or group-hover variants are generated for gap utilities.
*/

.gap-0 /* gap: 0; */
.gap-1 /* gap: 0.25rem; */
.gap-2 /* gap: 0.5rem; */
.gap-3 /* gap: 0.75rem; */
.gap-4 /* gap: 1rem; */
.gap-5 /* gap: 1.25rem; */
.gap-6 /* gap: 1.5rem; */
.gap-8 /* gap: 2rem; */
.gap-10 /* gap: 2.5rem; */
.gap-12 /* gap: 3rem; */
.gap-16 /* gap: 4rem; */
.gap-20 /* gap: 5rem; */
.gap-24 /* gap: 6rem; */
.gap-32 /* gap: 8rem; */
.gap-40 /* gap: 10rem; */
.gap-48 /* gap: 12rem; */
.gap-56 /* gap: 14rem; */
.gap-64 /* gap: 16rem; */
.gap-px /* gap: 1px; */
.row-gap-0 /* row-gap: 0; */
.row-gap-1 /* row-gap: 0.25rem; */
.row-gap-2 /* row-gap: 0.5rem; */
.row-gap-3 /* row-gap: 0.75rem; */
.row-gap-4 /* row-gap: 1rem; */
.row-gap-5 /* row-gap: 1.25rem; */
.row-gap-6 /* row-gap: 1.5rem; */
.row-gap-8 /* row-gap: 2rem; */
.row-gap-10 /* row-gap: 2.5rem; */
.row-gap-12 /* row-gap: 3rem; */
.row-gap-16 /* row-gap: 4rem; */
.row-gap-20 /* row-gap: 5rem; */
.row-gap-24 /* row-gap: 6rem; */
.row-gap-32 /* row-gap: 8rem; */
.row-gap-40 /* row-gap: 10rem; */
.row-gap-48 /* row-gap: 12rem; */
.row-gap-56 /* row-gap: 14rem; */
.row-gap-64 /* row-gap: 16rem; */
.row-gap-px /* row-gap: 1px; */
.col-gap-0 /* column-gap: 0; */
.col-gap-1 /* column-gap: 0.25rem; */
.col-gap-2 /* column-gap: 0.5rem; */
.col-gap-3 /* column-gap: 0.75rem; */
.col-gap-4 /* column-gap: 1rem; */
.col-gap-5 /* column-gap: 1.25rem; */
.col-gap-6 /* column-gap: 1.5rem; */
.col-gap-8 /* column-gap: 2rem; */
.col-gap-10 /* column-gap: 2.5rem; */
.col-gap-12 /* column-gap: 3rem; */
.col-gap-16 /* column-gap: 4rem; */
.col-gap-20 /* column-gap: 5rem; */
.col-gap-24 /* column-gap: 6rem; */
.col-gap-32 /* column-gap: 8rem; */
.col-gap-40 /* column-gap: 10rem; */
.col-gap-48 /* column-gap: 12rem; */
.col-gap-56 /* column-gap: 14rem; */
.col-gap-64 /* column-gap: 16rem; */
.col-gap-px /* column-gap: 1px; */

/*
* Grid Auto Flow
* --------------------
* Utilities for controlling how elements in a grid are auto-placed.
* By default, only responsive variants are generated for grid-auto-flow utilities.
*/

.grid-flow-row /* grid-auto-flow: row; */
.grid-flow-col /* grid-auto-flow: column; */
.grid-flow-row-dense /* grid-auto-flow: row dense; */
.grid-flow-col-dense /* grid-auto-flow: column dense; */

/* *******************************************************************************************
* SPACING
* ******************************************************************************************* */

/*
* Padding
* --------------------
* Utilities for controlling an element's padding.
* By default, only responsive variants are generated for padding utilities.
*/

.p-0 /* padding: 0; */
.p-1 /* padding: 0.25rem; */
.p-2 /* padding: 0.5rem; */
.p-3 /* padding: 0.75rem; */
.p-4 /* padding: 1rem; */
.p-5 /* padding: 1.25rem; */
.p-6 /* padding: 1.5rem; */
.p-8 /* padding: 2rem; */
.p-10 /* padding: 2.5rem; */
.p-12 /* padding: 3rem; */
.p-16 /* padding: 4rem; */
.p-20 /* padding: 5rem; */
.p-24 /* padding: 6rem; */
.p-32 /* padding: 8rem; */
.p-40 /* padding: 10rem; */
.p-48 /* padding: 12rem; */
.p-56 /* padding: 14rem; */
.p-64 /* padding: 16rem; */
.p-px /* padding: 1px; */
.py-0 /* padding-top: 0; padding-bottom: 0; */
.py-1 /* padding-top: 0.25rem; padding-bottom: 0.25rem; */
.py-2 /* padding-top: 0.5rem; padding-bottom: 0.5rem; */
.py-3 /* padding-top: 0.75rem; padding-bottom: 0.75rem; */
.py-4 /* padding-top: 1rem; padding-bottom: 1rem; */
.py-5 /* padding-top: 1.25rem; padding-bottom: 1.25rem; */
.py-6 /* padding-top: 1.5rem; padding-bottom: 1.5rem; */
.py-8 /* padding-top: 2rem; padding-bottom: 2rem; */
.py-10 /* padding-top: 2.5rem; padding-bottom: 2.5rem; */
.py-12 /* padding-top: 3rem; padding-bottom: 3rem; */
.py-16 /* padding-top: 4rem; padding-bottom: 4rem; */
.py-20 /* padding-top: 5rem; padding-bottom: 5rem; */
.py-24 /* padding-top: 6rem; padding-bottom: 6rem; */
.py-32 /* padding-top: 8rem; padding-bottom: 8rem; */
.py-40 /* padding-top: 10rem; padding-bottom: 10rem; */
.py-48 /* padding-top: 12rem; padding-bottom: 12rem; */
.py-56 /* padding-top: 14rem; padding-bottom: 14rem; */
.py-64 /* padding-top: 16rem; padding-bottom: 16rem; */
.py-px /* padding-top: 1px; padding-bottom: 1px; */
.px-0 /* padding-right: 0; padding-left: 0; */
.px-1 /* padding-right: 0.25rem; padding-left: 0.25rem; */
.px-2 /* padding-right: 0.5rem; padding-left: 0.5rem; */
.px-3 /* padding-right: 0.75rem; padding-left: 0.75rem; */
.px-4 /* padding-right: 1rem; padding-left: 1rem; */
.px-5 /* padding-right: 1.25rem; padding-left: 1.25rem; */
.px-6 /* padding-right: 1.5rem; padding-left: 1.5rem; */
.px-8 /* padding-right: 2rem; padding-left: 2rem; */
.px-10 /* padding-right: 2.5rem; padding-left: 2.5rem; */
.px-12 /* padding-right: 3rem; padding-left: 3rem; */
.px-16 /* padding-right: 4rem; padding-left: 4rem; */
.px-20 /* padding-right: 5rem; padding-left: 5rem; */
.px-24 /* padding-right: 6rem; padding-left: 6rem; */
.px-32 /* padding-right: 8rem; padding-left: 8rem; */
.px-40 /* padding-right: 10rem; padding-left: 10rem; */
.px-48 /* padding-right: 12rem; padding-left: 12rem; */
.px-56 /* padding-right: 14rem; padding-left: 14rem; */
.px-64 /* padding-right: 16rem; padding-left: 16rem; */
.px-px /* padding-right: 1px; padding-left: 1px; */
.pt-0 /* padding-top: 0; */
.pt-1 /* padding-top: 0.25rem; */
.pt-2 /* padding-top: 0.5rem; */
.pt-3 /* padding-top: 0.75rem; */
.pt-4 /* padding-top: 1rem; */
.pt-5 /* padding-top: 1.25rem; */
.pt-6 /* padding-top: 1.5rem; */
.pt-8 /* padding-top: 2rem; */
.pt-10 /* padding-top: 2.5rem; */
.pt-12 /* padding-top: 3rem; */
.pt-16 /* padding-top: 4rem; */
.pt-20 /* padding-top: 5rem; */
.pt-24 /* padding-top: 6rem; */
.pt-32 /* padding-top: 8rem; */
.pt-40 /* padding-top: 10rem; */
.pt-48 /* padding-top: 12rem; */
.pt-56 /* padding-top: 14rem; */
.pt-64 /* padding-top: 16rem; */
.pt-px /* padding-top: 1px; */
.pr-0 /* padding-right: 0; */
.pr-1 /* padding-right: 0.25rem; */
.pr-2 /* padding-right: 0.5rem; */
.pr-3 /* padding-right: 0.75rem; */
.pr-4 /* padding-right: 1rem; */
.pr-5 /* padding-right: 1.25rem; */
.pr-6 /* padding-right: 1.5rem; */
.pr-8 /* padding-right: 2rem; */
.pr-10 /* padding-right: 2.5rem; */
.pr-12 /* padding-right: 3rem; */
.pr-16 /* padding-right: 4rem; */
.pr-20 /* padding-right: 5rem; */
.pr-24 /* padding-right: 6rem; */
.pr-32 /* padding-right: 8rem; */
.pr-40 /* padding-right: 10rem; */
.pr-48 /* padding-right: 12rem; */
.pr-56 /* padding-right: 14rem; */
.pr-64 /* padding-right: 16rem; */
.pr-px /* padding-right: 1px; */
.pb-0 /* padding-bottom: 0; */
.pb-1 /* padding-bottom: 0.25rem; */
.pb-2 /* padding-bottom: 0.5rem; */
.pb-3 /* padding-bottom: 0.75rem; */
.pb-4 /* padding-bottom: 1rem; */
.pb-5 /* padding-bottom: 1.25rem; */
.pb-6 /* padding-bottom: 1.5rem; */
.pb-8 /* padding-bottom: 2rem; */
.pb-10 /* padding-bottom: 2.5rem; */
.pb-12 /* padding-bottom: 3rem; */
.pb-16 /* padding-bottom: 4rem; */
.pb-20 /* padding-bottom: 5rem; */
.pb-24 /* padding-bottom: 6rem; */
.pb-32 /* padding-bottom: 8rem; */
.pb-40 /* padding-bottom: 10rem; */
.pb-48 /* padding-bottom: 12rem; */
.pb-56 /* padding-bottom: 14rem; */
.pb-64 /* padding-bottom: 16rem; */
.pb-px /* padding-bottom: 1px; */
.pl-0 /* padding-left: 0; */
.pl-1 /* padding-left: 0.25rem; */
.pl-2 /* padding-left: 0.5rem; */
.pl-3 /* padding-left: 0.75rem; */
.pl-4 /* padding-left: 1rem; */
.pl-5 /* padding-left: 1.25rem; */
.pl-6 /* padding-left: 1.5rem; */
.pl-8 /* padding-left: 2rem; */
.pl-10 /* padding-left: 2.5rem; */
.pl-12 /* padding-left: 3rem; */
.pl-16 /* padding-left: 4rem; */
.pl-20 /* padding-left: 5rem; */
.pl-24 /* padding-left: 6rem; */
.pl-32 /* padding-left: 8rem; */
.pl-40 /* padding-left: 10rem; */
.pl-48 /* padding-left: 12rem; */
.pl-56 /* padding-left: 14rem; */
.pl-64 /* padding-left: 16rem; */
.pl-px /* padding-left: 1px; */

/*
* Margin
* --------------------
* Utilities for controlling an element's margin.
* By default, only responsive variants are generated for margin utilities.
*/

.m-0 /* margin: 0; */
.m-1 /* margin: 0.25rem; */
.m-2 /* margin: 0.5rem; */
.m-3 /* margin: 0.75rem; */
.m-4 /* margin: 1rem; */
.m-5 /* margin: 1.25rem; */
.m-6 /* margin: 1.5rem; */
.m-8 /* margin: 2rem; */
.m-10 /* margin: 2.5rem; */
.m-12 /* margin: 3rem; */
.m-16 /* margin: 4rem; */
.m-20 /* margin: 5rem; */
.m-24 /* margin: 6rem; */
.m-32 /* margin: 8rem; */
.m-40 /* margin: 10rem; */
.m-48 /* margin: 12rem; */
.m-56 /* margin: 14rem; */
.m-64 /* margin: 16rem; */
.m-auto /* margin: auto; */
.m-px /* margin: 1px; */
.-m-1 /* margin: -0.25rem; */
.-m-2 /* margin: -0.5rem; */
.-m-3 /* margin: -0.75rem; */
.-m-4 /* margin: -1rem; */
.-m-5 /* margin: -1.25rem; */
.-m-6 /* margin: -1.5rem; */
.-m-8 /* margin: -2rem; */
.-m-10 /* margin: -2.5rem; */
.-m-12 /* margin: -3rem; */
.-m-16 /* margin: -4rem; */
.-m-20 /* margin: -5rem; */
.-m-24 /* margin: -6rem; */
.-m-32 /* margin: -8rem; */
.-m-40 /* margin: -10rem; */
.-m-48 /* margin: -12rem; */
.-m-56 /* margin: -14rem; */
.-m-64 /* margin: -16rem; */
.-m-px /* margin: -1px; */
.my-0 /* margin-top: 0; margin-bottom: 0; */
.my-1 /* margin-top: 0.25rem; margin-bottom: 0.25rem; */
.my-2 /* margin-top: 0.5rem; margin-bottom: 0.5rem; */
.my-3 /* margin-top: 0.75rem; margin-bottom: 0.75rem; */
.my-4 /* margin-top: 1rem; margin-bottom: 1rem; */
.my-5 /* margin-top: 1.25rem; margin-bottom: 1.25rem; */
.my-6 /* margin-top: 1.5rem; margin-bottom: 1.5rem; */
.my-8 /* margin-top: 2rem; margin-bottom: 2rem; */
.my-10 /* margin-top: 2.5rem; margin-bottom: 2.5rem; */
.my-12 /* margin-top: 3rem; margin-bottom: 3rem; */
.my-16 /* margin-top: 4rem; margin-bottom: 4rem; */
.my-20 /* margin-top: 5rem; margin-bottom: 5rem; */
.my-24 /* margin-top: 6rem; margin-bottom: 6rem; */
.my-32 /* margin-top: 8rem; margin-bottom: 8rem; */
.my-40 /* margin-top: 10rem; margin-bottom: 10rem; */
.my-48 /* margin-top: 12rem; margin-bottom: 12rem; */
.my-56 /* margin-top: 14rem; margin-bottom: 14rem; */
.my-64 /* margin-top: 16rem; margin-bottom: 16rem; */
.my-auto /* margin-top: auto; margin-bottom: auto; */
.my-px /* margin-top: 1px; margin-bottom: 1px; */
.-my-1 /* margin-top: -0.25rem; margin-bottom: -0.25rem; */
.-my-2 /* margin-top: -0.5rem; margin-bottom: -0.5rem; */
.-my-3 /* margin-top: -0.75rem; margin-bottom: -0.75rem; */
.-my-4 /* margin-top: -1rem; margin-bottom: -1rem; */
.-my-5 /* margin-top: -1.25rem; margin-bottom: -1.25rem; */
.-my-6 /* margin-top: -1.5rem; margin-bottom: -1.5rem; */
.-my-8 /* margin-top: -2rem; margin-bottom: -2rem; */
.-my-10 /* margin-top: -2.5rem; margin-bottom: -2.5rem; */
.-my-12 /* margin-top: -3rem; margin-bottom: -3rem; */
.-my-16 /* margin-top: -4rem; margin-bottom: -4rem; */
.-my-20 /* margin-top: -5rem; margin-bottom: -5rem; */
.-my-24 /* margin-top: -6rem; margin-bottom: -6rem; */
.-my-32 /* margin-top: -8rem; margin-bottom: -8rem; */
.-my-40 /* margin-top: -10rem; margin-bottom: -10rem; */
.-my-48 /* margin-top: -12rem; margin-bottom: -12rem; */
.-my-56 /* margin-top: -14rem; margin-bottom: -14rem; */
.-my-64 /* margin-top: -16rem; margin-bottom: -16rem; */
.-my-px /* margin-top: -1px; margin-bottom: -1px; */
.mx-0 /* margin-right: 0; margin-left: 0; */
.mx-1 /* margin-right: 0.25rem; margin-left: 0.25rem; */
.mx-2 /* margin-right: 0.5rem; margin-left: 0.5rem; */
.mx-3 /* margin-right: 0.75rem; margin-left: 0.75rem; */
.mx-4 /* margin-right: 1rem; margin-left: 1rem; */
.mx-5 /* margin-right: 1.25rem; margin-left: 1.25rem; */
.mx-6 /* margin-right: 1.5rem; margin-left: 1.5rem; */
.mx-8 /* margin-right: 2rem; margin-left: 2rem; */
.mx-10 /* margin-right: 2.5rem; margin-left: 2.5rem; */
.mx-12 /* margin-right: 3rem; margin-left: 3rem; */
.mx-16 /* margin-right: 4rem; margin-left: 4rem; */
.mx-20 /* margin-right: 5rem; margin-left: 5rem; */
.mx-24 /* margin-right: 6rem; margin-left: 6rem; */
.mx-32 /* margin-right: 8rem; margin-left: 8rem; */
.mx-40 /* margin-right: 10rem; margin-left: 10rem; */
.mx-48 /* margin-right: 12rem; margin-left: 12rem; */
.mx-56 /* margin-right: 14rem; margin-left: 14rem; */
.mx-64 /* margin-right: 16rem; margin-left: 16rem; */
.mx-auto /* margin-right: auto; margin-left: auto; */
.mx-px /* margin-right: 1px; margin-left: 1px; */
.-mx-1 /* margin-right: -0.25rem; margin-left: -0.25rem; */
.-mx-2 /* margin-right: -0.5rem; margin-left: -0.5rem; */
.-mx-3 /* margin-right: -0.75rem; margin-left: -0.75rem; */
.-mx-4 /* margin-right: -1rem; margin-left: -1rem; */
.-mx-5 /* margin-right: -1.25rem; margin-left: -1.25rem; */
.-mx-6 /* margin-right: -1.5rem; margin-left: -1.5rem; */
.-mx-8 /* margin-right: -2rem; margin-left: -2rem; */
.-mx-10 /* margin-right: -2.5rem; margin-left: -2.5rem; */
.-mx-12 /* margin-right: -3rem; margin-left: -3rem; */
.-mx-16 /* margin-right: -4rem; margin-left: -4rem; */
.-mx-20 /* margin-right: -5rem; margin-left: -5rem; */
.-mx-24 /* margin-right: -6rem; margin-left: -6rem; */
.-mx-32 /* margin-right: -8rem; margin-left: -8rem; */
.-mx-40 /* margin-right: -10rem; margin-left: -10rem; */
.-mx-48 /* margin-right: -12rem; margin-left: -12rem; */
.-mx-56 /* margin-right: -14rem; margin-left: -14rem; */
.-mx-64 /* margin-right: -16rem; margin-left: -16rem; */
.-mx-px /* margin-right: -1px; margin-left: -1px; */
.mt-0 /* margin-top: 0; */
.mt-1 /* margin-top: 0.25rem; */
.mt-2 /* margin-top: 0.5rem; */
.mt-3 /* margin-top: 0.75rem; */
.mt-4 /* margin-top: 1rem; */
.mt-5 /* margin-top: 1.25rem; */
.mt-6 /* margin-top: 1.5rem; */
.mt-8 /* margin-top: 2rem; */
.mt-10 /* margin-top: 2.5rem; */
.mt-12 /* margin-top: 3rem; */
.mt-16 /* margin-top: 4rem; */
.mt-20 /* margin-top: 5rem; */
.mt-24 /* margin-top: 6rem; */
.mt-32 /* margin-top: 8rem; */
.mt-40 /* margin-top: 10rem; */
.mt-48 /* margin-top: 12rem; */
.mt-56 /* margin-top: 14rem; */
.mt-64 /* margin-top: 16rem; */
.mt-auto /* margin-top: auto; */
.mt-px /* margin-top: 1px; */
.-mt-1 /* margin-top: -0.25rem; */
.-mt-2 /* margin-top: -0.5rem; */
.-mt-3 /* margin-top: -0.75rem; */
.-mt-4 /* margin-top: -1rem; */
.-mt-5 /* margin-top: -1.25rem; */
.-mt-6 /* margin-top: -1.5rem; */
.-mt-8 /* margin-top: -2rem; */
.-mt-10 /* margin-top: -2.5rem; */
.-mt-12 /* margin-top: -3rem; */
.-mt-16 /* margin-top: -4rem; */
.-mt-20 /* margin-top: -5rem; */
.-mt-24 /* margin-top: -6rem; */
.-mt-32 /* margin-top: -8rem; */
.-mt-40 /* margin-top: -10rem; */
.-mt-48 /* margin-top: -12rem; */
.-mt-56 /* margin-top: -14rem; */
.-mt-64 /* margin-top: -16rem; */
.-mt-px /* margin-top: -1px; */
.mr-0 /* margin-right: 0; */
.mr-1 /* margin-right: 0.25rem; */
.mr-2 /* margin-right: 0.5rem; */
.mr-3 /* margin-right: 0.75rem; */
.mr-4 /* margin-right: 1rem; */
.mr-5 /* margin-right: 1.25rem; */
.mr-6 /* margin-right: 1.5rem; */
.mr-8 /* margin-right: 2rem; */
.mr-10 /* margin-right: 2.5rem; */
.mr-12 /* margin-right: 3rem; */
.mr-16 /* margin-right: 4rem; */
.mr-20 /* margin-right: 5rem; */
.mr-24 /* margin-right: 6rem; */
.mr-32 /* margin-right: 8rem; */
.mr-40 /* margin-right: 10rem; */
.mr-48 /* margin-right: 12rem; */
.mr-56 /* margin-right: 14rem; */
.mr-64 /* margin-right: 16rem; */
.mr-auto /* margin-right: auto; */
.mr-px /* margin-right: 1px; */
.-mr-1 /* margin-right: -0.25rem; */
.-mr-2 /* margin-right: -0.5rem; */
.-mr-3 /* margin-right: -0.75rem; */
.-mr-4 /* margin-right: -1rem; */
.-mr-5 /* margin-right: -1.25rem; */
.-mr-6 /* margin-right: -1.5rem; */
.-mr-8 /* margin-right: -2rem; */
.-mr-10 /* margin-right: -2.5rem; */
.-mr-12 /* margin-right: -3rem; */
.-mr-16 /* margin-right: -4rem; */
.-mr-20 /* margin-right: -5rem; */
.-mr-24 /* margin-right: -6rem; */
.-mr-32 /* margin-right: -8rem; */
.-mr-40 /* margin-right: -10rem; */
.-mr-48 /* margin-right: -12rem; */
.-mr-56 /* margin-right: -14rem; */
.-mr-64 /* margin-right: -16rem; */
.-mr-px /* margin-right: -1px; */
.mb-0 /* margin-bottom: 0; */
.mb-1 /* margin-bottom: 0.25rem; */
.mb-2 /* margin-bottom: 0.5rem; */
.mb-3 /* margin-bottom: 0.75rem; */
.mb-4 /* margin-bottom: 1rem; */
.mb-5 /* margin-bottom: 1.25rem; */
.mb-6 /* margin-bottom: 1.5rem; */
.mb-8 /* margin-bottom: 2rem; */
.mb-10 /* margin-bottom: 2.5rem; */
.mb-12 /* margin-bottom: 3rem; */
.mb-16 /* margin-bottom: 4rem; */
.mb-20 /* margin-bottom: 5rem; */
.mb-24 /* margin-bottom: 6rem; */
.mb-32 /* margin-bottom: 8rem; */
.mb-40 /* margin-bottom: 10rem; */
.mb-48 /* margin-bottom: 12rem; */
.mb-56 /* margin-bottom: 14rem; */
.mb-64 /* margin-bottom: 16rem; */
.mb-auto /* margin-bottom: auto; */
.mb-px /* margin-bottom: 1px; */
.-mb-1 /* margin-bottom: -0.25rem; */
.-mb-2 /* margin-bottom: -0.5rem; */
.-mb-3 /* margin-bottom: -0.75rem; */
.-mb-4 /* margin-bottom: -1rem; */
.-mb-5 /* margin-bottom: -1.25rem; */
.-mb-6 /* margin-bottom: -1.5rem; */
.-mb-8 /* margin-bottom: -2rem; */
.-mb-10 /* margin-bottom: -2.5rem; */
.-mb-12 /* margin-bottom: -3rem; */
.-mb-16 /* margin-bottom: -4rem; */
.-mb-20 /* margin-bottom: -5rem; */
.-mb-24 /* margin-bottom: -6rem; */
.-mb-32 /* margin-bottom: -8rem; */
.-mb-40 /* margin-bottom: -10rem; */
.-mb-48 /* margin-bottom: -12rem; */
.-mb-56 /* margin-bottom: -14rem; */
.-mb-64 /* margin-bottom: -16rem; */
.-mb-px /* margin-bottom: -1px; */
.ml-0 /* margin-left: 0; */
.ml-1 /* margin-left: 0.25rem; */
.ml-2 /* margin-left: 0.5rem; */
.ml-3 /* margin-left: 0.75rem; */
.ml-4 /* margin-left: 1rem; */
.ml-5 /* margin-left: 1.25rem; */
.ml-6 /* margin-left: 1.5rem; */
.ml-8 /* margin-left: 2rem; */
.ml-10 /* margin-left: 2.5rem; */
.ml-12 /* margin-left: 3rem; */
.ml-16 /* margin-left: 4rem; */
.ml-20 /* margin-left: 5rem; */
.ml-24 /* margin-left: 6rem; */
.ml-32 /* margin-left: 8rem; */
.ml-40 /* margin-left: 10rem; */
.ml-48 /* margin-left: 12rem; */
.ml-56 /* margin-left: 14rem; */
.ml-64 /* margin-left: 16rem; */
.ml-auto /* margin-left: auto; */
.ml-px /* margin-left: 1px; */
.-ml-1 /* margin-left: -0.25rem; */
.-ml-2 /* margin-left: -0.5rem; */
.-ml-3 /* margin-left: -0.75rem; */
.-ml-4 /* margin-left: -1rem; */
.-ml-5 /* margin-left: -1.25rem; */
.-ml-6 /* margin-left: -1.5rem; */
.-ml-8 /* margin-left: -2rem; */
.-ml-10 /* margin-left: -2.5rem; */
.-ml-12 /* margin-left: -3rem; */
.-ml-16 /* margin-left: -4rem; */
.-ml-20 /* margin-left: -5rem; */
.-ml-24 /* margin-left: -6rem; */
.-ml-32 /* margin-left: -8rem; */
.-ml-40 /* margin-left: -10rem; */
.-ml-48 /* margin-left: -12rem; */
.-ml-56 /* margin-left: -14rem; */
.-ml-64 /* margin-left: -16rem; */
.-ml-px /* margin-left: -1px; */

/* *******************************************************************************************
* SIZING
* ******************************************************************************************* */

/*
* Width
* --------------------
* Utilities for setting the width of an element
* By default, only responsive variants are generated for width utilities.
*/

.w-0 /* width: 0; */
.w-1 /* width: 0.25rem; */
.w-2 /* width: 0.5rem; */
.w-3 /* width: 0.75rem; */
.w-4 /* width: 1rem; */
.w-5 /* width: 1.25rem; */
.w-6 /* width: 1.5rem; */
.w-8 /* width: 2rem; */
.w-10 /* width: 2.5rem; */
.w-12 /* width: 3rem; */
.w-16 /* width: 4rem; */
.w-20 /* width: 5rem; */
.w-24 /* width: 6rem; */
.w-32 /* width: 8rem; */
.w-40 /* width: 10rem; */
.w-48 /* width: 12rem; */
.w-56 /* width: 14rem; */
.w-64 /* width: 16rem; */
.w-auto /* width: auto; */
.w-px /* width: 1px; */
.w-1/2 /* width: 50%; */
.w-1/3 /* width: 33.333333%; */
.w-2/3 /* width: 66.666667%; */
.w-1/4 /* width: 25%; */
.w-2/4 /* width: 50%; */
.w-3/4 /* width: 75%; */
.w-1/5 /* width: 20%; */
.w-2/5 /* width: 40%; */
.w-3/5 /* width: 60%; */
.w-4/5 /* width: 80%; */
.w-1/6 /* width: 16.666667%; */
.w-2/6 /* width: 33.333333%; */
.w-3/6 /* width: 50%; */
.w-4/6 /* width: 66.666667%; */
.w-5/6 /* width: 83.333333%; */
.w-1/12 /* width: 8.333333%; */
.w-2/12 /* width: 16.666667%; */
.w-3/12 /* width: 25%; */
.w-4/12 /* width: 33.333333%; */
.w-5/12 /* width: 41.666667%; */
.w-6/12 /* width: 50%; */
.w-7/12 /* width: 58.333333%; */
.w-8/12 /* width: 66.666667%; */
.w-9/12 /* width: 75%; */
.w-10/12 /* width: 83.333333%; */
.w-11/12 /* width: 91.666667%; */
.w-full /* width: 100%; */
.w-screen /* width: 100vw; */

/*
* Min-Width
* --------------------
* Utilities for setting the minimum width of an element
* By default, only responsive variants are generated for min-width utilities.
*/

.min-w-0 /* min-width: 0; */
.min-w-full /* min-width: 100%; */

/*
* Max-Width
* --------------------
* Utilities for setting the maximum width of an element
* By default, only responsive variants are generated for max-width utilities.
*/

.max-w-xs /* max-width: 20rem; */
.max-w-sm /* max-width: 24rem; */
.max-w-md /* max-width: 28rem; */
.max-w-lg /* max-width: 32rem; */
.max-w-xl /* max-width: 36rem; */
.max-w-2xl /* max-width: 42rem; */
.max-w-3xl /* max-width: 48rem; */
.max-w-4xl /* max-width: 56rem; */
.max-w-5xl /* max-width: 64rem; */
.max-w-6xl /* max-width: 72rem; */
.max-w-full /* max-width: 100%; */
.max-w-screen-sm /* max-width: 640px; */
.max-w-screen-md /* max-width: 768px; */
.max-w-screen-lg /* max-width: 1024px; */
.max-w-screen-xl /* max-width: 1280px; */
.max-w-none /* max-width: none; */

/*
* Height
* --------------------
* Utilities for setting the height of an element
* By default, only responsive variants are generated for height utilities.
*/

.h-0 /* height: 0; */
.h-1 /* height: 0.25rem; */
.h-2 /* height: 0.5rem; */
.h-3 /* height: 0.75rem; */
.h-4 /* height: 1rem; */
.h-5 /* height: 1.25rem; */
.h-6 /* height: 1.5rem; */
.h-8 /* height: 2rem; */
.h-10 /* height: 2.5rem; */
.h-12 /* height: 3rem; */
.h-16 /* height: 4rem; */
.h-20 /* height: 5rem; */
.h-24 /* height: 6rem; */
.h-32 /* height: 8rem; */
.h-40 /* height: 10rem; */
.h-48 /* height: 12rem; */
.h-56 /* height: 14rem; */
.h-64 /* height: 16rem; */
.h-auto /* height: auto; */
.h-px /* height: 1px; */
.h-full /* height: 100%; */
.h-screen /* height: 100vh; */

/*
* Min-Height
* --------------------
* Utilities for setting the minimum height of an element
* By default, only responsive variants are generated for min-height utilities.
*/

.min-h-0 /* min-height: 0; */
.min-h-full /* min-height: 100%; */
.min-h-screen /* min-height: 100vh; */

/*
* Max-Height
* --------------------
* Utilities for setting the maximum height of an element
* By default, only responsive variants are generated for max-height utilities.
*/

.max-h-full /* max-height: 100%; */
.max-h-screen /* max-height: 100vh; */

/* *******************************************************************************************
* TYPOGRAPHY
* ******************************************************************************************* */

/*
* Font Family
* --------------------
* Utilities for controlling the font family of an element.
* By default, only responsive variants are generated for font family utilities.
*/

.font-sans /* font-family: 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"; */
.font-serif /* font-family: Georgia, Cambria, "Times New Roman", Times, serif; */
.font-mono /* font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; */

/*
* Font Size
* --------------------
* Utilities for controlling the font size of an element.
* By default, only responsive variants are generated for text sizing utilities.
*/

.text-xs /* font-size: .75rem; */
.text-sm /* font-size: .875rem; */
.text-base /* font-size: 1rem; */
.text-lg /* font-size: 1.125rem; */
.text-xl /* font-size: 1.25rem; */
.text-2xl /* font-size: 1.5rem; */
.text-3xl /* font-size: 1.875rem; */
.text-4xl /* font-size: 2.25rem; */
.text-5xl /* font-size: 3rem; */
.text-6xl /* font-size: 4rem; */

/*
* Font Smoothing
* --------------------
* Utilities for controlling the font smoothing of an element.
* By default, only responsive variants are generated for font smoothing utilities.
*/

.antialiased /* -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; */
.subpixel-antialiased /* -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; */

/*
* Font Style
* --------------------
* Utilities for controlling the style of text.
* By default, only responsive variants are generated for font style utilities.
*/

.italic /* font-style: italic; */
.not-italic /* font-style: normal; */

/*
* Font Weight
* --------------------
* Utilities for controlling the font weight of an element.
* By default, only responsive, hover and focus variants are generated for font weight utilities.
*/

.font-hairline /* font-weight: 100; */
.font-thin /* font-weight: 200; */
.font-light /* font-weight: 300; */
.font-normal /* font-weight: 400; */
.font-medium /* font-weight: 500; */
.font-semibold /* font-weight: 600; */
.font-bold /* font-weight: 700; */
.font-extrabold /* font-weight: 800; */
.font-black /* font-weight: 900; */

/*
* Letter Spacing
* --------------------
* Utilities for controlling the tracking (letter spacing) of an element.
* By default, only responsive variants are generated for tracking utilities.
*/

.tracking-tighter /* letter-spacing: -0.05em; */
.tracking-tight /* letter-spacing: -0.025em; */
.tracking-normal /* letter-spacing: 0; */
.tracking-wide /* letter-spacing: 0.025em; */
.tracking-wider /* letter-spacing: 0.05em; */
.tracking-widest /* letter-spacing: 0.1em; */

/*
* Line Height
* --------------------
* Utilities for controlling the leading (line height) of an element.
* By default, only responsive variants are generated for line height utilities.
*/

.leading-none /* line-height: 1; */
.leading-tight /* line-height: 1.25; */
.leading-snug /* line-height: 1.375; */
.leading-normal /* line-height: 1.5; */
.leading-relaxed /* line-height: 1.625; */
.leading-loose /* line-height: 2; */
.leading-3 /* line-height: .75rem; */
.leading-4 /* line-height: 1rem; */
.leading-5 /* line-height: 1.25rem; */
.leading-6 /* line-height: 1.5rem; */
.leading-7 /* line-height: 1.75rem; */
.leading-8 /* line-height: 2rem; */
.leading-9 /* line-height: 2.25rem; */
.leading-10 /* line-height: 2.5rem; */

/*
* List Style Type
* --------------------
* Utilities for controlling the bullet/number style of a list.
* By default, only responsive variants are generated for list style type utilities.
*/

.list-none /* list-style-type: none; */
.list-disc /* list-style-type: disc; */
.list-decimal /* list-style-type: decimal; */

/*
* List Style Position
* --------------------
* Utilities for controlling the position of bullets/numbers in lists.
* By default, only responsive variants are generated for list style position utilities.
*/

.list-inside /* list-style-position: inside; */
.list-outside /* list-style-position: outside; */

/*
* Placeholder Color
* --------------------
* Utilities for controlling the color of placeholder text.
* By default, only responsive and focus variants are generated for placeholder color utilities.
*/

.placeholder-transparent /* ::placeholder { color: transparent; } */
.placeholder-black /* ::placeholder { color: #000; } */
.placeholder-white /* ::placeholder { color: #fff; } */
.placeholder-gray-100 /* ::placeholder { color: #f7fafc; } */
.placeholder-gray-200 /* ::placeholder { color: #edf2f7; } */
.placeholder-gray-300 /* ::placeholder { color: #e2e8f0; } */
.placeholder-gray-400 /* ::placeholder { color: #cbd5e0; } */
.placeholder-gray-500 /* ::placeholder { color: #a0aec0; } */
.placeholder-gray-600 /* ::placeholder { color: #718096; } */
.placeholder-gray-700 /* ::placeholder { color: #4a5568; } */
.placeholder-gray-800 /* ::placeholder { color: #2d3748; } */
.placeholder-gray-900 /* ::placeholder { color: #1a202c; } */
.placeholder-red-100 /* ::placeholder { color: #fff5f5; } */
.placeholder-red-200 /* ::placeholder { color: #fed7d7; } */
.placeholder-red-300 /* ::placeholder { color: #feb2b2; } */
.placeholder-red-400 /* ::placeholder { color: #fc8181; } */
.placeholder-red-500 /* ::placeholder { color: #f56565; } */
.placeholder-red-600 /* ::placeholder { color: #e53e3e; } */
.placeholder-red-700 /* ::placeholder { color: #c53030; } */
.placeholder-red-800 /* ::placeholder { color: #9b2c2c; } */
.placeholder-red-900 /* ::placeholder { color: #742a2a; } */
.placeholder-orange-100 /* ::placeholder { color: #fffaf0; } */
.placeholder-orange-200 /* ::placeholder { color: #feebc8; } */
.placeholder-orange-300 /* ::placeholder { color: #fbd38d; } */
.placeholder-orange-400 /* ::placeholder { color: #f6ad55; } */
.placeholder-orange-500 /* ::placeholder { color: #ed8936; } */
.placeholder-orange-600 /* ::placeholder { color: #dd6b20; } */
.placeholder-orange-700 /* ::placeholder { color: #c05621; } */
.placeholder-orange-800 /* ::placeholder { color: #9c4221; } */
.placeholder-orange-900 /* ::placeholder { color: #7b341e; } */
.placeholder-yellow-100 /* ::placeholder { color: #fffff0; } */
.placeholder-yellow-200 /* ::placeholder { color: #fefcbf; } */
.placeholder-yellow-300 /* ::placeholder { color: #faf089; } */
.placeholder-yellow-400 /* ::placeholder { color: #f6e05e; } */
.placeholder-yellow-500 /* ::placeholder { color: #ecc94b; } */
.placeholder-yellow-600 /* ::placeholder { color: #d69e2e; } */
.placeholder-yellow-700 /* ::placeholder { color: #b7791f; } */
.placeholder-yellow-800 /* ::placeholder { color: #975a16; } */
.placeholder-yellow-900 /* ::placeholder { color: #744210; } */
.placeholder-green-100 /* ::placeholder { color: #f0fff4; } */
.placeholder-green-200 /* ::placeholder { color: #c6f6d5; } */
.placeholder-green-300 /* ::placeholder { color: #9ae6b4; } */
.placeholder-green-400 /* ::placeholder { color: #68d391; } */
.placeholder-green-500 /* ::placeholder { color: #48bb78; } */
.placeholder-green-600 /* ::placeholder { color: #38a169; } */
.placeholder-green-700 /* ::placeholder { color: #2f855a; } */
.placeholder-green-800 /* ::placeholder { color: #276749; } */
.placeholder-green-900 /* ::placeholder { color: #22543d; } */
.placeholder-teal-100 /* ::placeholder { color: #e6fffa; } */
.placeholder-teal-200 /* ::placeholder { color: #b2f5ea; } */
.placeholder-teal-300 /* ::placeholder { color: #81e6d9; } */
.placeholder-teal-400 /* ::placeholder { color: #4fd1c5; } */
.placeholder-teal-500 /* ::placeholder { color: #38b2ac; } */
.placeholder-teal-600 /* ::placeholder { color: #319795; } */
.placeholder-teal-700 /* ::placeholder { color: #2c7a7b; } */
.placeholder-teal-800 /* ::placeholder { color: #285e61; } */
.placeholder-teal-900 /* ::placeholder { color: #234e52; } */
.placeholder-blue-100 /* ::placeholder { color: #ebf8ff; } */
.placeholder-blue-200 /* ::placeholder { color: #bee3f8; } */
.placeholder-blue-300 /* ::placeholder { color: #90cdf4; } */
.placeholder-blue-400 /* ::placeholder { color: #63b3ed; } */
.placeholder-blue-500 /* ::placeholder { color: #4299e1; } */
.placeholder-blue-600 /* ::placeholder { color: #3182ce; } */
.placeholder-blue-700 /* ::placeholder { color: #2b6cb0; } */
.placeholder-blue-800 /* ::placeholder { color: #2c5282; } */
.placeholder-blue-900 /* ::placeholder { color: #2a4365; } */
.placeholder-indigo-100 /* ::placeholder { color: #ebf4ff; } */
.placeholder-indigo-200 /* ::placeholder { color: #c3dafe; } */
.placeholder-indigo-300 /* ::placeholder { color: #a3bffa; } */
.placeholder-indigo-400 /* ::placeholder { color: #7f9cf5; } */
.placeholder-indigo-500 /* ::placeholder { color: #667eea; } */
.placeholder-indigo-600 /* ::placeholder { color: #5a67d8; } */
.placeholder-indigo-700 /* ::placeholder { color: #4c51bf; } */
.placeholder-indigo-800 /* ::placeholder { color: #434190; } */
.placeholder-indigo-900 /* ::placeholder { color: #3c366b; } */
.placeholder-purple-100 /* ::placeholder { color: #faf5ff; } */
.placeholder-purple-200 /* ::placeholder { color: #e9d8fd; } */
.placeholder-purple-300 /* ::placeholder { color: #d6bcfa; } */
.placeholder-purple-400 /* ::placeholder { color: #b794f4; } */
.placeholder-purple-500 /* ::placeholder { color: #9f7aea; } */
.placeholder-purple-600 /* ::placeholder { color: #805ad5; } */
.placeholder-purple-700 /* ::placeholder { color: #6b46c1; } */
.placeholder-purple-800 /* ::placeholder { color: #553c9a; } */
.placeholder-purple-900 /* ::placeholder { color: #44337a; } */
.placeholder-pink-100 /* ::placeholder { color: #fff5f7; } */
.placeholder-pink-200 /* ::placeholder { color: #fed7e2; } */
.placeholder-pink-300 /* ::placeholder { color: #fbb6ce; } */
.placeholder-pink-400 /* ::placeholder { color: #f687b3; } */
.placeholder-pink-500 /* ::placeholder { color: #ed64a6; } */
.placeholder-pink-600 /* ::placeholder { color: #d53f8c; } */
.placeholder-pink-700 /* ::placeholder { color: #b83280; } */
.placeholder-pink-800 /* ::placeholder { color: #97266d; } */
.placeholder-pink-900 /* ::placeholder { color: #702459; } */

/*
* Text Align
* --------------------
* Utilities for controlling the alignment of text.
* By default, only responsive variants are generated for text alignment utilities.
*/

.text-left /* text-align: left; */
.text-center /* text-align: center; */
.text-right /* text-align: right; */
.text-justify /* text-align: justify; */

/*
* Text Color
* --------------------
* Utilities for controlling the text color of an element.
* By default, only responsive, hover and focus variants are generated for text color utilities.
*/

.text-transparent /* color: transparent; */
.text-black /* color: #000; */
.text-white /* color: #fff; */
.text-gray-100 /* color: #f7fafc; */
.text-gray-200 /* color: #edf2f7; */
.text-gray-300 /* color: #e2e8f0; */
.text-gray-400 /* color: #cbd5e0; */
.text-gray-500 /* color: #a0aec0; */
.text-gray-600 /* color: #718096; */
.text-gray-700 /* color: #4a5568; */
.text-gray-800 /* color: #2d3748; */
.text-gray-900 /* color: #1a202c; */
.text-red-100 /* color: #fff5f5; */
.text-red-200 /* color: #fed7d7; */
.text-red-300 /* color: #feb2b2; */
.text-red-400 /* color: #fc8181; */
.text-red-500 /* color: #f56565; */
.text-red-600 /* color: #e53e3e; */
.text-red-700 /* color: #c53030; */
.text-red-800 /* color: #9b2c2c; */
.text-red-900 /* color: #742a2a; */
.text-orange-100 /* color: #fffaf0; */
.text-orange-200 /* color: #feebc8; */
.text-orange-300 /* color: #fbd38d; */
.text-orange-400 /* color: #f6ad55; */
.text-orange-500 /* color: #ed8936; */
.text-orange-600 /* color: #dd6b20; */
.text-orange-700 /* color: #c05621; */
.text-orange-800 /* color: #9c4221; */
.text-orange-900 /* color: #7b341e; */
.text-yellow-100 /* color: #fffff0; */
.text-yellow-200 /* color: #fefcbf; */
.text-yellow-300 /* color: #faf089; */
.text-yellow-400 /* color: #f6e05e; */
.text-yellow-500 /* color: #ecc94b; */
.text-yellow-600 /* color: #d69e2e; */
.text-yellow-700 /* color: #b7791f; */
.text-yellow-800 /* color: #975a16; */
.text-yellow-900 /* color: #744210; */
.text-green-100 /* color: #f0fff4; */
.text-green-200 /* color: #c6f6d5; */
.text-green-300 /* color: #9ae6b4; */
.text-green-400 /* color: #68d391; */
.text-green-500 /* color: #48bb78; */
.text-green-600 /* color: #38a169; */
.text-green-700 /* color: #2f855a; */
.text-green-800 /* color: #276749; */
.text-green-900 /* color: #22543d; */
.text-teal-100 /* color: #e6fffa; */
.text-teal-200 /* color: #b2f5ea; */
.text-teal-300 /* color: #81e6d9; */
.text-teal-400 /* color: #4fd1c5; */
.text-teal-500 /* color: #38b2ac; */
.text-teal-600 /* color: #319795; */
.text-teal-700 /* color: #2c7a7b; */
.text-teal-800 /* color: #285e61; */
.text-teal-900 /* color: #234e52; */
.text-blue-100 /* color: #ebf8ff; */
.text-blue-200 /* color: #bee3f8; */
.text-blue-300 /* color: #90cdf4; */
.text-blue-400 /* color: #63b3ed; */
.text-blue-500 /* color: #4299e1; */
.text-blue-600 /* color: #3182ce; */
.text-blue-700 /* color: #2b6cb0; */
.text-blue-800 /* color: #2c5282; */
.text-blue-900 /* color: #2a4365; */
.text-indigo-100 /* color: #ebf4ff; */
.text-indigo-200 /* color: #c3dafe; */
.text-indigo-300 /* color: #a3bffa; */
.text-indigo-400 /* color: #7f9cf5; */
.text-indigo-500 /* color: #667eea; */
.text-indigo-600 /* color: #5a67d8; */
.text-indigo-700 /* color: #4c51bf; */
.text-indigo-800 /* color: #434190; */
.text-indigo-900 /* color: #3c366b; */
.text-purple-100 /* color: #faf5ff; */
.text-purple-200 /* color: #e9d8fd; */
.text-purple-300 /* color: #d6bcfa; */
.text-purple-400 /* color: #b794f4; */
.text-purple-500 /* color: #9f7aea; */
.text-purple-600 /* color: #805ad5; */
.text-purple-700 /* color: #6b46c1; */
.text-purple-800 /* color: #553c9a; */
.text-purple-900 /* color: #44337a; */
.text-pink-100 /* color: #fff5f7; */
.text-pink-200 /* color: #fed7e2; */
.text-pink-300 /* color: #fbb6ce; */
.text-pink-400 /* color: #f687b3; */
.text-pink-500 /* color: #ed64a6; */
.text-pink-600 /* color: #d53f8c; */
.text-pink-700 /* color: #b83280; */
.text-pink-800 /* color: #97266d; */
.text-pink-900 /* color: #702459; */

/*
* Text Decoration
* --------------------
* Utilities for controlling the decoration of text.
* By default, only responsive, hover and focus variants are generated for text decoration utilities.
*/

.underline /* text-decoration: underline; */
.line-through /* text-decoration: line-through; */
.no-underline /* text-decoration: none; */

/*
* Text Transform
* --------------------
* Utilities for controlling the transformation of text.
* By default, only responsive variants are generated for text transformation utilities.
*/

.uppercase /* text-transform: uppercase; */
.lowercase /* text-transform: lowercase; */
.capitalize /* text-transform: capitalize; */
.normal-case /* text-transform: none; */

/*
* Vertical Align
* --------------------
* Utilities for controlling the vertical alignment of an inline or table-cell box.
* By default, only responsive variants are generated for vertical alignment utilities.
*/

.align-baseline /* vertical-align: baseline; */
.align-top /* vertical-align: top; */
.align-middle /* vertical-align: middle; */
.align-bottom /* vertical-align: bottom; */
.align-text-top /* vertical-align: text-top; */
.align-text-bottom /* vertical-align: text-bottom; */

/*
* Whitespace
* --------------------
* Utilities for controlling an element's white-space property.
* By default, only responsive variants are generated for whitespace utilities.
*/

.whitespace-normal /* white-space: normal; */
.whitespace-no-wrap /* white-space: nowrap; */
.whitespace-pre /* white-space: pre; */
.whitespace-pre-line /* white-space: pre-line; */
.whitespace-pre-wrap /* white-space: pre-wrap; */

/*
* Word Break
* --------------------
* Utilities for controlling word breaks in an element.
* By default, only responsive variants are generated for word break utilities.
*/

.break-normal /* word-break: normal; overflow-wrap: normal */
.break-words /* overflow-wrap: break-word; */
.break-all /* word-break: break-all; */
.truncate /* overflow: hidden; text-overflow: ellipsis; white-space: nowrap */

/* *******************************************************************************************
* BACKGROUNDS
* ******************************************************************************************* */

/*
* BACKGROUND ATTACHMENT
* --------------------
* Utilities for controlling how a background image behaves when scrolling.
* By default, only responsive variants are generated for background attachment utilities.
*/

.bg-fixed /* background-attachment: fixed; */
.bg-local /* background-attachment: local; */
.bg-scroll /* background-attachment: scroll; */

/*
* BACKGROUND COLOR
* --------------------
* Utilities for controlling how a background image behaves when scrolling.
* By default, only responsive, hover and focus variants are generated for background color utilities.
*/

.bg-transparent /* background-color: transparent; */
.bg-black /* background-color: #000; */
.bg-white /* background-color: #fff; */
.bg-gray-100 /* background-color: #f7fafc; */
.bg-gray-200 /* background-color: #edf2f7; */
.bg-gray-300 /* background-color: #e2e8f0; */
.bg-gray-400 /* background-color: #cbd5e0; */
.bg-gray-500 /* background-color: #a0aec0; */
.bg-gray-600 /* background-color: #718096; */
.bg-gray-700 /* background-color: #4a5568; */
.bg-gray-800 /* background-color: #2d3748; */
.bg-gray-900 /* background-color: #1a202c; */
.bg-red-100 /* background-color: #fff5f5; */
.bg-red-200 /* background-color: #fed7d7; */
.bg-red-300 /* background-color: #feb2b2; */
.bg-red-400 /* background-color: #fc8181; */
.bg-red-500 /* background-color: #f56565; */
.bg-red-600 /* background-color: #e53e3e; */
.bg-red-700 /* background-color: #c53030; */
.bg-red-800 /* background-color: #9b2c2c; */
.bg-red-900 /* background-color: #742a2a; */
.bg-orange-100 /* background-color: #fffaf0; */
.bg-orange-200 /* background-color: #feebc8; */
.bg-orange-300 /* background-color: #fbd38d; */
.bg-orange-400 /* background-color: #f6ad55; */
.bg-orange-500 /* background-color: #ed8936; */
.bg-orange-600 /* background-color: #dd6b20; */
.bg-orange-700 /* background-color: #c05621; */
.bg-orange-800 /* background-color: #9c4221; */
.bg-orange-900 /* background-color: #7b341e; */
.bg-yellow-100 /* background-color: #fffff0; */
.bg-yellow-200 /* background-color: #fefcbf; */
.bg-yellow-300 /* background-color: #faf089; */
.bg-yellow-400 /* background-color: #f6e05e; */
.bg-yellow-500 /* background-color: #ecc94b; */
.bg-yellow-600 /* background-color: #d69e2e; */
.bg-yellow-700 /* background-color: #b7791f; */
.bg-yellow-800 /* background-color: #975a16; */
.bg-yellow-900 /* background-color: #744210; */
.bg-green-100 /* background-color: #f0fff4; */
.bg-green-200 /* background-color: #c6f6d5; */
.bg-green-300 /* background-color: #9ae6b4; */
.bg-green-400 /* background-color: #68d391; */
.bg-green-500 /* background-color: #48bb78; */
.bg-green-600 /* background-color: #38a169; */
.bg-green-700 /* background-color: #2f855a; */
.bg-green-800 /* background-color: #276749; */
.bg-green-900 /* background-color: #22543d; */
.bg-teal-100 /* background-color: #e6fffa; */
.bg-teal-200 /* background-color: #b2f5ea; */
.bg-teal-300 /* background-color: #81e6d9; */
.bg-teal-400 /* background-color: #4fd1c5; */
.bg-teal-500 /* background-color: #38b2ac; */
.bg-teal-600 /* background-color: #319795; */
.bg-teal-700 /* background-color: #2c7a7b; */
.bg-teal-800 /* background-color: #285e61; */
.bg-teal-900 /* background-color: #234e52; */
.bg-blue-100 /* background-color: #ebf8ff; */
.bg-blue-200 /* background-color: #bee3f8; */
.bg-blue-300 /* background-color: #90cdf4; */
.bg-blue-400 /* background-color: #63b3ed; */
.bg-blue-500 /* background-color: #4299e1; */
.bg-blue-600 /* background-color: #3182ce; */
.bg-blue-700 /* background-color: #2b6cb0; */
.bg-blue-800 /* background-color: #2c5282; */
.bg-blue-900 /* background-color: #2a4365; */
.bg-indigo-100 /* background-color: #ebf4ff; */
.bg-indigo-200 /* background-color: #c3dafe; */
.bg-indigo-300 /* background-color: #a3bffa; */
.bg-indigo-400 /* background-color: #7f9cf5; */
.bg-indigo-500 /* background-color: #667eea; */
.bg-indigo-600 /* background-color: #5a67d8; */
.bg-indigo-700 /* background-color: #4c51bf; */
.bg-indigo-800 /* background-color: #434190; */
.bg-indigo-900 /* background-color: #3c366b; */
.bg-purple-100 /* background-color: #faf5ff; */
.bg-purple-200 /* background-color: #e9d8fd; */
.bg-purple-300 /* background-color: #d6bcfa; */
.bg-purple-400 /* background-color: #b794f4; */
.bg-purple-500 /* background-color: #9f7aea; */
.bg-purple-600 /* background-color: #805ad5; */
.bg-purple-700 /* background-color: #6b46c1; */
.bg-purple-800 /* background-color: #553c9a; */
.bg-purple-900 /* background-color: #44337a; */
.bg-pink-100 /* background-color: #fff5f7; */
.bg-pink-200 /* background-color: #fed7e2; */
.bg-pink-300 /* background-color: #fbb6ce; */
.bg-pink-400 /* background-color: #f687b3; */
.bg-pink-500 /* background-color: #ed64a6; */
.bg-pink-600 /* background-color: #d53f8c; */
.bg-pink-700 /* background-color: #b83280; */
.bg-pink-800 /* background-color: #97266d; */
.bg-pink-900 /* background-color: #702459; */

/*
* BACKGROUND POSITION
* --------------------
* Utilities for controlling how a background image behaves when scrolling.
* By default, only responsive variants are generated for background position utilities.
*/

.bg-bottom /* background-position: bottom; */
.bg-center /* background-position: center; */
.bg-left /* background-position: left; */
.bg-left-bottom /* background-position: left bottom; */
.bg-left-top /* background-position: left top; */
.bg-right /* background-position: right; */
.bg-right-bottom /* background-position: right bottom; */
.bg-right-top /* background-position: right top; */
.bg-top /* background-position: top; */

/*
* BACKGROUND REPEAT
* --------------------
* Utilities for controlling the repetition of an element's background image.
* By default, only responsive variants are generated for background repeat utilities.
*/

.bg-repeat /* background-repeat: repeat; */
.bg-no-repeat /* background-repeat: no-repeat; */
.bg-repeat-x /* background-repeat: repeat-x; */
.bg-repeat-y /* background-repeat: repeat-y; */
.bg-repeat-round /* background-repeat: round; */
.bg-repeat-space /* background-repeat: space; */

/*
* BACKGROUND SIZE
* --------------------
* Utilities for controlling the background size of an element's background image.
* By default, only responsive variants are generated for background size utilities.
*/

.bg-auto /* background-size: auto; */
.bg-cover /* background-size: cover; */
.bg-contain /* background-size: contain; */

/* *******************************************************************************************
* BORDERS
* ******************************************************************************************* */

/*
* BORDER COLOR
* --------------------
* Utilities for controlling the color of an element's borders.
* By default, only responsive, hover and focus variants are generated for border color utilities.
*/

.border-transparent /* border-color: transparent; */
.border-black /* border-color: #000; */
.border-white /* border-color: #fff; */
.border-gray-100 /* border-color: #f7fafc; */
.border-gray-200 /* border-color: #edf2f7; */
.border-gray-300 /* border-color: #e2e8f0; */
.border-gray-400 /* border-color: #cbd5e0; */
.border-gray-500 /* border-color: #a0aec0; */
.border-gray-600 /* border-color: #718096; */
.border-gray-700 /* border-color: #4a5568; */
.border-gray-800 /* border-color: #2d3748; */
.border-gray-900 /* border-color: #1a202c; */
.border-red-100 /* border-color: #fff5f5; */
.border-red-200 /* border-color: #fed7d7; */
.border-red-300 /* border-color: #feb2b2; */
.border-red-400 /* border-color: #fc8181; */
.border-red-500 /* border-color: #f56565; */
.border-red-600 /* border-color: #e53e3e; */
.border-red-700 /* border-color: #c53030; */
.border-red-800 /* border-color: #9b2c2c; */
.border-red-900 /* border-color: #742a2a; */
.border-orange-100 /* border-color: #fffaf0; */
.border-orange-200 /* border-color: #feebc8; */
.border-orange-300 /* border-color: #fbd38d; */
.border-orange-400 /* border-color: #f6ad55; */
.border-orange-500 /* border-color: #ed8936; */
.border-orange-600 /* border-color: #dd6b20; */
.border-orange-700 /* border-color: #c05621; */
.border-orange-800 /* border-color: #9c4221; */
.border-orange-900 /* border-color: #7b341e; */
.border-yellow-100 /* border-color: #fffff0; */
.border-yellow-200 /* border-color: #fefcbf; */
.border-yellow-300 /* border-color: #faf089; */
.border-yellow-400 /* border-color: #f6e05e; */
.border-yellow-500 /* border-color: #ecc94b; */
.border-yellow-600 /* border-color: #d69e2e; */
.border-yellow-700 /* border-color: #b7791f; */
.border-yellow-800 /* border-color: #975a16; */
.border-yellow-900 /* border-color: #744210; */
.border-green-100 /* border-color: #f0fff4; */
.border-green-200 /* border-color: #c6f6d5; */
.border-green-300 /* border-color: #9ae6b4; */
.border-green-400 /* border-color: #68d391; */
.border-green-500 /* border-color: #48bb78; */
.border-green-600 /* border-color: #38a169; */
.border-green-700 /* border-color: #2f855a; */
.border-green-800 /* border-color: #276749; */
.border-green-900 /* border-color: #22543d; */
.border-teal-100 /* border-color: #e6fffa; */
.border-teal-200 /* border-color: #b2f5ea; */
.border-teal-300 /* border-color: #81e6d9; */
.border-teal-400 /* border-color: #4fd1c5; */
.border-teal-500 /* border-color: #38b2ac; */
.border-teal-600 /* border-color: #319795; */
.border-teal-700 /* border-color: #2c7a7b; */
.border-teal-800 /* border-color: #285e61; */
.border-teal-900 /* border-color: #234e52; */
.border-blue-100 /* border-color: #ebf8ff; */
.border-blue-200 /* border-color: #bee3f8; */
.border-blue-300 /* border-color: #90cdf4; */
.border-blue-400 /* border-color: #63b3ed; */
.border-blue-500 /* border-color: #4299e1; */
.border-blue-600 /* border-color: #3182ce; */
.border-blue-700 /* border-color: #2b6cb0; */
.border-blue-800 /* border-color: #2c5282; */
.border-blue-900 /* border-color: #2a4365; */
.border-indigo-100 /* border-color: #ebf4ff; */
.border-indigo-200 /* border-color: #c3dafe; */
.border-indigo-300 /* border-color: #a3bffa; */
.border-indigo-400 /* border-color: #7f9cf5; */
.border-indigo-500 /* border-color: #667eea; */
.border-indigo-600 /* border-color: #5a67d8; */
.border-indigo-700 /* border-color: #4c51bf; */
.border-indigo-800 /* border-color: #434190; */
.border-indigo-900 /* border-color: #3c366b; */
.border-purple-100 /* border-color: #faf5ff; */
.border-purple-200 /* border-color: #e9d8fd; */
.border-purple-300 /* border-color: #d6bcfa; */
.border-purple-400 /* border-color: #b794f4; */
.border-purple-500 /* border-color: #9f7aea; */
.border-purple-600 /* border-color: #805ad5; */
.border-purple-700 /* border-color: #6b46c1; */
.border-purple-800 /* border-color: #553c9a; */
.border-purple-900 /* border-color: #44337a; */
.border-pink-100 /* border-color: #fff5f7; */
.border-pink-200 /* border-color: #fed7e2; */
.border-pink-300 /* border-color: #fbb6ce; */
.border-pink-400 /* border-color: #f687b3; */
.border-pink-500 /* border-color: #ed64a6; */
.border-pink-600 /* border-color: #d53f8c; */
.border-pink-700 /* border-color: #b83280; */
.border-pink-800 /* border-color: #97266d; */
.border-pink-900 /* border-color: #702459; */

/*
* BORDER STYLE
* --------------------
* Utilities for controlling the style of an element's borders.
* By default, only responsive variants are generated for border style utilities.
*/

.border-solid /* border-style: solid; */
.border-dashed /* border-style: dashed; */
.border-dotted /* border-style: dotted; */
.border-double /* border-style: double; */
.border-none /* border-style: none; */

/*
* BORDER WIDTH
* --------------------
* Utilities for controlling the width of an element's borders.
* By default, only responsive variants are generated for border width utilities.
*/

.border /* border-width: 1px; */
.border-0 /* border-width: 0; */
.border-2 /* border-width: 2px; */
.border-4 /* border-width: 4px; */
.border-8 /* border-width: 8px; */
.border-t /* border-top-width: 1px; */
.border-r /* border-right-width: 1px; */
.border-b /* border-bottom-width: 1px; */
.border-l /* border-left-width: 1px; */
.border-t-0 /* border-top-width: 0; */
.border-r-0 /* border-right-width: 0; */
.border-b-0 /* border-bottom-width: 0; */
.border-l-0 /* border-left-width: 0; */
.border-t-2 /* border-top-width: 2px; */
.border-r-2 /* border-right-width: 2px; */
.border-b-2 /* border-bottom-width: 2px; */
.border-l-2 /* border-left-width: 2px; */
.border-t-4 /* border-top-width: 4px; */
.border-r-4 /* border-right-width: 4px; */
.border-b-4 /* border-bottom-width: 4px; */
.border-l-4 /* border-left-width: 4px; */
.border-t-8 /* border-top-width: 8px; */
.border-r-8 /* border-right-width: 8px; */
.border-b-8 /* border-bottom-width: 8px; */
.border-l-8 /* border-left-width: 8px; */

/*
* BORDER RADIUS
* --------------------
* Utilities for controlling the border radius of an element.
* By default, only responsive variants are generated for border radius utilities.
*/

.rounded-none /* border-radius: 0; */
.rounded-sm /* border-radius: 0.125rem; */
.rounded /* border-radius: 0.25rem; */
.rounded-md /* border-radius: 0.375rem; */
.rounded-lg /* border-radius: 0.5rem; */
.rounded-full /* border-radius: 9999px; */
.rounded-t-none /* border-top-left-radius: 0; border-top-right-radius: 0; */
.rounded-r-none /* border-top-right-radius: 0; border-bottom-right-radius: 0; */
.rounded-b-none /* border-bottom-right-radius: 0; border-bottom-left-radius: 0; */
.rounded-l-none /* border-top-left-radius: 0; border-bottom-left-radius: 0; */
.rounded-t-sm /* border-top-left-radius: 0.125rem; border-top-right-radius: 0.125rem; */
.rounded-r-sm /* border-top-right-radius: 0.125rem; border-bottom-right-radius: 0.125rem; */
.rounded-b-sm /* border-bottom-right-radius: 0.125rem; border-bottom-left-radius: 0.125rem; */
.rounded-l-sm /* border-top-left-radius: 0.125rem; border-bottom-left-radius: 0.125rem; */
.rounded-t /* border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; */
.rounded-r /* border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; */
.rounded-b /* border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; */
.rounded-l /* border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; */
.rounded-t-md /* border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; */
.rounded-r-md /* border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; */
.rounded-b-md /* border-bottom-right-radius: 0.375rem; border-bottom-left-radius: 0.375rem; */
.rounded-l-md /* border-top-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem; */
.rounded-t-lg /* border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; */
.rounded-r-lg /* border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; */
.rounded-b-lg /* border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; */
.rounded-l-lg /* border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; */
.rounded-t-full /* border-top-left-radius: 9999px; border-top-right-radius: 9999px; */
.rounded-r-full /* border-top-right-radius: 9999px; border-bottom-right-radius: 9999px; */
.rounded-b-full /* border-bottom-right-radius: 9999px; border-bottom-left-radius: 9999px; */
.rounded-l-full /* border-top-left-radius: 9999px; border-bottom-left-radius: 9999px; */
.rounded-tl-none /* border-top-left-radius: 0; */
.rounded-tr-none /* border-top-right-radius: 0; */
.rounded-br-none /* border-bottom-right-radius: 0; */
.rounded-bl-none /* border-bottom-left-radius: 0; */
.rounded-tl-sm /* border-top-left-radius: 0.125rem; */
.rounded-tr-sm /* border-top-right-radius: 0.125rem; */
.rounded-br-sm /* border-bottom-right-radius: 0.125rem; */
.rounded-bl-sm /* border-bottom-left-radius: 0.125rem; */
.rounded-tl /* border-top-left-radius: 0.25rem; */
.rounded-tr /* border-top-right-radius: 0.25rem; */
.rounded-br /* border-bottom-right-radius: 0.25rem; */
.rounded-bl /* border-bottom-left-radius: 0.25rem; */
.rounded-tl-md /* border-top-left-radius: 0.375rem; */
.rounded-tr-md /* border-top-right-radius: 0.375rem; */
.rounded-br-md /* border-bottom-right-radius: 0.375rem; */
.rounded-bl-md /* border-bottom-left-radius: 0.375rem; */
.rounded-tl-lg /* border-top-left-radius: 0.5rem; */
.rounded-tr-lg /* border-top-right-radius: 0.5rem; */
.rounded-br-lg /* border-bottom-right-radius: 0.5rem; */
.rounded-bl-lg /* border-bottom-left-radius: 0.5rem; */
.rounded-tl-full /* border-top-left-radius: 9999px; */
.rounded-tr-full /* border-top-right-radius: 9999px; */
.rounded-br-full /* border-bottom-right-radius: 9999px; */
.rounded-bl-full /* border-bottom-left-radius: 9999px; */

/* *******************************************************************************************
* TABLES
* ******************************************************************************************* */

/*
* TABLE LAYOUT
* --------------------
* Utilities for controlling the table layout algorithm.
* By default, only responsive variants are generated for table layout utilities.
*/

.table-auto /* table-layout: auto; */
.table-fixed /* table-layout: fixed; */

/*
* BORDER COLLAPSE
* --------------------
* Utilities for controlling whether table borders should collapse or be separated.
* By default, only responsive variants are generated for border collapse utilities.
*/

.border-collapse /* border-collapse: collapse; */
.border-separate /* border-collapse: separate; */

/* *******************************************************************************************
* EFFECTS
* ******************************************************************************************* */

/*
* BOX SHADOW
* --------------------
* Utilities for controlling the box shadow of an element.
* By default, only responsive, hover and focus variants are generated for box shadow utilities.
*/

.shadow-xs /* box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05); */
.shadow-sm /* box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); */
.shadow /* box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); */
.shadow-md /* box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); */
.shadow-lg /* box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); */
.shadow-xl /* box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); */
.shadow-2xl /* box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); */
.shadow-inner /* box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06); */
.shadow-outline /* box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5); */
.shadow-none /* box-shadow: none; */

/*
* OPACITY
* --------------------
* Utilities for controlling the opacity of an element.
* By default, only responsive, hover and focus variants are generated for opacity utilities.
*/

.opacity-100 /* opacity: 1; */
.opacity-75 /* opacity: .75; */
.opacity-50 /* opacity: .5; */
.opacity-25 /* opacity: .25; */
.opacity-0 /* opacity: 0; */

/* *******************************************************************************************
* TRANSITIONS
* ******************************************************************************************* */

/*
* TRANSITION PROPERTY
* --------------------
* Utilities for controlling which CSS properties transition.
* By default, only responsive variants are generated for transition-property utilities.
*/

.transition-none /* transition-property: none; */
.transition-all /* transition-property: all; */
.transition /* transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform; */
.transition-colors /* transition-property: background-color, border-color, color, fill, stroke; */
.transition-opacity /* transition-property: opacity; */
.transition-shadow /* transition-property: box-shadow; */
.transition-transform /* transition-property: transform; */

/*
* TRANSITION DURATION
* --------------------
* Utilities for controlling the duration of CSS transitions.
* By default, only responsive variants are generated for transition-duration utilities.
*/

.duration-75 /* transition-duration: 75ms; */
.duration-100 /* transition-duration: 100ms; */
.duration-150 /* transition-duration: 150ms; */
.duration-200 /* transition-duration: 200ms; */
.duration-300 /* transition-duration: 300ms; */
.duration-500 /* transition-duration: 500ms; */
.duration-700 /* transition-duration: 700ms; */
.duration-1000 /* transition-duration: 1000ms; */

/*
* TRANSITION TIMING FUNCTION
* --------------------
* Utilities for controlling the easing of CSS transitions.
* By default, only responsive variants are generated for transition-timing-function utilities.
*/

.ease-linear /* transition-timing-function: linear; */
.ease-in /* transition-timing-function: cubic-bezier(0.4, 0, 1, 1); */
.ease-out /* transition-timing-function: cubic-bezier(0, 0, 0.2, 1); */
.ease-in-out /* transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); */

/* *******************************************************************************************
* TRANSFORMS
* ******************************************************************************************* */

/*
* SCALE
* --------------------
* Utilities for scaling elements with transform.
* By default, only responsive, hover and focus variants are generated for scale utilities.
*/

.scale-0 /* --transform-scale-x: 0; --transform-scale-y: 0; */
.scale-50 /* --transform-scale-x: .5; --transform-scale-y: .5; */
.scale-75 /* --transform-scale-x: .75; --transform-scale-y: .75; */
.scale-90 /* --transform-scale-x: .9; --transform-scale-y: .9; */
.scale-95 /* --transform-scale-x: .95; --transform-scale-y: .95; */
.scale-100 /* --transform-scale-x: 1; --transform-scale-y: 1; */
.scale-105 /* --transform-scale-x: 1.05; --transform-scale-y: 1.05; */
.scale-110 /* --transform-scale-x: 1.1; --transform-scale-y: 1.1; */
.scale-125 /* --transform-scale-x: 1.25; --transform-scale-y: 1.25; */
.scale-150 /* --transform-scale-x: 1.5; --transform-scale-y: 1.5; */
.scale-x-0 /* --transform-scale-x: 0; */
.scale-x-50 /* --transform-scale-x: .5; */
.scale-x-75 /* --transform-scale-x: .75; */
.scale-x-90 /* --transform-scale-x: .9; */
.scale-x-95 /* --transform-scale-x: .95; */
.scale-x-100 /* --transform-scale-x: 1; */
.scale-x-105 /* --transform-scale-x: 1.05; */
.scale-x-110 /* --transform-scale-x: 1.1; */
.scale-x-125 /* --transform-scale-x: 1.25; */
.scale-x-150 /* --transform-scale-x: 1.5; */
.scale-y-0 /* --transform-scale-y: 0; */
.scale-y-50 /* --transform-scale-y: .5; */
.scale-y-75 /* --transform-scale-y: .75; */
.scale-y-90 /* --transform-scale-y: .9; */
.scale-y-95 /* --transform-scale-y: .95; */
.scale-y-100 /* --transform-scale-y: 1; */
.scale-y-105 /* --transform-scale-y: 1.05; */
.scale-y-110 /* --transform-scale-y: 1.1; */
.scale-y-125 /* --transform-scale-y: 1.25; */
.scale-y-150 /* --transform-scale-y: 1.5; */

/*
* ROTATE
* --------------------
* Utilities for rotating elements with transform.
* By default, only responsive, hover and focus variants are generated for rotate utilities.
*/

.rotate-0 /* --transform-rotate: 0; */
.rotate-45 /* --transform-rotate: 45deg; */
.rotate-90 /* --transform-rotate: 90deg; */
.rotate-180 /* --transform-rotate: 180deg; */
.-rotate-180 /* --transform-rotate: -180deg; */
.-rotate-90 /* --transform-rotate: -90deg; */
.-rotate-45 /* --transform-rotate: -45deg; */

/*
* TRANSLATE
* --------------------
* Utilities for translating elements with transform.
* By default, only responsive, hover and focus variants are generated for translate utilities.
*/

.translate-x-0 /* --transform-translate-x: 0; */
.translate-x-1 /* --transform-translate-x: 0.25rem; */
.translate-x-2 /* --transform-translate-x: 0.5rem; */
.translate-x-3 /* --transform-translate-x: 0.75rem; */
.translate-x-4 /* --transform-translate-x: 1rem; */
.translate-x-5 /* --transform-translate-x: 1.25rem; */
.translate-x-6 /* --transform-translate-x: 1.5rem; */
.translate-x-8 /* --transform-translate-x: 2rem; */
.translate-x-10 /* --transform-translate-x: 2.5rem; */
.translate-x-12 /* --transform-translate-x: 3rem; */
.translate-x-16 /* --transform-translate-x: 4rem; */
.translate-x-20 /* --transform-translate-x: 5rem; */
.translate-x-24 /* --transform-translate-x: 6rem; */
.translate-x-32 /* --transform-translate-x: 8rem; */
.translate-x-40 /* --transform-translate-x: 10rem; */
.translate-x-48 /* --transform-translate-x: 12rem; */
.translate-x-56 /* --transform-translate-x: 14rem; */
.translate-x-64 /* --transform-translate-x: 16rem; */
.translate-x-px /* --transform-translate-x: 1px; */
.-translate-x-1 /* --transform-translate-x: -0.25rem; */
.-translate-x-2 /* --transform-translate-x: -0.5rem; */
.-translate-x-3 /* --transform-translate-x: -0.75rem; */
.-translate-x-4 /* --transform-translate-x: -1rem; */
.-translate-x-5 /* --transform-translate-x: -1.25rem; */
.-translate-x-6 /* --transform-translate-x: -1.5rem; */
.-translate-x-8 /* --transform-translate-x: -2rem; */
.-translate-x-10 /* --transform-translate-x: -2.5rem; */
.-translate-x-12 /* --transform-translate-x: -3rem; */
.-translate-x-16 /* --transform-translate-x: -4rem; */
.-translate-x-20 /* --transform-translate-x: -5rem; */
.-translate-x-24 /* --transform-translate-x: -6rem; */
.-translate-x-32 /* --transform-translate-x: -8rem; */
.-translate-x-40 /* --transform-translate-x: -10rem; */
.-translate-x-48 /* --transform-translate-x: -12rem; */
.-translate-x-56 /* --transform-translate-x: -14rem; */
.-translate-x-64 /* --transform-translate-x: -16rem; */
.-translate-x-px /* --transform-translate-x: -1px; */
.-translate-x-full /* --transform-translate-x: -100%; */
.-translate-x-1/2 /* --transform-translate-x: -50%; */
.translate-x-1/2 /* --transform-translate-x: 50%; */
.translate-x-full /* --transform-translate-x: 100%; */
.translate-y-0 /* --transform-translate-y: 0; */
.translate-y-1 /* --transform-translate-y: 0.25rem; */
.translate-y-2 /* --transform-translate-y: 0.5rem; */
.translate-y-3 /* --transform-translate-y: 0.75rem; */
.translate-y-4 /* --transform-translate-y: 1rem; */
.translate-y-5 /* --transform-translate-y: 1.25rem; */
.translate-y-6 /* --transform-translate-y: 1.5rem; */
.translate-y-8 /* --transform-translate-y: 2rem; */
.translate-y-10 /* --transform-translate-y: 2.5rem; */
.translate-y-12 /* --transform-translate-y: 3rem; */
.translate-y-16 /* --transform-translate-y: 4rem; */
.translate-y-20 /* --transform-translate-y: 5rem; */
.translate-y-24 /* --transform-translate-y: 6rem; */
.translate-y-32 /* --transform-translate-y: 8rem; */
.translate-y-40 /* --transform-translate-y: 10rem; */
.translate-y-48 /* --transform-translate-y: 12rem; */
.translate-y-56 /* --transform-translate-y: 14rem; */
.translate-y-64 /* --transform-translate-y: 16rem; */
.translate-y-px /* --transform-translate-y: 1px; */
.-translate-y-1 /* --transform-translate-y: -0.25rem; */
.-translate-y-2 /* --transform-translate-y: -0.5rem; */
.-translate-y-3 /* --transform-translate-y: -0.75rem; */
.-translate-y-4 /* --transform-translate-y: -1rem; */
.-translate-y-5 /* --transform-translate-y: -1.25rem; */
.-translate-y-6 /* --transform-translate-y: -1.5rem; */
.-translate-y-8 /* --transform-translate-y: -2rem; */
.-translate-y-10 /* --transform-translate-y: -2.5rem; */
.-translate-y-12 /* --transform-translate-y: -3rem; */
.-translate-y-16 /* --transform-translate-y: -4rem; */
.-translate-y-20 /* --transform-translate-y: -5rem; */
.-translate-y-24 /* --transform-translate-y: -6rem; */
.-translate-y-32 /* --transform-translate-y: -8rem; */
.-translate-y-40 /* --transform-translate-y: -10rem; */
.-translate-y-48 /* --transform-translate-y: -12rem; */
.-translate-y-56 /* --transform-translate-y: -14rem; */
.-translate-y-64 /* --transform-translate-y: -16rem; */
.-translate-y-px /* --transform-translate-y: -1px; */
.-translate-y-full /* --transform-translate-y: -100%; */
.-translate-y-1/2 /* --transform-translate-y: -50%; */
.translate-y-1/2 /* --transform-translate-y: 50%; */
.translate-y-full /* --transform-translate-y: 100%; */

/*
* SKEW
* --------------------
* Utilities for translating elements with transform.
* By default, only responsive, hover and focus variants are generated for skew utilities.
*/

.skew-x-0 /* --transform-skew-x: 0; */
.skew-x-3 /* --transform-skew-x: 3deg; */
.skew-x-6 /* --transform-skew-x: 6deg; */
.skew-x-12 /* --transform-skew-x: 12deg; */
.-skew-x-12 /* --transform-skew-x: -12deg; */
.-skew-x-6 /* --transform-skew-x: -6deg; */
.-skew-x-3 /* --transform-skew-x: -3deg; */
.skew-y-0 /* --transform-skew-y: 0; */
.skew-y-3 /* --transform-skew-y: 3deg; */
.skew-y-6 /* --transform-skew-y: 6deg; */
.skew-y-12 /* --transform-skew-y: 12deg; */
.-skew-y-12 /* --transform-skew-y: -12deg; */
.-skew-y-6 /* --transform-skew-y: -6deg; */
.-skew-y-3 /* --transform-skew-y: -3deg; */

/*
* TRANSFORM ORIGIN
* --------------------
* Utilities for specifying the origin for an element's transformations.
* By default, only responsive variants are generated for transform-origin utilities.
*/

.origin-center /* transform-origin: center; */
.origin-top /* transform-origin: top; */
.origin-top-right /* transform-origin: top right; */
.origin-right /* transform-origin: right; */
.origin-bottom-right /* transform-origin: bottom right; */
.origin-bottom /* transform-origin: bottom; */
.origin-bottom-left /* transform-origin: bottom left; */
.origin-left /* transform-origin: left; */
.origin-top-left /* transform-origin: top left; */

/* *******************************************************************************************
* INTERACTIVITY
* ******************************************************************************************* */

/*
* APPEARANCE
* --------------------
* Utilities for suppressing native form control styling.
* By default, only responsive variants are generated for appearance utilities.
*/

.appearance-none /* appearance: none; */

/*
* CURSOR
* --------------------
* Utilities for controlling the cursor style when hovering over an element.
* By default, only responsive variants are generated for cursor utilities.
*/

.cursor-auto /* cursor: auto; */
.cursor-default /* cursor: default; */
.cursor-pointer /* cursor: pointer; */
.cursor-wait /* cursor: wait; */
.cursor-text /* cursor: text; */
.cursor-move /* cursor: move; */
.cursor-not-allowed /* cursor: not-allowed; */

/*
* OUTLINE
* --------------------
* Utilities for controlling an element's outline.
* By default, only focus variants are generated for outline utilities.
*/

.outline-none /* outline: 0; */

/*
* POINTER EVENTS
* --------------------
* Utilities for controlling whether an element responds to pointer events.
* By default, only responsive variants are generated for pointer event utilities.
*/

.pointer-events-none /* pointer-events: none; */
.pointer-events-auto /* pointer-events: auto; */

/*
* RESIZE
* --------------------
* Utilities for controlling how an element can be resized.
* By default, only responsive variants are generated for resizing utilities.
*/

.resize-none /* resize: none; */
.resize /* resize: both; */
.resize-y /* resize: vertical; */
.resize-x /* resize: horizontal; */

/*
* USER SELECT
* --------------------
* Utilities for controlling whether the user can select text in an element.
* By default, only responsive variants are generated for user-select utilities.
*/

.select-none /* user-select: none; */
.select-text /* user-select: text; */
.select-all /* user-select: all; */
.select-auto /* user-select: auto; */

/* *******************************************************************************************
* SVG
* ******************************************************************************************* */

/*
* FILL
* --------------------
* Utilities for styling the fill of SVG elements.
* By default, only responsive variants are generated for fill utilities.
*/

.fill-current /* fill: currentColor; */

/*
* STROKE
* --------------------
* Utilities for styling the stroke of SVG elements.
* By default, only responsive variants are generated for stroke utilities.
*/

.stroke-current /* stroke: currentColor; */

/*
* STROKE WIDTH
* --------------------
* Utilities for styling the stroke width of SVG elements.
* By default, only responsive variants are generated for stroke-width utilities.
*/

.stroke-0 /* stroke-width: 0; */
.stroke-1 /* stroke-width: 1; */
.stroke-2 /* stroke-width: 2; */

/* *******************************************************************************************
* ACCESSIBILITY
* ******************************************************************************************* */

/*
* SCREEN READERS
* --------------------
* Utilities for improving accessibility with screen readers.
* By default, only responsive, hover, focus and active variants are generated for accessibility utilities.
*/

.sr-only /* position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; */
.not-sr-only /* position: static; width: auto; height: auto; padding: 0; margin: 0; overflow: visible; clip: auto; white-space: normal; */

  • Python is an interpreted, high-level and general-purpose, dynamically typed programming language

  • It is also Object oriented, modular oriented and a scripting language.

  • In Python, everything is considered as an Object.

  • A python file has an extension of .py

  • Python follows Indentation to separate code blocks instead of flower brackets({}).

  • We can run a python file by the following command in cmd(Windows) or shell(mac/linux).

    $ python <filename.py> or $ python3 <filename.py>

By default, python doesn’t require any imports to run a python file.

Create and execute a program

  1. Open up a terminal/cmd
  2. Create the program: nano/cat > nameProgram.py
  3. Write the program and save it
  4. python nameProgram.py

Basic Datatypes

Data Type Description
int Integer values [0, 1, -2, 3]
float Floating point values [0.1, 4.532, -5.092]
char Characters [a, b, @, !, `]
str Strings [abc, AbC, A@B, sd!, `asa]
bool Boolean Values [True, False]
complex Complex numbers [2+3j, 4-1j]

Keywords


  • As of python3.8 there are 35 keywords
Keyword Description Category
True Boolean value for not False or 1 Value Keyword
False Boolean Value for not True or 0 Value Keyword
None No Value Value keyword
and returns true if both (oprand) are true (other language && ) Operator keyword
or returns true of either operands is true (other language
in returns true if word is in iterator Operator keyword
is returns true if id of variables are same Operator keyword
not returns opposite Boolean value Operator Keyword
if get into block if expression is true conditional
elif for more than 1 if checks conditional
else this block will be executed if condition is false conditional
for used for looping iteration
while used for looping iteration
break get out of loop iteration
continue skip for specific condition iteration
def make user defined function structure
class make user defined classes structure
lambda make anonymous function structure
with execute code within context manager’s scope structure
as alias for something structure
pass used for making empty structures(declaration) structure
return get value(s) from function, get out of function returning keyword
yield yields values instead of returning (are called generators) returning keyword
import import libraries/modules/packages import
from import specific function/classes from modules/packages import
try this block will be tried to get executed exception handling
except is any exception/error has occured it’ll be executed exception handling
finally It’ll be executed no matter exception occurs or not exception handling
raise throws any specific error/exception exception handling
assert throws an AssertionError if condition is false exception handling
async used to define asynchronous functions/co-routines asynchronous programming
await used to specify a point when control is taken back asynchronous programming
del deletes/unsets any user defined data variable handling
global used to access variables defined outside of function variable handling
nonlocal modify variables from different scopes variable handling

Operators


Operator Description
( ) grouping parenthesis, function call, tuple declaration
[ ] array indexing, also declaring lists etc.
! relational not, complement, ! a yields true or false
~ bitwise not, ones complement, ~a
- unary minus, - a
+ unary plus, + a
* multiply, a * b
/ divide, a / b
% modulo, a % b
+ add, a + b
- subtract, a - b
<< shift left, left operand is shifted left by right operand bits (multiply by 2)
>> shift right, left operand is shifted right by right operand bits (divide by 2)
< less than, result is true or false, a %lt; b
<= less than or equal, result is true or false, a <= b
> greater than, result is true or false, a > b
>= greater than or equal, result is true or false, a >= b
== equal, result is true or false, a == b
!= not equal, result is true or false, a != b
& bitwise and, a & b
^ bitwise exclusive or XOR, a ^ b
| bitwise or, a
&&, and relational and, result is true or false, a < b && c >= d
||, or relational or, result is true or false, a < b || c >= d
= store or assignment
+= add and store
-= subtract and store
*= multiply and store
/= divide and store
%= modulo and store
<<= shift left and store
>>= shift right and store
&= bitwise and and store
^= bitwise exclusive or and store
|= bitwise or and store
, separator as in ( y=x,z=++x )

Basic Data Structures

List

  • List is a collection which is ordered and changeable. Allows duplicate members.

  • Lists are created using square brackets:

1
thislist = ["apple", "banana", "cherry"] 
  • List items are ordered, changeable, and allow duplicate values.

  • List items are indexed, the first item has index [0], the second item has index [1] etc.

  • The list is changeable, meaning that we can change, add, and remove items in a list after it has been created.

  • To determine how many items a list has, use the len() function.

  • A list can contain different data types:

    1
    list1 = ["abc", 34, True, 40, "male"]
  • It is also possible to use the list() constructor when creating a new list

    1
    thislist = list(("apple", "banana", "cherry"))  # note the double round-brackets
  • pop() function removes the last value in the given list by default.

    1
    2
    3
    4
    5
    thislist = ["apple", "banana", "cherry"] 

    print(thislist.pop()) # cherry
    print(thislist.pop(0)) #apple

Tuple

  • Tuple is a collection which is ordered and unchangeable. Allows duplicate members.

  • A tuple is a collection which is ordered and unchangeable.

  • Tuples are written with round brackets.

    1
    thistuple = ("apple", "banana", "cherry")
  • Tuple items are ordered, unchangeable, and allow duplicate values.

  • Tuple items are indexed, the first item has index [0], the second item has index [1] etc.

  • When we say that tuples are ordered, it means that the items have a defined order, and that order will not change.

  • Tuples are unchangeable, meaning that we cannot change, add or remove items after the tuple has been created.

  • Since tuple are indexed, tuples can have items with the same value:

  • Tuples allow duplicate values:

    1
    thistuple = ("apple", "banana", "cherry", "apple", "cherry")
  • To determine how many items a tuple has, use the len()function:

    1
    2
    thistuple = ("apple", "banana", "cherry")
    print(len(thistuple))
  • To create a tuple with only one item, you have to add a comma after the item, otherwise Python will not recognize it as a tuple.

    1
    2
    3
    4
    5
    6
    thistuple = ("apple",)
    print(type(thistuple))

    # NOT a tuple
    thistuple = ("apple")
    print(type(thistuple))
  • It is also possible to use the tuple() constructor to make a tuple.

    1
    2
    3

    thistuple = tuple(("apple", "banana", "cherry")) # note the double round-brackets
    print(thistuple)

Set

  • Set is a collection which is unordered and unindexed. No duplicate members.

  • A set is a collection which is both unordered and unindexed.

    1
    thisset = {"apple", "banana", "cherry"}
  • Set items are unordered, unchangeable, and do not allow duplicate values.

  • Unordered means that the items in a set do not have a defined order.

  • Set items can appear in a different order every time you use them, and cannot be referred to by index or key.

  • Sets are unchangeable, meaning that we cannot change the items after the set has been created.

  • Duplicate values will be ignored.

  • To determine how many items a set has, use the len() method.

    1
    2
    3
    thisset = {"apple", "banana", "cherry"}

    print(len(thisset))
  • Set items can be of any data type:

    1
    2
    3
    4
    set1 = {"apple", "banana", "cherry"}
    set2 = {1, 5, 7, 9, 3}
    set3 = {True, False, False}
    set4 = {"abc", 34, True, 40, "male"}
  • It is also possible to use the set() constructor to make a set.

    1
    thisset = set(("apple", "banana", "cherry")) # note the double round-brackets
  • frozenset() is just an immutable version of Set. While elements of a set can be modified at any time, elements of the frozen set remain the same after creation.

1
2
3
set1 = {"apple", "banana", "cherry"}
frzset=frozenset(set1)
print(frzset)

Dictionary

  • Dictionary is a collection which is unordered and changeable. No duplicate members.

  • Dictionaries are used to store data values in key:value pairs.

  • Dictionaries are written with curly brackets, and have keys and values:

    1
    2
    3
    4
    5
    thisdict = {
    "brand": "Ford",
    "model": "Mustang",
    "year": 1964
    }
  • Dictionary items are presented in key:value pairs, and can be referred to by using the key name.

    1
    2
    3
    4
    5
    6
    thisdict = {
    "brand": "Ford",
    "model": "Mustang",
    "year": 1964
    }
    print(thisdict["brand"])
  • Dictionaries are changeable, meaning that we can change, add or remove items after the dictionary has been created.

  • Dictionaries cannot have two items with the same key.

  • Duplicate values will overwrite existing values.

  • To determine how many items a dictionary has, use the len() function.

    1
    print(len(thisdict))
  • The values in dictionary items can be of any data type

    1
    2
    3
    4
    5
    6
    thisdict = {
    "brand": "Ford",
    "electric": False,
    "year": 1964,
    "colors": ["red", "white", "blue"]
    }
  • pop() Function is used to remove a specific value from a dictionary. You can only use key bot the value. Unlike Lists you have to give a value to this function

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     car = {
    "brand": "Ford",
    "model": "Mustang",
    "year": 1964
    }

    x = car.pop("model")

    print(x)# Mustang
    print(car)#{'brand': 'Ford', 'year': 1964}

Conditional branching

1
2
3
4
5
6
if condition:
pass
elif condition2:
pass
else:
pass

Loops

Python has two primitive loop commands:

  1. while loops
  2. for loops

While loop

  • With the while loop we can execute a set of statements as long as a condition is true.

  • Example: Print i as long as i is less than 6

    1
    2
    3
    4
    i = 1
    while i < 6:
    print(i)
    i += 1
  • The while loop requires relevant variables to be ready, in this example we need to define an indexing variable, i, which we set to 1.

  • With the break statement we can stop the loop even if the while condition is true

  • With the continue statement we can stop the current iteration, and continue with the next.

  • With the else statement we can run a block of code once when the condition no longer is true.

For loop

  • A for loop is used for iterating over a sequence (that is either a list, a tuple, a dictionary, a set, or a string).

  • This is less like the for keyword in other programming languages, and works more like an iterator method as found in other object-orientated programming languages.

  • With the for loop we can execute a set of statements, once for each item in a list, tuple, set etc.

    1
    2
    3
    fruits = ["apple", "banana", "cherry"]
    for x in fruits:
    print(x)
  • The for loop does not require an indexing variable to set beforehand.

  • To loop through a set of code a specified number of times, we can use the range() function.

  • The range() function returns a sequence of numbers, starting from 0 by default, and increments by 1 (by default), and ends at a specified number.

  • The range() function defaults to increment the sequence by 1, however it is possible to specify the increment value by adding a third parameter: range(2, 30, 3).

  • The else keyword in a for loop specifies a block of code to be executed when the loop is finished.
    A nested loop is a loop inside a loop.

  • The “inner loop” will be executed one time for each iteration of the “outer loop”:

1
2
3
4
5
6
adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]

for x in adj:
for y in fruits:
print(x, y)
  • for loops cannot be empty, but if you for some reason have a for loop with no content, put in the pass statement to avoid getting an error.
1
2
for x in [0, 1, 2]:
pass

Function definition

1
2
def function_name():
return

Function call

1
function_name()
  • We need not to specify the return type of the function.
  • Functions by default return None
  • We can return any datatype.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
##############################################################################
# NGINX
# DOCUMENTATION: https://nginx.org/en/docs/
##############################################################################

sudo nginx -t # Check syntax
sudo systemctl status nginx # nginx current status
sudo systemctl reload nginx # Reload nginx
sudo systemctl restart nginx # Restart nginx
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # Link website
sudo tail -f /var/log/nginx/access.log # Tail logs to inspect requests

# *****************************************************************************
# General Settings
# *****************************************************************************

# Ports

server {
# Use HTTP protocol
listen 80;

# Use HTTPS protocol
listen 443 ssl;

# Listen on port 80 using IPv6
listen [::]:80;

# Listen on port 80 using **only** IPv6
listen [::]:80 ipv6only=on;
}

# Domain name (server_name)

server {
# Listen to example.com
server_name example.com;

# Listen to multiple domains
server_name example.com www.example.com;

# Listen to all sub-domains
server_name *.example.com;

# Listen to all top-level domains
server_name example.*;

# Listen to unspecified hostnames (listens to IP address itself)
server_name "";
}

# *****************************************************************************
# Serving Files
# *****************************************************************************

# Static assets (traditional web server)

server {
listen 80;
server_name example.com;

root /path/to/website;
# root /www/data/ for example

# If there's no 'root' inside, it will look for /www/data/index.html
location / {
}

# If there's no 'root' inside, it will look for /www/data/images/index.html
location /images/ {
}

# Since there's 'root' inside, it will look for /www/media/videos/index.html
location /videos/ {
root /www/media;
}
}

# *****************************************************************************
# Redirects
# *****************************************************************************

# 301 Permanent

server {
# Redirect www.example.com to example.com
listen 80;
server_name www.example.com;
return 301 http://example.com$request_uri;
}

server {
# Redirect http to https
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}

# 302 Temporary

server {
listen 80;
server_name yourdomain.com;
return 302 http://otherdomain.com;
}

# *****************************************************************************
# Reverse proxy
# *****************************************************************************

# Useful for Node.js, Streamlit, Jupyter, etc

# Basic

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://0.0.0.0:3000;
# where 0.0.0.0:3000 is your Node.js Server bound on 0.0.0.0 listing on port 3000
}
}

# Basic + (upstream)

upstream node_js {
server 0.0.0.0:3000;
# where 0.0.0.0:3000 is your Node.js Server bound on 0.0.0.0 listing on port 3000
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://node_js;
}
}

# Upgraded Connection (useful for applications with support for WebSockets)

upstream node_js {
server 0.0.0.0:3000;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://node_js;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;

}
}

# *****************************************************************************
# HTTPS Protocol
# *****************************************************************************

# The majority of SSL options depend on what your application does or needs

server {
listen 443 ssl http2;
server_name example.com;

ssl on;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/fullchain.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;
}

# Permanent redirect to HTTPS secured domain

server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}

# You can easily secure you website/app using Let's Encrypt.
# Go https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html for more information

# *****************************************************************************
# Load Balancing
# *****************************************************************************

# Useful for large applications running in multiple instances. Below example is for reverse proxy
upstream node_js {
server 0.0.0.0:3000;
server 0.0.0.0:4000;
server 127.155.142.421;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://node_js;
}
}

HELLO WORLD :ghost:

1
2
3
4
5
6
7
//Text file name HelloWorld.java
public class HelloWorld {
// main() is the method
public static void main (String[] args)
//Prints "Hello World" in the terminal window.
System.out.println("Hello World");
}

COMPILATION & EXECUTING JAVA CODE

  • Go to your program directory in terminal (Assumed JAVA Path is set)
  • After for compile your code

javac HelloWorld.java (your program file name)

  • For run program

java HelloWorld (main class name)

DATA TYPES

Type Set of values Values Operators
short integers between -2^15 and + (2^15)-1 + - * / %
int integers between -2^31 and + (2^31)-1 + - * / %
long integers between -2^63 and + (2^63)-1 + - * / %
float integers real numbers 32 bit + - * /
double floating-point numbers real numbers 64 bit + - * /
boolean boolean values true or false && || !
char characters 16 bit
String sequences of characters it’s not a primitive data type

DECLARATION AND ASSIGNMENT STATEMENTS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Declaration statement
int a,b;

//Assignment statement
a = 13212; //a is the variable name; 13212 is the literal which is assign to the variable a

//Initialization statement
int c = a + b;

//Compound assignment expressions
a += b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a + b
a -= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a - b
a *= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a * b
a /= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a / b
a %= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a % b
a ^= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a ^ b
a &= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a & b
a \|= b; //a is the variable name; b is the variable name; this expression is an equivalent shorthand notation of a = a \| b

COMPARISON OPERATORS

Operation Meaning
== equal
!= not equal
< less than
> greater than
<= less than or equal
>= greater than or equal

PRINTING

1
2
3
4
String s = "Happy Coding Folks!!"
System.out.print(String s) //print s
System.out.println(String s) //print s, followed by a newline
System.out.println() //print a newline

PARSING COMMAND-LINE ARGUMENTS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  String s = "Java is the best!!"
int Integer.parseInt(String s) //convert s to an int value
double Double.parseDouble(String) //convert s to a double value
long Long.parseLong(String s) // convert s to a long value
````

### MATH LIBRARY
```java
Public Class Math{
double abs(double a) // absolute value of a
double max(double a, double b) //maximum of a and b
double min(double a, dobule a) //minimum of a and b
double sin(double theta) //sine of theta
double cos(double theta) //cosine of theta
double tan(double theta) //tangent of theta
double toRadians(double degrees) // convert angle from degrees to radians
double toDegrees(double radians) // convert angle from radians to degrees
double exp(double a) // exponential (e^a)
double pow(double a, double p) //raise a to the bth power (a^b)
double random() //random in [0,1)
double sqrt(double a) //square root of a
}

EXAMPLES OF TYPE CONVERSION

Expression Expression type Expression value
(1 + 2 + 3 + 4) / 4.0 double 2.5
Math.sqrt(4) double 2.0
“123343” + 99 String “12334399”
11 * 0.25 double 2.75
(int) 11 * 0.25 double 2.75
11 * (int) 0.25 int 0
(int) (11 * 0.25) int 2

CONDITIONAL & LOOP STATEMENT

ANATOMY OF CONDITIONAL STATEMENT

IF Statement

1
2
3
4
if (x>y) { // x > y is the boolean expression
//Sequence of statements
x = y;
}

IF-ELSE STATEMENT

1
2
3
4
5
if (BOOLEAN EXPRESSION) {
//Sequence of statements
} else {
//Sequence of statements
}

NESTED IF STATEMENT

1
2
3
4
5
6
7
8
9
10
11
if (BOOLEAN EXPRESSION) {
//Sequence of statements
} else if {
//Sequence of statements
}
.
.
.
else {
//Sequence of statements
}

SWITCH STATEMENT

1
2
3
4
5
6
7
switch (VARIABLE TO EVALUATE ITS VALUE) {
case value: Statement; break;
...
...
...
default: Statement; break;
}

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int month = 8;
String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
case 3: monthString = "March";
break;
case 4: monthString = "April";
break;
case 5: monthString = "May";
break;
case 6: monthString = "June";
break;
case 7: monthString = "July";
break;
case 8: monthString = "August";
break;
case 9: monthString = "September";
break;
case 10: monthString = "October";
break;
case 11: monthString = "November";
break;
case 12: monthString = "December";
break;
default: monthString = "Invalid month";
break;
}

ANATOMY OF A LOOP STATEMENT

FOR LOOP STATEMENT

1
2
3
4
for (declare and initialize a loop control variable; loop-continuation condition/s; increment or decrement of the variable of control)
{
//Statement
}

Example:

1
2
3
for (int i = 0; i <= n; i++) {
System.out.println(i);
}

Enhanced for loop/for-each

1
2
3
4
for(dataType item : array) {
...
}

Example:

1
2
3
4
5
6
// array of numbers
int[] numbers = {100, 200, 300, 400};

// for each loop
for (int number: numbers) {
System.out.println(number);

WHILE LOOP STATEMENT

1
2
3
while(condition){  //till condition will be true.
//code to be executed
}

Example:

1
2
3
4
5
6
7
//Initialization is a separate statement
int power = 1;

while ( power <= 10/2 ) // power <= n/2 is an example of the loop-continuation condition
{
System.out.println(power);
}

DO-WHILE LOOP STATEMENT

1
2
3
do{ //always run one time even if condition would be false
//Statement
} while(loop-continuation condition);

Example:

1
2
3
4
5
int i=1;  
do{
System.out.println(i);
i++;
}while(i<=10);

ARRAY

ARRAY DECLARATION

1
2
3
4
5
6
int[]           ai;        // array of int
short[][] as; // array of array of short
short s, // scalar short
aas[][]; // array of array of short
Object[] ao; // array of Object
Collection<?>[] ca; // array of Collection of unknown type

DECLARATION OF ARRAY VARIABLE

1
2
3
4
5
6
Exception ae[]  = new Exception[3];
Object aao[][] = new Exception[2][3];
int[] factorial = { 1, 1, 2, 6, 24, 120, 720, 5040 };
char ac[] = { 'n', 'o', 't', ' ', 'a', ' ',
'S', 't', 'r', 'i', 'n', 'g' };
String[] aas = { "array", "of", "String", };

ACCESS MODIFIERS

  1. defualt(No keyword required)
  2. private
  3. public
  4. protected

NON ACCESS MODIFIERS

  1. static
  2. final
  3. transient
  4. abstract
  5. synchronized
  6. volatile

Object Oriented Programming (OOPs) Concept :clipboard:

OBJECT

1
2
3
4
5
6
7
8
//Declare a variable, object name
String s;

//Invoke a contructor to create an object
s = new String ("Hello World");

//Invoke an instance method that operates on the object's value
char c = s.chartAt(4);

INSTANCE VARIABLES

1
2
3
4
5
public class Charge {
//Instance variable declarations
private final double rx, ry;
private final double q;
}

METHODS

1
2
3
4
5
public static double sum (int a, int b) { //double is the return type, sum is the method's name, a and b are two arguments of type int;
int result; //local variable
result = a + b;
return result;//return statement;
}

CLASS DECLARATION

1
2
3
4
class MyClass {
// field, constructor, and
// method declarations
}

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}

DECLARING CLASSESS IMPLEMENTATING AN INTERFACE AND EXTENDING PARENT CLASS

1
2
3
4
class MyClass extends MySuperClass implements YourInterface {
// field, constructor, and
// method declarations
}
  • MyClass is a subclass of MySuperClass and that it implements the YourInterface interface.

CONSTRUCTORS

  • A class contains constructors that are invoked to create objects from the class blueprint.
  • Constructor declarations look like method declarations—except that they use the name of the class and have no return type
  • Each and every class has defualt No-args constructor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Bicycle{

private int gear;
private int cadence;
private int speed;

public Bicycle(int startCadence, int startSpeed, int startGear) { //args-constructor
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}

public Bicycle(){//No-args constructor
super();
}
}

POLYMORPHISM

  • Polymorphism is the concept where an object behaves differently in different situations.
  • There are two types of polymorphism
    1. compile time polymorphism
    2. runtime polymorphism.

1. Compile Time Polymorphism

  • Compile-time polymorphism is achieved by method overloading.
  • method overloading is creating multiple method with methods name is same and arguments are different.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Circle {

    public void draw(){
    System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
    }

    public void draw(int diameter){ //method draw() overloaded.
    System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
    }

    public void draw(int diameter, String color){ //method draw() overloaded.
    System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
    }
    }

2. Run Time Polymorphism

  • Run-time polymorphism is achieved by method overriding.
  • Runtime polymorphism is implemented when we have an “IS-A” relationship between objects.
  • method overriding is the subclass has to override the superclass method.
    1
    2
    3
    4
    public interface Shape {

    public void draw();
    }
    1
    2
    3
    4
    5
    6
    7
    8
    public class Circle implements Shape{

    @Override
    public void draw(){
    System.out.println("Drwaing circle");
    }

    }
    1
    2
    3
    4
    5
    6
    7
    8
    public class Square implements Shape {

    @Override
    public void draw() {
    System.out.println("Drawing Square");
    }

    }
  • Shape is the superclass and there are two subclasses Circle and Square
  • Below is an example of runtime polymorphism.
    1
    2
    3
    4
    5
    Shape sh = new Circle();
    sh.draw();

    Shape sh1 = getShape(); //some third party logic to determine shape
    sh1.draw();

INHERITANCE

  • Inheritance is the mechanism of code reuse.
  • The object that is getting inherited is called the superclass and the object that inherits the superclass is called a subclass.
  • We use extends keyword in java to implement inheritance from class.
  • We use implements keyword in java to implement inheritance from interface.
1
2
3
public class Superclass{
// methods and fields
}
1
2
3
public interface Superinterface{
// methods and fields
}
1
2
3
public class Subclass extends Superclass implements Superinterface{
// methods and fields
}

Abstraction

  • Abstraction is the concept of hiding the internal details and describing things in simple terms.
  • Abstraction can be achieved by two ways.
    1. Abstract Class
    2. Interface

1. Abstract Class

  • An abstract class must be declared with an abstract keyword.
  • It can have abstract and non-abstract methods.
  • It cannot be instantiated.
  • It can have constructors and static methods also.
  • It can have final methods which will force the subclass not to change the body of the method.
1
2
3
4
5
6
7
8
9
10
11
12
abstract class Flower{
abstract String Smell(); //abstract method.
String Oil(){ // non-abstract method.
System.out.println("Flower Oil is good.");
}
}

public class Lily extends Flower{
private String Smell(){ // implementation of abstarct method.
System.out.println("Lily smell's lovender.");
}
}

2. Interface

  • Interface is a blueprint of a class.
  • It can have only abstract methods. [Except Java 8 and next versions.]
  • Since Java 8, we can have default and static methods in an interface.
1
2
3
4
5
6
7
8
interface print{  
void printPaper();
}
public class A4 implements print{
public void printPaper(){
System.out.println("A4 Page Printed. ");
}
}

Encapsulation

  • Encapsulation is used for access restriction to class members and methods.
  • Encapsulation is the technique used to implement abstraction in OOP.
  • As in encapsulation, the data in a class is hidden from other classes, so it is also known as data-hiding.
  • Encapsulation can be achieved by Declaring all the variables in the class as private and writing public methods in the class to set and get the values of variables.
  • Best example of Encapsulation is POJO (Plain-Java-Object-Class).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class User {
private String username;
private String password;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

ADVANCE DATA TYPE

  • STACK DATA TYPE
1
2
3
4
5
6
7
public class Stack<Item> implements Iterable <Item>

Stack() //create an empty stack
boolean isEmpty() //return if the stack empty
void push(Item item) // push an item onto the stack
Item pop() //return and remove the item that was inserted most recently
int size() //number of item on stack
  • QUEUE DATA TYPE
1
2
3
4
5
6
7
public class Queue<Item> implements Iterable<Item>

Queue() //create an empty queue
boolean isEmpty() //return if the queue empty
void enqueue(Item item) // insert an item onto queue
Item dequeue() //return and remove the item that was inserted least recently
int size() //number of item on queue
  • ITERABLE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//import Iterator
import java.util.Iterator;

public class Queue<Item> implements Iterable<Item> {

//FIFO queue
private Node first;
private Node last;
private class Node {
Item item;
Node next;
}

public void enqueue (Item item)
...

public Item dequeue()
...

}
  • SYMBOL TABLE DATA TYPE
1
2
3
4
5
6
7
8
9
public class ST<Key extends Comparable<Key>, Value>

ST() //create and empty symbol table
void put(Key key, Value val) //associate val with key
Value get(Key key) //value associated with key
void remove(Key key) //remove key (and its associated value)
boolean contains (Key key) //return if there is a value associated with key
int size() //number of key-value pairs
Iterable<Key> keys() // all keys in the symbol table
  • SET DATA TYPE
1
2
3
4
5
6
7
public class Set<Key extends Comparable<Key>> implements Iterable<Key>
Set() //create an empty set
boolean isEmpty() //return if the set is empty
void add (Key key) //add key to the set
void remove(Key key) //remove key from set
boolean contains(Key key) //return if the key is in the set
int size() //number of elements in set

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<!-- * *******************************************************************************************
* HTML5 Cheat sheet by Hackr.io
* Source: https://websitesetup.org/wp-content/uploads/2014/02/HTML-CHEAT-SHEET-768x8555.png
* ******************************************************************************************* * -->


<!-- Document Summary -->

<!DOCTYPE html> <!-- Tells the browser that HTML5 version of HTML to be recognized by the browser -->
<html lang="en"></html> <!-- The HTML lang attribute is used to identify the language of text content on the web. This information helps search engines return language specific results, -->
<head></head> <!-- Contains Information specific to the page like title, styles and scripts -->
<title></title> <!-- Title for the page that shows up in the browser title bar -->
<body></body> <!-- Content that the user will see -->


<!-- Document Information -->


<base/> <!-- Usefull for specifying relative links in a document -->
<style></style> <!-- Contains styles for the html document -->
<meta/> <!-- Contains additional information about the page, author, page description and other hidden page info -->
<script></script> <!-- Contains all scripts internal or external -->
<link/> <!-- Used to create relationships with external pages and stylesheets -->


<!-- Document Structure -->


<h1></h1> ... <h6></h6> <!-- All six levels of heading with 1 being the most promiment and 6 being the least prominent -->
<p></p> <!-- Used to organize paragraph text -->
<div></div> <!-- A generic container used to denote a page section -->
<span></span> <!-- Inline section or block container used for creating inline style elements -->
<br/> <!-- Creates a line-break -->
<hr> <!-- Creates a sectional break into HTML -->


<!-- Text Formatting -->


<strong></strong> and <b></b> <!-- Makes text contained in the tag as bold -->
<em></em> and <i></i> <!-- Alternative way to make the text contained in the tag as italic -->
<del></del> <!-- Creates a strike through the text element -->
<pre></pre> <!-- Preformatted monospace text block with some spacing intact -->
<blockquote></blockquote> <!-- Contains long paragraphs of quotations often cited -->
<abbr></abbr> <!-- Contains abbreviations while also making the full form avaialable -->
<address></address> <!-- Used to display contact information -->
<code></code> <!-- Used to display inline code snippets -->
<q></q> <!-- Defines a short inline quotation -->
<sub></sub> <!-- Defines subscripted text -->
<sup></sup> <!-- Defines superscripted text -->
<kbd></kbd> <!-- Specifies text as keyboard input -->
<small></small> <!-- Specifies small text -->
<ins></ins> <!-- Defines a text that has been inserted into the document -->


<!-- Links Formatting -->


<a href="url"></a> <!-- Used to link to external or internal pages of a wbesite -->
<a href="mailto:email@example.com"></a> <!-- Used to link to an email address -->
<a href="name"></a> <!-- Used to link to a document element -->
<a href="#name"></a> <!-- Used to link to specific div element -->
<a href="tel://####-####-##"></a> <!-- Used to display phone numbers and make them clickable -->


<!-- Image Formatting -->


<img src="url" alt="text"> <!-- Used to display images in a webpage where src="url" contains the link to the image source and alt="" contains an alternative text to display when the image is not displayed -->


<!-- List Formatting -->


<ol></ol> <!-- Used to create ordered lists with numbers in the items -->
<ul></ul> <!-- Used to display unordered lists with numbers in the items -->
<li></li> <!-- Contains list items inside ordered and unordered lists -->
<dl></dl> <!-- Contains list item definitions -->
<dt></dt> <!-- Definition of single term inline with body content -->
<dd></dd> <!-- The descrpition of the defined term -->


<!-- Forms Formatting and Attributes -->


<form action="url"></form> <!-- Form element creates a form and action="" specifies where the data is to be sent to when the visitor submits the form -->

<!-- Supported attributes -->
method="somefunction()" <!-- Contains the type of request (GET, POST... etc) which dictates how to send the data of the form -->
enctype="" <!-- Dictates how the data is to be encoded when the data is sent to the web server. -->
autocomplete="" <!-- Specifies if the autocomplete functionality is enabled or not -->
novalidate <!-- Dictates if the form will be validated or not -->
accept-charset="" <!-- Identifies the character encoding upon form submission -->
target="" <!-- Tell where to display the information upon form submission. Possible values: '_blank', '_self', '_parent', '_top' -->

<fieldset disabled="disabled"></fieldset> <!-- Identifies the group of all fields in the form -->
<label for=""></label> <!-- A simple field label telling the user what to type in the field -->
<legend></legend> <!-- The form legend acts as a caption for the fieldset element -->

<input type="text/email/number/color/date"> <!-- Input is the input field where the user can input various types of data -->

<!-- Supported attributes -->
name="" <!-- Describes the name of the form -->
width="" <!-- Specifies the width of an input field -->
value="" <!-- Describes the value of the input information field -->
size="" <!-- Specifies the input element width in characters -->
maxlength="" <!-- Specifies the maximum input character numbers -->
required="" <!-- Specifies if the input field is required to fill in before submitting the form -->
step="" <!-- Identifies the legal number intervals of the input field -->

<textarea name="" id="" cols="30" rows="10"> <!-- Specifies a large input text field for longer messages -->
</textarea>

<select name=""></select> <!-- Describes a dropdown box for users to select from variety of choices -->

<!-- Supported attributes -->
name="" <!-- The name for a dropdown combination box -->
size="" <!-- Specifies the number of available options -->
multiple <!-- Allows for multiple option selections -->
required <!-- Requires that a value is selected before submitting the form -->
autofocus <!-- Specifies that the dropdown automatically comes to focus once the page loads -->
<optgroup></optgroup> <!-- Specifies the entire grouping of available options -->
<option value=""></option> <!-- Defines one of the avaialble option from the dropdown list -->
<button></button> <!-- A clickable button to submit the form -->


<!-- Tables Formatting -->


<table></table> <!-- Defines and contains all table related content -->
<caption></caption> <!-- A description of what table is and what it contains -->
<thead></thead> <!-- The table headers contain the type of information defined in each column underneath -->
<tbody></tbody> <!-- Contains the tables data or information -->
<tfoot></tfoot> <!-- Defines table footer -->
<tr></tr> <!-- Contains the information to be included in a table row -->
<th></th> <!-- Contains the information to be included in a single table header -->
<td></td> <!-- Contains actual information in a table cell -->
<colgroup></colgroup> <!-- Groups a single or multiple columns for formatting purposes -->
<col> <!-- Defines a single column of information inside a table -->


<!-- Objects and iFrames -->


<object data=""></object> <!-- Describes and embed file type including audio, video, PDF's, images -->

<!-- Supported attributes -->
type="" <!-- Describes the type of media embedded -->
height="" <!-- Describes the height of the object in pixels -->
width="" <!-- Describes the width of the object in pixels -->
usemap="" <!-- This is the name of the client-side image map in the object -->

<iframe src="" frameborder="0"></iframe> <!-- Contains an inline frame that allows to embed external information -->
<embed src="" type=""> <!-- Acts as a container for external application or plug-in -->
src="" <!-- The source of the external file you're embedding -->
width="" <!-- Describes the width of the iframe in pixels -->


<!-- HTML5 New Tags -->


<header></header> <!-- Defines the header block for a document or a section -->
<footer></footer> <!-- Defines the footer block for a document or a section -->
<main></main> <!-- Describes the main content of a document -->
<article></article> <!-- Identifies an article inside a document -->
<aside></aside> <!-- Specifies content contained in a document sidebar -->
<section></section> <!-- Defines a section of a document -->
<details></details> <!-- Describes additonal information that user can view or hide -->
<dialog></dialog> <!-- A dialog box or a window -->
<figure></figure> <!-- An independent content block featuring images, diagrams or illustrations -->
<figcaption></figcaption> <!-- Caption that describe a figure -->
<mark></mark> <!-- Displays a portion of highlighted text with in a page content -->
<nav></nav> <!-- Navigation links for the user in a document -->
<menuitem></menuitem> <!-- The specific menu item that a user can raise from a pop up menu -->
<meter></meter> <!-- Describes the scalar measurement with in a known array -->
<progress></progress> <!-- Displays the progress of a task usually a progress bar -->
<rp></rp> <!-- Describes text within the browsers that do not support ruby notations -->
<rt></rt> <!-- Displays east asian typography character details -->
<ruby></ruby> <!-- Describes annotations for east asian typography -->
<summary></summary> <!-- Contains a visible heading for details element -->
<bdi></bdi> <!-- Helps you format parts of text in a different direction than other text -->
<time></time> <!-- Identifies the time and date -->
<wbr> <!-- A line break within the content -->

<!-- Some other useful tags -->

<canvas></canvas> <!-- Allows to draw 2D shapes on the web page with the help of javascript -->
<map></map> <!-- Specifies an image map -->

<!-- Collective Character Obejcts -->


&#34; &quot; Quotation Marks - "
&#38; &amp; Ampersand - &
&#60; &lt; Less than sign - <
&#62; &gt; Greater than sign - >
&#160; &nbsp; Non-breaking space
&#169; &copy; Copyright Symbol - ©
&#64; &Uuml; @ symbol - @
&#149; &ouml; Small bullet - .
&#153; &ucirc; Trademark Symbol - ™
0%