├── .gitattributes ├── .github └── workflows │ ├── dev.yml │ └── phpcs.yml ├── .gitignore ├── 404.php ├── LICENSE ├── README.MD ├── archive.php ├── block-templates └── index.html ├── comments.php ├── composer.json ├── css └── app.css ├── editor-style.css ├── footer.php ├── functions.php ├── header.php ├── inc ├── custom-header.php ├── customizer.php ├── jetpack.php ├── template-functions.php └── template-tags.php ├── index.php ├── js ├── app.js ├── app.min.js ├── customizer.js └── navigation.js ├── languages ├── readme.txt └── tailwind.pot ├── package-lock.json ├── package.json ├── page.php ├── phpcs.xml.dist ├── postcss.config.js ├── resources ├── css │ ├── app.css │ ├── block-editor.css │ ├── custom.css │ └── editor-style.css └── js │ └── app.js ├── safelist.txt ├── search.php ├── sidebar.php ├── single.php ├── style-rtl.css ├── style.css ├── tailpress.json ├── tailwind.config.js ├── template-parts ├── content-none.php ├── content-page.php ├── content-search.php ├── content-single.php └── content.php ├── theme.json └── webpack.mix.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/dev.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the dev branch 8 | push: 9 | branches: [ dev ] 10 | 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | 14 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 15 | jobs: 16 | # This workflow contains a single job called "build" 17 | build: 18 | # The type of runner that the job will run on 19 | runs-on: ubuntu-latest 20 | 21 | # Steps represent a sequence of tasks that will be executed as part of the job 22 | steps: 23 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 24 | - uses: actions/checkout@v2 25 | 26 | - name: reactive-readme 27 | # You may pin to the exact commit or the version. 28 | # uses: VisualBean/reactive-readme@820e2e0b3d730eaef7c5b5f23960aef0b0e9a325 29 | uses: VisualBean/reactive-readme@v1 30 | with: 31 | # The value to set the template to. 32 | value: "# You're in the dev branch" 33 | # The section of the README to update. 34 | section: devmessage 35 | # The target branch to update. 36 | branch: dev 37 | 38 | -------------------------------------------------------------------------------- /.github/workflows/phpcs.yml: -------------------------------------------------------------------------------- 1 | name: WPCS check 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | phpcs: 7 | name: WPCS 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: WPCS check 12 | uses: 10up/wpcs-action@stable -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.idea 3 | /.vscode 4 | /mix-manifest.json 5 | -------------------------------------------------------------------------------- /404.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 19 | 20 |
21 |

22 | 23 | 28 | 29 |
30 |

31 |
    32 | 'count', 36 | 'order' => 'DESC', 37 | 'show_count' => 1, 38 | 'title_li' => '', 39 | 'number' => 10, 40 | ) 41 | ); 42 | ?> 43 |
44 |
45 | 46 | ' . sprintf( esc_html__( 'Try looking in the monthly archives. %1$s', 'tailwind' ), convert_smilies( ':)' ) ) . '

'; 49 | the_widget( 'WP_Widget_Archives', 'dropdown=1', "after_title=$tailwind_archive_content" ); 50 | 51 | the_widget( 'WP_Widget_Tag_Cloud' ); 52 | ?> 53 | 54 |
55 |
56 | 57 |
58 | 59 | 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # TailPress 2 | A minimal boilerplate theme for WordPress using [TailwindCSS](https://tailwindcss.com/), with [PostCSS](https://postcss.org) and ~~[Laravel Mix](https://laravel-mix.com/)~~ npx Tailwind Compiler. 3 | 4 | # ATTENTION 5 | **We've updated the default repo to `underscores` instead of `main`. This change comes with the fact that `_S` is a stable theme maintained directly by WordPress and allows for easier updates than the custom theme that was being used originially in the `main` branch. If you would like to use the `main` branch instead, please feel free to, but we will be deprecating support for it as of December 1st, 2021. All development will be in the `underscores` branch from then on. 6 | Thanks!** 7 | 8 | # Update Apr. 4th, 2022 9 | TailwindCSS Updated to 3.0.23 10 | 11 | Check the [upgrade guide here](https://tailwindcss.com/docs/upgrade-guide) for what has changed in TailwindCSS. 12 | 13 | # Update Dec. 11th, 2021 14 | Tailwind Updated to 3.0.1 15 | 16 | ## Getting started 17 | * Clone repo `git clone https://github.com/pixeldevsio/tailpress.git && cd tailpress` 18 | * Run `rm -rf .git` to remove git. 19 | * Run `npm install` 20 | * Run `npm run development` 21 | * Run `npm run watch` to start developing 22 | 23 | You will find the editable CSS and Javascript files within the `/resources` folder. 24 | 25 | Before you use your theme in production, make sure you run `npm run production`. 26 | 27 | ## NEW! AlpineJS support 28 | [AlpineJS](https://alpinejs.dev/) is now included in the theme! All you need to do is add `define('ALPINEJS', TRUE)` inside of your `wp-config.php` before the `/* That's all, stop editing! Happy publishing. */` line and AlpineJS will be automatically included and ready to use. 29 | [AlpineJS Docs](https://alpinejs.dev/start-here) 30 | 31 | ## Block editor support 32 | TailPress comes with basic support for the [block editor](https://wordpress.org/support/article/wordpress-editor/). 33 | 34 | CSS-classes for alignment, background and text colors will be generated automatically. You can modify this within the `tailwind.config.js` file. 35 | 36 | To make the editing experience within the block editor more in line with the front end styling, a `editor-style.css` is generated. This file is only compiled on production builds. 37 | 38 | ## Full Site Editing support 39 | TailPress is now updated to support Full Site Editing. 40 | 41 | The template editing mode is a way to edit the website without the complexity of the site editor interface. 42 | It is more limited than the site editor because you can not select or navigate between templates in this view. 43 | 44 | You access the template editing mode via the block editor. 45 | 46 | Create a new post or page. Next, open the document settings sidebar and locate the Template panel below Status & visibility. 47 | Here you will find information about the current template and a list of existing templates to choose from. 48 | 49 | Create a new template by selecting the New link. 50 | 51 | Edit and save the template in the same way as in the site editor. 52 | 53 | ### Define theme colors 54 | Four colors (primary, secondary, dark and light) are defined from the beginning. You can modify the colors in `tailpress.json`. 55 | 56 | ### Define theme font sizes 57 | You can modify the font sizes within `tailpress.json`. 58 | 59 | ## JIT 60 | [Tailwind CSS JIT](https://github.com/tailwindlabs/tailwindcss-jit) is used to allow for fast compiling. 61 | 62 | If you prefer to use the regular Tailwind CSS instead, you can change to that dependency in `package.json`. 63 | Also make sure to you change the PostCSS plugins in `webpack.mix.js`. 64 | 65 | ## PurgeCSS 66 | By default, PurgeCSS is enabled. You can modify or disable it by changing the settings in the `tailwind.config.js` file. There are several [PurgeCSS options](https://tailwindcss.com/docs/optimizing-for-production#purge-css-options). 67 | 68 | ## Links 69 | * [TailwindCSS Documentation](https://tailwindcss.com/docs) 70 | -------------------------------------------------------------------------------- /archive.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 | 16 | 17 | 23 | 24 | 46 | 47 |
48 | 49 | 22 | 23 |
24 | 25 | 29 |

30 | ' . wp_kses_post( get_the_title() ) . '' 37 | ); 38 | } else { 39 | printf( 40 | /* translators: 1: comment count number, 2: title. */ 41 | esc_html( _nx( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', $tailwind_comment_count, 'comments title', 'tailwind' ) ), 42 | number_format_i18n( $tailwind_comment_count ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 43 | '' . wp_kses_post( get_the_title() ) . '' 44 | ); 45 | } 46 | ?> 47 |

48 | 49 | 50 | 51 |
    52 | 'ol', 56 | 'short_ping' => true, 57 | ) 58 | ); 59 | ?> 60 |
61 | 62 | 68 |

69 | 76 | 77 |
78 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "automattic/underscores", 3 | "type": "wordpress-theme", 4 | "description": "Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for.", 5 | "keywords": [ 6 | "WordPress", 7 | "Themes" 8 | ], 9 | "homepage": "https://github.com/Automattic/_s", 10 | "license": "GPL-2.0-or-later", 11 | "authors": [ 12 | { 13 | "name": "Contributors", 14 | "homepage": "https://github.com/Automattic/_s/graphs/contributors" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=5.6" 19 | }, 20 | "require-dev": { 21 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", 22 | "wptrt/wpthemereview": "^0.2.1", 23 | "php-parallel-lint/php-parallel-lint": "^1.2.0", 24 | "wp-cli/i18n-command": "^2.2.5" 25 | }, 26 | "scripts": { 27 | "lint:wpcs": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs", 28 | "lint:php": "@php ./vendor/bin/parallel-lint --exclude .git --exclude vendor .", 29 | "make-pot": "wp i18n make-pot . languages/_s.pot" 30 | }, 31 | "support": { 32 | "issues": "https://github.com/Automattic/_s/issues", 33 | "source": "https://github.com/Automattic/_s" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /css/app.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.0.1 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: currentColor; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: SF Compact, ui-sans-serif; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr[title] { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | line-height: inherit; 191 | /* 1 */ 192 | color: inherit; 193 | /* 1 */ 194 | margin: 0; 195 | /* 2 */ 196 | padding: 0; 197 | /* 3 */ 198 | } 199 | 200 | /* 201 | Remove the inheritance of text transform in Edge and Firefox. 202 | */ 203 | 204 | button, 205 | select { 206 | text-transform: none; 207 | } 208 | 209 | /* 210 | 1. Correct the inability to style clickable types in iOS and Safari. 211 | 2. Remove default button styles. 212 | */ 213 | 214 | button, 215 | [type='button'], 216 | [type='reset'], 217 | [type='submit'] { 218 | -webkit-appearance: button; 219 | /* 1 */ 220 | background-color: transparent; 221 | /* 2 */ 222 | background-image: none; 223 | /* 2 */ 224 | } 225 | 226 | /* 227 | Use the modern Firefox focus style for all focusable elements. 228 | */ 229 | 230 | :-moz-focusring { 231 | outline: auto; 232 | } 233 | 234 | /* 235 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 236 | */ 237 | 238 | :-moz-ui-invalid { 239 | box-shadow: none; 240 | } 241 | 242 | /* 243 | Add the correct vertical alignment in Chrome and Firefox. 244 | */ 245 | 246 | progress { 247 | vertical-align: baseline; 248 | } 249 | 250 | /* 251 | Correct the cursor style of increment and decrement buttons in Safari. 252 | */ 253 | 254 | ::-webkit-inner-spin-button, 255 | ::-webkit-outer-spin-button { 256 | height: auto; 257 | } 258 | 259 | /* 260 | 1. Correct the odd appearance in Chrome and Safari. 261 | 2. Correct the outline style in Safari. 262 | */ 263 | 264 | [type='search'] { 265 | -webkit-appearance: textfield; 266 | /* 1 */ 267 | outline-offset: -2px; 268 | /* 2 */ 269 | } 270 | 271 | /* 272 | Remove the inner padding in Chrome and Safari on macOS. 273 | */ 274 | 275 | ::-webkit-search-decoration { 276 | -webkit-appearance: none; 277 | } 278 | 279 | /* 280 | 1. Correct the inability to style clickable types in iOS and Safari. 281 | 2. Change font properties to `inherit` in Safari. 282 | */ 283 | 284 | ::-webkit-file-upload-button { 285 | -webkit-appearance: button; 286 | /* 1 */ 287 | font: inherit; 288 | /* 2 */ 289 | } 290 | 291 | /* 292 | Add the correct display in Chrome and Safari. 293 | */ 294 | 295 | summary { 296 | display: list-item; 297 | } 298 | 299 | /* 300 | Removes the default spacing and border for appropriate elements. 301 | */ 302 | 303 | blockquote, 304 | dl, 305 | dd, 306 | h1, 307 | h2, 308 | h3, 309 | h4, 310 | h5, 311 | h6, 312 | hr, 313 | figure, 314 | p, 315 | pre { 316 | margin: 0; 317 | } 318 | 319 | fieldset { 320 | margin: 0; 321 | padding: 0; 322 | } 323 | 324 | legend { 325 | padding: 0; 326 | } 327 | 328 | ol, 329 | ul, 330 | menu { 331 | list-style: none; 332 | margin: 0; 333 | padding: 0; 334 | } 335 | 336 | /* 337 | Prevent resizing textareas horizontally by default. 338 | */ 339 | 340 | textarea { 341 | resize: vertical; 342 | } 343 | 344 | /* 345 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 346 | 2. Set the default placeholder color to the user's configured gray 400 color. 347 | */ 348 | 349 | input::-moz-placeholder, textarea::-moz-placeholder { 350 | opacity: 1; 351 | /* 1 */ 352 | color: #9ca3af; 353 | /* 2 */ 354 | } 355 | 356 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* 419 | Ensure the default browser behavior of the `hidden` attribute. 420 | */ 421 | 422 | [hidden] { 423 | display: none; 424 | } 425 | 426 | .container { 427 | width: 100%; 428 | padding-right: 1rem; 429 | padding-left: 1rem; 430 | } 431 | 432 | @media (min-width: 640px) { 433 | .container { 434 | max-width: 640px; 435 | padding-right: 2rem; 436 | padding-left: 2rem; 437 | } 438 | } 439 | 440 | @media (min-width: 768px) { 441 | .container { 442 | max-width: 768px; 443 | } 444 | } 445 | 446 | @media (min-width: 1024px) { 447 | .container { 448 | max-width: 1024px; 449 | padding-right: 0rem; 450 | padding-left: 0rem; 451 | } 452 | } 453 | 454 | @media (min-width: 1280px) { 455 | .container { 456 | max-width: 1280px; 457 | } 458 | } 459 | 460 | @media (min-width: 1536px) { 461 | .container { 462 | max-width: 1536px; 463 | } 464 | } 465 | 466 | .visible { 467 | visibility: visible; 468 | } 469 | 470 | .mb-4 { 471 | margin-bottom: 1rem; 472 | } 473 | 474 | .mb-1 { 475 | margin-bottom: 0.25rem; 476 | } 477 | 478 | .text-2xl { 479 | font-size: 1.5rem; 480 | } 481 | 482 | .text-sm { 483 | font-size: .875rem; 484 | } 485 | 486 | .font-extrabold { 487 | font-weight: 800; 488 | } 489 | 490 | .leading-tight { 491 | line-height: 1.25; 492 | } 493 | 494 | .text-gray-700 { 495 | --tw-text-opacity: 1; 496 | color: rgb(55 65 81 / var(--tw-text-opacity)); 497 | } 498 | 499 | .has-primary-text-color { 500 | color: #0EA5E9; 501 | } 502 | 503 | .has-secondary-text-color { 504 | color: #14B8A6; 505 | } 506 | 507 | .has-dark-text-color { 508 | color: #1F2937; 509 | } 510 | 511 | .has-light-text-color { 512 | color: #F9FAFB; 513 | } 514 | 515 | .has-primary-background-color { 516 | background-color: #0EA5E9; 517 | } 518 | 519 | .has-secondary-background-color { 520 | background-color: #14B8A6; 521 | } 522 | 523 | .has-dark-background-color { 524 | background-color: #1F2937; 525 | } 526 | 527 | .has-light-background-color { 528 | background-color: #F9FAFB; 529 | } 530 | 531 | .alignfull { 532 | margin: 0.5rem calc(50% - 50vw); 533 | max-width: 100vw; 534 | width: 100vw; 535 | } 536 | 537 | .alignwide { 538 | margin-left: -4rem; 539 | margin-right: -4rem; 540 | margin-top: 0.5rem; 541 | margin-bottom: 0.5rem; 542 | max-width: 1280px; 543 | } 544 | 545 | .alignnone { 546 | margin-left: 0px; 547 | margin-right: 0px; 548 | height: auto; 549 | max-width: 100%; 550 | } 551 | 552 | .aligncenter { 553 | margin: 0.5rem auto; 554 | display: block; 555 | } 556 | 557 | @media (min-width: 640px) { 558 | .alignleft:not(.wp-block-button) { 559 | margin-right: 0.5rem; 560 | } 561 | 562 | .alignleft:not(.wp-block-button) { 563 | float: left; 564 | } 565 | 566 | .alignright:not(.wp-block-button) { 567 | margin-left: 0.5rem; 568 | } 569 | 570 | .alignright:not(.wp-block-button) { 571 | float: right; 572 | } 573 | 574 | .wp-block-button.alignleft a { 575 | float: left; 576 | } 577 | 578 | .wp-block-button.alignleft a { 579 | margin-right: 1rem; 580 | } 581 | 582 | .wp-block-button.alignright a { 583 | float: right; 584 | } 585 | 586 | .wp-block-button.alignright a { 587 | margin-left: 1rem; 588 | } 589 | } 590 | 591 | .has-small-font-size { 592 | font-size: 14px; 593 | font-weight: normal; 594 | } 595 | 596 | .has-regular-font-size { 597 | font-size: 16px; 598 | font-weight: normal; 599 | } 600 | 601 | .has-large-font-size { 602 | font-size: 18px; 603 | font-weight: bold; 604 | } 605 | 606 | .wp-caption { 607 | display: inline-block; 608 | } 609 | 610 | .wp-caption img { 611 | margin-bottom: 0.5rem; 612 | line-height: 1; 613 | } 614 | 615 | .wp-caption-text { 616 | font-size: .; 617 | color: #4b5563; 618 | } 619 | 620 | .entry-content, .block-editor-block-list__layout { 621 | h1 { 622 | font-size: 1.5rem; 623 | } 624 | h2 { 625 | font-size: 1.25rem; 626 | } 627 | h3 { 628 | font-size: 1.125rem; 629 | } 630 | p, ul, ol { 631 | a { 632 | --tw-text-opacity: 1; 633 | color: rgb(59 130 246 / var(--tw-text-opacity)); 634 | } 635 | a { 636 | text-decoration: underline; 637 | } 638 | a { 639 | &:hover { 640 | text-decoration: none; 641 | } 642 | } 643 | } 644 | p, ul, ol { 645 | margin-bottom: 2rem; 646 | } 647 | ul { 648 | li { 649 | list-style-position: inside; 650 | } 651 | li { 652 | list-style-type: disc; 653 | } 654 | } 655 | ol { 656 | li { 657 | list-style-position: inside; 658 | } 659 | li { 660 | list-style-type: decimal; 661 | } 662 | } 663 | } 664 | 665 | @media (min-width: 1024px) { 666 | .lg\:text-5xl { 667 | font-size: 3rem; 668 | } 669 | } -------------------------------------------------------------------------------- /editor-style.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | padding-right: 1rem; 4 | padding-left: 1rem 5 | } 6 | 7 | @media (min-width: 640px) { 8 | .container { 9 | max-width: 640px; 10 | padding-right: 2rem; 11 | padding-left: 2rem 12 | } 13 | } 14 | 15 | @media (min-width: 768px) { 16 | .container { 17 | max-width: 768px 18 | } 19 | } 20 | 21 | @media (min-width: 1024px) { 22 | .container { 23 | max-width: 1024px; 24 | padding-right: 0rem; 25 | padding-left: 0rem 26 | } 27 | } 28 | 29 | @media (min-width: 1280px) { 30 | .container { 31 | max-width: 1280px 32 | } 33 | } 34 | 35 | @media (min-width: 1536px) { 36 | .container { 37 | max-width: 1536px 38 | } 39 | } 40 | 41 | .visible { 42 | visibility: visible 43 | } 44 | 45 | .mb-4 { 46 | margin-bottom: 1rem 47 | } 48 | 49 | .mb-1 { 50 | margin-bottom: 0.25rem 51 | } 52 | 53 | .text-2xl { 54 | font-size: 1.5rem 55 | } 56 | 57 | .text-sm { 58 | font-size: .875rem 59 | } 60 | 61 | .font-extrabold { 62 | font-weight: 800 63 | } 64 | 65 | .leading-tight { 66 | line-height: 1.25 67 | } 68 | 69 | .text-gray-700 { 70 | --tw-text-opacity: 1; 71 | color: rgb(55 65 81 / var(--tw-text-opacity)) 72 | } 73 | 74 | .has-primary-text-color { 75 | color: #0EA5E9 76 | } 77 | 78 | .has-secondary-text-color { 79 | color: #14B8A6 80 | } 81 | 82 | .has-dark-text-color { 83 | color: #1F2937 84 | } 85 | 86 | .has-light-text-color { 87 | color: #F9FAFB 88 | } 89 | 90 | .has-primary-background-color { 91 | background-color: #0EA5E9 92 | } 93 | 94 | .has-secondary-background-color { 95 | background-color: #14B8A6 96 | } 97 | 98 | .has-dark-background-color { 99 | background-color: #1F2937 100 | } 101 | 102 | .has-light-background-color { 103 | background-color: #F9FAFB 104 | } 105 | 106 | .alignfull { 107 | margin: 0.5rem calc(50% - 50vw); 108 | max-width: 100vw; 109 | width: 100vw 110 | } 111 | 112 | .alignwide { 113 | margin-left: -4rem; 114 | margin-right: -4rem; 115 | margin-top: 0.5rem; 116 | margin-bottom: 0.5rem; 117 | max-width: 1280px 118 | } 119 | 120 | .alignnone { 121 | margin-left: 0px; 122 | margin-right: 0px; 123 | height: auto; 124 | max-width: 100% 125 | } 126 | 127 | .aligncenter { 128 | margin: 0.5rem auto; 129 | display: block 130 | } 131 | 132 | @media (min-width: 640px) { 133 | .alignleft:not(.wp-block-button) { 134 | margin-right: 0.5rem 135 | } 136 | 137 | .alignleft:not(.wp-block-button) { 138 | float: left 139 | } 140 | 141 | .alignright:not(.wp-block-button) { 142 | margin-left: 0.5rem 143 | } 144 | 145 | .alignright:not(.wp-block-button) { 146 | float: right 147 | } 148 | 149 | .wp-block-button.alignleft a { 150 | float: left 151 | } 152 | 153 | .wp-block-button.alignleft a { 154 | margin-right: 1rem 155 | } 156 | 157 | .wp-block-button.alignright a { 158 | float: right 159 | } 160 | 161 | .wp-block-button.alignright a { 162 | margin-left: 1rem 163 | } 164 | } 165 | 166 | .has-small-font-size { 167 | font-size: 14px; 168 | font-weight: normal 169 | } 170 | 171 | .has-regular-font-size { 172 | font-size: 16px; 173 | font-weight: normal 174 | } 175 | 176 | .has-large-font-size { 177 | font-size: 18px; 178 | font-weight: bold 179 | } 180 | 181 | .wp-caption { 182 | display: inline-block 183 | } 184 | 185 | .wp-caption img { 186 | margin-bottom: 0.5rem; 187 | line-height: 1 188 | } 189 | 190 | .wp-caption-text { 191 | font-size: .; 192 | color: #4b5563 193 | } 194 | 195 | .entry-content, .block-editor-block-list__layout { 196 | h1 { 197 | font-size: 1.5rem 198 | } 199 | h2 { 200 | font-size: 1.25rem 201 | } 202 | h3 { 203 | font-size: 1.125rem 204 | } 205 | p, ul, ol { 206 | a { 207 | --tw-text-opacity: 1; 208 | color: rgb(59 130 246 / var(--tw-text-opacity)) 209 | } 210 | a { 211 | text-decoration: underline 212 | } 213 | a { 214 | &:hover { 215 | text-decoration: none 216 | } 217 | } 218 | } 219 | p, ul, ol { 220 | margin-bottom: 2rem 221 | } 222 | ul { 223 | li { 224 | list-style-position: inside 225 | } 226 | li { 227 | list-style-type: disc 228 | } 229 | } 230 | ol { 231 | li { 232 | list-style-position: inside 233 | } 234 | li { 235 | list-style-type: decimal 236 | } 237 | } 238 | } 239 | 240 | .block-editor__typewriter { 241 | font-family: SF Compact, ui-sans-serif 242 | } 243 | 244 | .wp-block { 245 | max-width: 1024px 246 | } 247 | 248 | .wp-block[data-align=wide] { 249 | max-width: 1280px 250 | } 251 | 252 | .wp-block[data-align=full] { 253 | max-width: 100% 254 | } 255 | 256 | @media (min-width: 1024px) { 257 | .lg\:text-5xl { 258 | font-size: 3rem 259 | } 260 | } -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 13 | 14 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | tag in the document head, and expect WordPress to 39 | * provide it for us. 40 | */ 41 | add_theme_support( 'title-tag' ); 42 | 43 | /* 44 | * Enable support for Post Thumbnails on posts and pages. 45 | * 46 | * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ 47 | */ 48 | add_theme_support( 'post-thumbnails' ); 49 | 50 | // This theme uses wp_nav_menu() in one location. 51 | register_nav_menus( 52 | array( 53 | 'menu-1' => esc_html__( 'Primary', 'tailwind' ), 54 | ) 55 | ); 56 | 57 | /* 58 | * Switch default core markup for search form, comment form, and comments 59 | * to output valid HTML5. 60 | */ 61 | add_theme_support( 62 | 'html5', 63 | array( 64 | 'search-form', 65 | 'comment-form', 66 | 'comment-list', 67 | 'gallery', 68 | 'caption', 69 | 'style', 70 | 'script', 71 | ) 72 | ); 73 | 74 | // Set up the WordPress core custom background feature. 75 | add_theme_support( 76 | 'custom-background', 77 | apply_filters( 78 | 'tailwind_custom_background_args', 79 | array( 80 | 'default-color' => 'ffffff', 81 | 'default-image' => '', 82 | ) 83 | ) 84 | ); 85 | 86 | // Add theme support for selective refresh for widgets. 87 | add_theme_support( 'customize-selective-refresh-widgets' ); 88 | 89 | /** 90 | * Add support for core custom logo. 91 | * 92 | * @link https://codex.wordpress.org/Theme_Logo 93 | */ 94 | add_theme_support( 95 | 'custom-logo', 96 | array( 97 | 'height' => 250, 98 | 'width' => 250, 99 | 'flex-width' => true, 100 | 'flex-height' => true, 101 | ) 102 | ); 103 | } 104 | endif; 105 | add_action( 'after_setup_theme', 'tailwind_setup' ); 106 | 107 | /** 108 | * Set the content width in pixels, based on the theme's design and stylesheet. 109 | * 110 | * Priority 0 to make it available to lower priority callbacks. 111 | * 112 | * @global int $content_width 113 | */ 114 | function tailwind_content_width() { 115 | $GLOBALS['content_width'] = apply_filters( 'tailwind_content_width', 640 ); 116 | } 117 | add_action( 'after_setup_theme', 'tailwind_content_width', 0 ); 118 | 119 | /** 120 | * Register widget area. 121 | * 122 | * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar 123 | */ 124 | function tailwind_widgets_init() { 125 | register_sidebar( 126 | array( 127 | 'name' => esc_html__( 'Sidebar', 'tailwind' ), 128 | 'id' => 'sidebar-1', 129 | 'description' => esc_html__( 'Add widgets here.', 'tailwind' ), 130 | 'before_widget' => '
', 131 | 'after_widget' => '
', 132 | 'before_title' => '

', 133 | 'after_title' => '

', 134 | ) 135 | ); 136 | } 137 | add_action( 'widgets_init', 'tailwind_widgets_init' ); 138 | 139 | /** 140 | * Get mix compiled asset. 141 | * 142 | * @param string $path The path to the asset. 143 | * 144 | * @return string 145 | */ 146 | function tailpress_get_mix_compiled_asset_url( $path ) { 147 | $path = '/' . $path; 148 | $stylesheet_dir_uri = get_stylesheet_directory_uri(); 149 | $stylesheet_dir_path = get_stylesheet_directory(); 150 | 151 | if ( ! file_exists( $stylesheet_dir_path . '/mix-manifest.json' ) ) { 152 | return $stylesheet_dir_uri . $path; 153 | } 154 | 155 | $mix_file_path = file_get_contents( $stylesheet_dir_path . '/mix-manifest.json' ); 156 | $manifest = json_decode( $mix_file_path, true ); 157 | $asset_path = ! empty( $manifest[ $path ] ) ? $manifest[ $path ] : $path; 158 | 159 | return $stylesheet_dir_uri . $asset_path; 160 | } 161 | 162 | /** 163 | * Enqueue scripts and styles. 164 | */ 165 | function tailwind_scripts() { 166 | wp_enqueue_style( 'tailwind-style', get_stylesheet_uri(), array(), _S_VERSION ); 167 | wp_style_add_data( 'tailwind-style', 'rtl', 'replace' ); 168 | 169 | wp_enqueue_style( 'tailpress', tailpress_get_mix_compiled_asset_url( 'css/app.css' ), array(), _S_VERSION ); 170 | 171 | wp_enqueue_script( 'tailpress', tailpress_get_mix_compiled_asset_url( 'js/app.js' ), array( 'jquery' ), _S_VERSION ); 172 | 173 | wp_enqueue_script( 'tailwind-navigation', get_template_directory_uri() . '/js/navigation.js', array(), _S_VERSION, true ); 174 | 175 | // Adding Alpine.js support 176 | if(defined('ALPINEJS')){ 177 | 178 | wp_enqueue_script( 'alpinejs', '//unpkg.com/alpinejs', array(), _S_VERSION ); 179 | } 180 | 181 | if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { 182 | wp_enqueue_script( 'comment-reply' ); 183 | } 184 | } 185 | add_action( 'wp_enqueue_scripts', 'tailwind_scripts' ); 186 | 187 | /** 188 | * Implement the Custom Header feature. 189 | */ 190 | require get_template_directory() . '/inc/custom-header.php'; 191 | 192 | /** 193 | * Custom template tags for this theme. 194 | */ 195 | require get_template_directory() . '/inc/template-tags.php'; 196 | 197 | /** 198 | * Functions which enhance the theme by hooking into WordPress. 199 | */ 200 | require get_template_directory() . '/inc/template-functions.php'; 201 | 202 | /** 203 | * Customizer additions. 204 | */ 205 | require get_template_directory() . '/inc/customizer.php'; 206 | 207 | /** 208 | * Load Jetpack compatibility file. 209 | */ 210 | if ( defined( 'JETPACK__VERSION' ) ) { 211 | require get_template_directory() . '/inc/jetpack.php'; 212 | } 213 | 214 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | section and everything up until
6 | * 7 | * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials 8 | * 9 | * @package tailwind 10 | */ 11 | 12 | ?> 13 | 14 | > 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | > 24 | 25 |
26 | 27 | 28 | 60 | -------------------------------------------------------------------------------- /inc/custom-header.php: -------------------------------------------------------------------------------- 1 | 8 | * 9 | * @link https://developer.wordpress.org/themes/functionality/custom-headers/ 10 | * 11 | * @package tailwind 12 | */ 13 | 14 | /** 15 | * Set up the WordPress core custom header feature. 16 | * 17 | * @uses tailwind_header_style() 18 | */ 19 | function tailwind_custom_header_setup() { 20 | add_theme_support( 21 | 'custom-header', 22 | apply_filters( 23 | 'tailwind_custom_header_args', 24 | array( 25 | 'default-image' => '', 26 | 'default-text-color' => '000000', 27 | 'width' => 1000, 28 | 'height' => 250, 29 | 'flex-height' => true, 30 | 'wp-head-callback' => 'tailwind_header_style', 31 | ) 32 | ) 33 | ); 34 | } 35 | add_action( 'after_setup_theme', 'tailwind_custom_header_setup' ); 36 | 37 | if ( ! function_exists( 'tailwind_header_style' ) ) : 38 | /** 39 | * Styles the header image and text displayed on the blog. 40 | * 41 | * @see tailwind_custom_header_setup(). 42 | */ 43 | function tailwind_header_style() { 44 | $header_text_color = get_header_textcolor(); 45 | 46 | /* 47 | * If no custom options for text are set, let's bail. 48 | * get_header_textcolor() options: Any hex value, 'blank' to hide text. Default: add_theme_support( 'custom-header' ). 49 | */ 50 | if ( get_theme_support( 'custom-header', 'default-text-color' ) === $header_text_color ) { 51 | return; 52 | } 53 | 54 | // If we get this far, we have custom styles. Let's do this. 55 | ?> 56 | 76 | get_setting( 'blogname' )->transport = 'postMessage'; 15 | $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; 16 | $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; 17 | 18 | if ( isset( $wp_customize->selective_refresh ) ) { 19 | $wp_customize->selective_refresh->add_partial( 20 | 'blogname', 21 | array( 22 | 'selector' => '.site-title a', 23 | 'render_callback' => 'tailwind_customize_partial_blogname', 24 | ) 25 | ); 26 | $wp_customize->selective_refresh->add_partial( 27 | 'blogdescription', 28 | array( 29 | 'selector' => '.site-description', 30 | 'render_callback' => 'tailwind_customize_partial_blogdescription', 31 | ) 32 | ); 33 | } 34 | } 35 | add_action( 'customize_register', 'tailwind_customize_register' ); 36 | 37 | /** 38 | * Render the site title for the selective refresh partial. 39 | * 40 | * @return void 41 | */ 42 | function tailwind_customize_partial_blogname() { 43 | bloginfo( 'name' ); 44 | } 45 | 46 | /** 47 | * Render the site tagline for the selective refresh partial. 48 | * 49 | * @return void 50 | */ 51 | function tailwind_customize_partial_blogdescription() { 52 | bloginfo( 'description' ); 53 | } 54 | 55 | /** 56 | * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. 57 | */ 58 | function tailwind_customize_preview_js() { 59 | wp_enqueue_script( 'tailwind-customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), _S_VERSION, true ); 60 | } 61 | add_action( 'customize_preview_init', 'tailwind_customize_preview_js' ); 62 | -------------------------------------------------------------------------------- /inc/jetpack.php: -------------------------------------------------------------------------------- 1 | 'main', 23 | 'render' => 'tailwind_infinite_scroll_render', 24 | 'footer' => 'page', 25 | ) 26 | ); 27 | 28 | // Add theme support for Responsive Videos. 29 | add_theme_support( 'jetpack-responsive-videos' ); 30 | 31 | // Add theme support for Content Options. 32 | add_theme_support( 33 | 'jetpack-content-options', 34 | array( 35 | 'post-details' => array( 36 | 'stylesheet' => 'tailwind-style', 37 | 'date' => '.posted-on', 38 | 'categories' => '.cat-links', 39 | 'tags' => '.tags-links', 40 | 'author' => '.byline', 41 | 'comment' => '.comments-link', 42 | ), 43 | 'featured-images' => array( 44 | 'archive' => true, 45 | 'post' => true, 46 | 'page' => true, 47 | ), 48 | ) 49 | ); 50 | } 51 | add_action( 'after_setup_theme', 'tailwind_jetpack_setup' ); 52 | 53 | /** 54 | * Custom render function for Infinite Scroll. 55 | */ 56 | function tailwind_infinite_scroll_render() { 57 | while ( have_posts() ) { 58 | the_post(); 59 | if ( is_search() ) : 60 | get_template_part( 'template-parts/content', 'search' ); 61 | else : 62 | get_template_part( 'template-parts/content', get_post_type() ); 63 | endif; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /inc/template-functions.php: -------------------------------------------------------------------------------- 1 | ', esc_url( get_bloginfo( 'pingback_url' ) ) ); 35 | } 36 | } 37 | add_action( 'wp_head', 'tailwind_pingback_header' ); 38 | -------------------------------------------------------------------------------- /inc/template-tags.php: -------------------------------------------------------------------------------- 1 | %2$s'; 16 | if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { 17 | $time_string = ''; 18 | } 19 | 20 | $time_string = sprintf( 21 | $time_string, 22 | esc_attr( get_the_date( DATE_W3C ) ), 23 | esc_html( get_the_date() ), 24 | esc_attr( get_the_modified_date( DATE_W3C ) ), 25 | esc_html( get_the_modified_date() ) 26 | ); 27 | 28 | $posted_on = sprintf( 29 | /* translators: %s: post date. */ 30 | esc_html_x( 'Posted on %s', 'post date', 'tailwind' ), 31 | '' . $time_string . '' 32 | ); 33 | 34 | echo '' . $posted_on . ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 35 | 36 | } 37 | endif; 38 | 39 | if ( ! function_exists( 'tailwind_posted_by' ) ) : 40 | /** 41 | * Prints HTML with meta information for the current author. 42 | */ 43 | function tailwind_posted_by() { 44 | $byline = sprintf( 45 | /* translators: %s: post author. */ 46 | esc_html_x( 'by %s', 'post author', 'tailwind' ), 47 | '' . esc_html( get_the_author() ) . '' 48 | ); 49 | 50 | echo ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 51 | 52 | } 53 | endif; 54 | 55 | if ( ! function_exists( 'tailwind_entry_footer' ) ) : 56 | /** 57 | * Prints HTML with meta information for the categories, tags and comments. 58 | */ 59 | function tailwind_entry_footer() { 60 | // Hide category and tag text for pages. 61 | if ( 'post' === get_post_type() ) { 62 | /* translators: used between list items, there is a space after the comma */ 63 | $categories_list = get_the_category_list( esc_html__( ', ', 'tailwind' ) ); 64 | if ( $categories_list ) { 65 | /* translators: 1: list of categories. */ 66 | printf( '' . esc_html__( 'Posted in %1$s', 'tailwind' ) . '', $categories_list ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 67 | } 68 | 69 | /* translators: used between list items, there is a space after the comma */ 70 | $tags_list = get_the_tag_list( '', esc_html_x( ', ', 'list item separator', 'tailwind' ) ); 71 | if ( $tags_list ) { 72 | /* translators: 1: list of tags. */ 73 | printf( '' . esc_html__( 'Tagged %1$s', 'tailwind' ) . '', $tags_list ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 74 | } 75 | } 76 | 77 | if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { 78 | echo ''; 79 | comments_popup_link( 80 | sprintf( 81 | wp_kses( 82 | /* translators: %s: post title */ 83 | __( 'Leave a Comment on %s', 'tailwind' ), 84 | array( 85 | 'span' => array( 86 | 'class' => array(), 87 | ), 88 | ) 89 | ), 90 | wp_kses_post( get_the_title() ) 91 | ) 92 | ); 93 | echo ''; 94 | } 95 | 96 | edit_post_link( 97 | sprintf( 98 | wp_kses( 99 | /* translators: %s: Name of current post. Only visible to screen readers */ 100 | __( 'Edit %s', 'tailwind' ), 101 | array( 102 | 'span' => array( 103 | 'class' => array(), 104 | ), 105 | ) 106 | ), 107 | wp_kses_post( get_the_title() ) 108 | ), 109 | '', 110 | '' 111 | ); 112 | } 113 | endif; 114 | 115 | if ( ! function_exists( 'tailwind_post_thumbnail' ) ) : 116 | /** 117 | * Displays an optional post thumbnail. 118 | * 119 | * Wraps the post thumbnail in an anchor element on index views, or a div 120 | * element when on single views. 121 | */ 122 | function tailwind_post_thumbnail() { 123 | if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { 124 | return; 125 | } 126 | 127 | if ( is_singular() ) : 128 | ?> 129 | 130 |
131 | 132 |
133 | 134 | 135 | 136 | 150 | 151 | 17 | 18 |
19 | 20 | 25 |
26 |

27 |
28 | 52 | 53 |
54 | 55 | {var r,e={80:()=>{jQuery(document).ready((function(){var r=jQuery("#primary-menu");jQuery("#primary-menu-toggle").on("click",(function(e){e.preventDefault(),r.toggleClass("hidden")}))}))},662:()=>{},797:()=>{}},n={};function o(r){var t=n[r];if(void 0!==t)return t.exports;var a=n[r]={exports:{}};return e[r](a,a.exports,o),a.exports}o.m=e,r=[],o.O=(e,n,t,a)=>{if(!n){var i=1/0;for(p=0;p=a)&&Object.keys(o.O).every((r=>o.O[r](n[u])))?n.splice(u--,1):(l=!1,a0&&r[p-1][2]>a;p--)r[p]=r[p-1];r[p]=[n,t,a]},o.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={773:0,226:0,170:0};o.O.j=e=>0===r[e];var e=(e,n)=>{var t,a,[i,l,u]=n,p=0;for(t in l)o.o(l,t)&&(o.m[t]=l[t]);if(u)var s=u(o);for(e&&e(n);po(80))),o.O(void 0,[226,170],(()=>o(662)));var t=o.O(void 0,[226,170],(()=>o(797)));t=o.O(t)})(); -------------------------------------------------------------------------------- /js/app.min.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function(){const main_navigation=jQuery("#primary-menu");jQuery("#primary-menu-toggle").on("click",function(e){e.preventDefault();main_navigation.toggleClass("hidden")})}); 2 | -------------------------------------------------------------------------------- /js/customizer.js: -------------------------------------------------------------------------------- 1 | /* global wp, jQuery */ 2 | /** 3 | * File customizer.js. 4 | * 5 | * Theme Customizer enhancements for a better user experience. 6 | * 7 | * Contains handlers to make Theme Customizer preview reload changes asynchronously. 8 | */ 9 | 10 | ( function( $ ) { 11 | // Site title and description. 12 | wp.customize( 'blogname', function( value ) { 13 | value.bind( function( to ) { 14 | $( '.site-title a' ).text( to ); 15 | } ); 16 | } ); 17 | wp.customize( 'blogdescription', function( value ) { 18 | value.bind( function( to ) { 19 | $( '.site-description' ).text( to ); 20 | } ); 21 | } ); 22 | 23 | // Header text color. 24 | wp.customize( 'header_textcolor', function( value ) { 25 | value.bind( function( to ) { 26 | if ( 'blank' === to ) { 27 | $( '.site-title, .site-description' ).css( { 28 | clip: 'rect(1px, 1px, 1px, 1px)', 29 | position: 'absolute', 30 | } ); 31 | } else { 32 | $( '.site-title, .site-description' ).css( { 33 | clip: 'auto', 34 | position: 'relative', 35 | } ); 36 | $( '.site-title a, .site-description' ).css( { 37 | color: to, 38 | } ); 39 | } 40 | } ); 41 | } ); 42 | }( jQuery ) ); 43 | -------------------------------------------------------------------------------- /js/navigation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * File navigation.js. 3 | * 4 | * Handles toggling the navigation menu for small screens and enables TAB key 5 | * navigation support for dropdown menus. 6 | */ 7 | ( function() { 8 | const siteNavigation = document.getElementById( 'site-navigation' ); 9 | 10 | // Return early if the navigation don't exist. 11 | if ( ! siteNavigation ) { 12 | return; 13 | } 14 | 15 | const button = siteNavigation.getElementsByTagName( 'button' )[ 0 ]; 16 | 17 | // Return early if the button don't exist. 18 | if ( 'undefined' === typeof button ) { 19 | return; 20 | } 21 | 22 | const menu = siteNavigation.getElementsByTagName( 'ul' )[ 0 ]; 23 | 24 | // Hide menu toggle button if menu is empty and return early. 25 | if ( 'undefined' === typeof menu ) { 26 | button.style.display = 'none'; 27 | return; 28 | } 29 | 30 | if ( ! menu.classList.contains( 'nav-menu' ) ) { 31 | menu.classList.add( 'nav-menu' ); 32 | } 33 | 34 | // Toggle the .toggled class and the aria-expanded value each time the button is clicked. 35 | button.addEventListener( 'click', function() { 36 | siteNavigation.classList.toggle( 'toggled' ); 37 | 38 | if ( button.getAttribute( 'aria-expanded' ) === 'true' ) { 39 | button.setAttribute( 'aria-expanded', 'false' ); 40 | } else { 41 | button.setAttribute( 'aria-expanded', 'true' ); 42 | } 43 | } ); 44 | 45 | // Remove the .toggled class and set aria-expanded to false when the user clicks outside the navigation. 46 | document.addEventListener( 'click', function( event ) { 47 | const isClickInside = siteNavigation.contains( event.target ); 48 | 49 | if ( ! isClickInside ) { 50 | siteNavigation.classList.remove( 'toggled' ); 51 | button.setAttribute( 'aria-expanded', 'false' ); 52 | } 53 | } ); 54 | 55 | // Get all the link elements within the menu. 56 | const links = menu.getElementsByTagName( 'a' ); 57 | 58 | // Get all the link elements with children within the menu. 59 | const linksWithChildren = menu.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' ); 60 | 61 | // Toggle focus each time a menu link is focused or blurred. 62 | for ( const link of links ) { 63 | link.addEventListener( 'focus', toggleFocus, true ); 64 | link.addEventListener( 'blur', toggleFocus, true ); 65 | } 66 | 67 | // Toggle focus each time a menu link with children receive a touch event. 68 | for ( const link of linksWithChildren ) { 69 | link.addEventListener( 'touchstart', toggleFocus, false ); 70 | } 71 | 72 | /** 73 | * Sets or removes .focus class on an element. 74 | */ 75 | function toggleFocus() { 76 | if ( event.type === 'focus' || event.type === 'blur' ) { 77 | let self = this; 78 | // Move up through the ancestors of the current link until we hit .nav-menu. 79 | while ( ! self.classList.contains( 'nav-menu' ) ) { 80 | // On li elements toggle the class .focus. 81 | if ( 'li' === self.tagName.toLowerCase() ) { 82 | self.classList.toggle( 'focus' ); 83 | } 84 | self = self.parentNode; 85 | } 86 | } 87 | 88 | if ( event.type === 'touchstart' ) { 89 | const menuItem = this.parentNode; 90 | event.preventDefault(); 91 | for ( const link of menuItem.parentNode.children ) { 92 | if ( menuItem !== link ) { 93 | link.classList.remove( 'focus' ); 94 | } 95 | } 96 | menuItem.classList.toggle( 'focus' ); 97 | } 98 | } 99 | }() ); 100 | -------------------------------------------------------------------------------- /languages/readme.txt: -------------------------------------------------------------------------------- 1 | Place your theme language files in this directory. 2 | 3 | Please visit the following links to learn more about translating WordPress themes: 4 | 5 | https://make.wordpress.org/polyglots/teams/ 6 | https://developer.wordpress.org/themes/functionality/localization/ 7 | https://developer.wordpress.org/reference/functions/load_theme_textdomain/ 8 | -------------------------------------------------------------------------------- /languages/tailwind.pot: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 Automattic 2 | # This file is distributed under the GNU General Public License v2 or later. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: _s 1.0.0\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/theme/_s\n" 7 | "Last-Translator: FULL NAME \n" 8 | "Language-Team: LANGUAGE \n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "POT-Creation-Date: 2020-04-17T21:03:15+00:00\n" 13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 | "X-Generator: WP-CLI 2.4.0\n" 15 | "X-Domain: _s\n" 16 | 17 | #. Theme Name of the theme 18 | msgid "_s" 19 | msgstr "" 20 | 21 | #. Theme URI of the theme 22 | msgid "https://underscores.me/" 23 | msgstr "" 24 | 25 | #. Description of the theme 26 | msgid "Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for." 27 | msgstr "" 28 | 29 | #. Author of the theme 30 | msgid "Automattic" 31 | msgstr "" 32 | 33 | #. Author URI of the theme 34 | msgid "https://automattic.com/" 35 | msgstr "" 36 | 37 | #: 404.php:18 38 | msgid "Oops! That page can’t be found." 39 | msgstr "" 40 | 41 | #: 404.php:22 42 | msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" 43 | msgstr "" 44 | 45 | #: 404.php:31 46 | msgid "Most Used Categories" 47 | msgstr "" 48 | 49 | #. translators: %1$s: smiley 50 | #: 404.php:49 51 | msgid "Try looking in the monthly archives. %1$s" 52 | msgstr "" 53 | 54 | #. translators: 1: title. 55 | #: comments.php:35 56 | msgid "One thought on “%1$s”" 57 | msgstr "" 58 | 59 | #. translators: 1: comment count number, 2: title. 60 | #: comments.php:41 61 | msgctxt "comments title" 62 | msgid "%1$s thought on “%2$s”" 63 | msgid_plural "%1$s thoughts on “%2$s”" 64 | msgstr[0] "" 65 | msgstr[1] "" 66 | 67 | #: comments.php:68 68 | msgid "Comments are closed." 69 | msgstr "" 70 | 71 | #: footer.php:18 72 | msgid "https://wordpress.org/" 73 | msgstr "" 74 | 75 | #. translators: %s: CMS name, i.e. WordPress. 76 | #: footer.php:21 77 | msgid "Proudly powered by %s" 78 | msgstr "" 79 | 80 | #. translators: 1: Theme name, 2: Theme author. 81 | #: footer.php:27 82 | msgid "Theme: %1$s by %2$s." 83 | msgstr "" 84 | 85 | #: functions.php:53 86 | msgid "Primary" 87 | msgstr "" 88 | 89 | #: functions.php:130 90 | msgid "Sidebar" 91 | msgstr "" 92 | 93 | #: functions.php:132 94 | msgid "Add widgets here." 95 | msgstr "" 96 | 97 | #: header.php:26 98 | msgid "Skip to content" 99 | msgstr "" 100 | 101 | #: header.php:49 102 | msgid "Primary Menu" 103 | msgstr "" 104 | 105 | #. translators: %s: post date. 106 | #: inc/template-tags.php:30 107 | msgctxt "post date" 108 | msgid "Posted on %s" 109 | msgstr "" 110 | 111 | #. translators: %s: post author. 112 | #: inc/template-tags.php:46 113 | msgctxt "post author" 114 | msgid "by %s" 115 | msgstr "" 116 | 117 | #. translators: used between list items, there is a space after the comma 118 | #: inc/template-tags.php:63 119 | msgid ", " 120 | msgstr "" 121 | 122 | #. translators: 1: list of categories. 123 | #: inc/template-tags.php:66 124 | msgid "Posted in %1$s" 125 | msgstr "" 126 | 127 | #. translators: used between list items, there is a space after the comma 128 | #: inc/template-tags.php:70 129 | msgctxt "list item separator" 130 | msgid ", " 131 | msgstr "" 132 | 133 | #. translators: 1: list of tags. 134 | #: inc/template-tags.php:73 135 | msgid "Tagged %1$s" 136 | msgstr "" 137 | 138 | #. translators: %s: post title 139 | #: inc/template-tags.php:83 140 | msgid "Leave a Comment on %s" 141 | msgstr "" 142 | 143 | #. translators: %s: Name of current post. Only visible to screen readers 144 | #: inc/template-tags.php:100 145 | #: template-parts/content-page.php:39 146 | msgid "Edit %s" 147 | msgstr "" 148 | 149 | #: inc/woocommerce.php:186 150 | msgid "View your shopping cart" 151 | msgstr "" 152 | 153 | #. translators: number of items in the mini cart. 154 | #: inc/woocommerce.php:190 155 | msgid "%d item" 156 | msgid_plural "%d items" 157 | msgstr[0] "" 158 | msgstr[1] "" 159 | 160 | #. translators: %s: search query. 161 | #: search.php:22 162 | msgid "Search Results for: %s" 163 | msgstr "" 164 | 165 | #: single.php:23 166 | msgid "Previous:" 167 | msgstr "" 168 | 169 | #: single.php:24 170 | msgid "Next:" 171 | msgstr "" 172 | 173 | #: template-parts/content-none.php:14 174 | msgid "Nothing Found" 175 | msgstr "" 176 | 177 | #. translators: 1: link to WP admin new post page. 178 | #: template-parts/content-none.php:24 179 | msgid "Ready to publish your first post? Get started here." 180 | msgstr "" 181 | 182 | #: template-parts/content-none.php:37 183 | msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." 184 | msgstr "" 185 | 186 | #: template-parts/content-none.php:44 187 | msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." 188 | msgstr "" 189 | 190 | #: template-parts/content-page.php:25 191 | #: template-parts/content.php:53 192 | msgid "Pages:" 193 | msgstr "" 194 | 195 | #. translators: %s: Name of current post. Only visible to screen readers 196 | #: template-parts/content.php:40 197 | msgid "Continue reading \"%s\"" 198 | msgstr "" 199 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailpress", 3 | "version": "0.1.0", 4 | "description": "Boilerplate WordPress theme with TailwindCSS.", 5 | "author": "PixelDevs", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/pixeldevsio/tailpress/tree/underscores" 9 | }, 10 | "theme_uri": "https://github.com/pixeldevsio/tailpress/tree/underscores", 11 | "author_uri": "https://pixeldevs.io", 12 | "text_domain": "tailpress", 13 | "license": "GPL-2.0", 14 | "scripts": { 15 | "development": "npx tailwindcss --postcss -i ./resources/css/app.css -o ./css/app.css; npx tailwindcss --postcss -i ./resources/css/editor-style.css -o ./editor-style.css;", 16 | "dev": "npm run development", 17 | "watch": "concurrently \"npm run watch:css-app\" \"npm run watch:js\"", 18 | "watch:css-app": "npx tailwindcss --postcss -i ./resources/css/app.css -o ./css/app.css --watch", 19 | "watch:js": "uglifyjs resources/js/app.js > js/app.min.js", 20 | "production": "NODE_ENV=production npx tailwindcss --postcss -i ./resources/css/app.css -o ./css/app.css --minify; NODE_ENV=production npx tailwindcss --postcss -i ./resources/css/editor-style.css -o ./editor-style.css --minify", 21 | "prod": "npm run production" 22 | }, 23 | "devDependencies": { 24 | "@tailwindcss/aspect-ratio": "^0.4.0", 25 | "@tailwindcss/forms": "^0.5.0", 26 | "@tailwindcss/line-clamp": "^0.3.1", 27 | "@tailwindcss/typography": "^0.5.2", 28 | "@types/tailwindcss": "^2.2.1", 29 | "autoprefixer": "^10.4.4", 30 | "cross-env": "^7.0.3", 31 | "postcss": "^8.4.12", 32 | "postcss-import": "^14.1.0", 33 | "tailwindcss": "^3.0.23" 34 | }, 35 | "dependencies": { 36 | "@fortawesome/fontawesome-free": "^5.15.4", 37 | "concurrently": "^6.3.0", 38 | "esbuild": "^0.13.8", 39 | "postcss-nested": "^5.0.6", 40 | "postcss-nested-ancestors": "^2.0.0", 41 | "resolve-url-loader": "^5.0.0", 42 | "uglify-js": "latest" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /page.php: -------------------------------------------------------------------------------- 1 | 17 | 18 |
19 | 20 | 33 | 34 |
35 | 36 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A custom set of code standard rules to check for WordPress themes. 10 | 11 | 12 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | . 36 | 37 | 38 | /vendor/* 39 | /node_modules/* 40 | 41 | 42 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 59 | 60 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('postcss-import'), 4 | require('tailwindcss'), 5 | ] 6 | } -------------------------------------------------------------------------------- /resources/css/app.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss/base"; 2 | @import "tailwindcss/components"; 3 | @import "tailwindcss/utilities"; 4 | 5 | @import "custom.css"; -------------------------------------------------------------------------------- /resources/css/block-editor.css: -------------------------------------------------------------------------------- 1 | .block-editor__typewriter { 2 | @apply font-sans; 3 | } 4 | 5 | .wp-block{ 6 | @apply max-w-screen-lg; 7 | } 8 | 9 | .wp-block[data-align=wide] { 10 | @apply max-w-screen-xl; 11 | } 12 | 13 | .wp-block[data-align=full] { 14 | @apply max-w-full; 15 | } -------------------------------------------------------------------------------- /resources/css/custom.css: -------------------------------------------------------------------------------- 1 | .entry-content, .block-editor-block-list__layout { 2 | h1 { 3 | @apply text-2xl; 4 | } 5 | 6 | h2 { 7 | @apply text-xl; 8 | } 9 | 10 | h3 { 11 | @apply text-lg; 12 | } 13 | 14 | p, ul, ol { 15 | a { 16 | @apply text-blue-500 underline; 17 | 18 | &:hover { 19 | @apply no-underline; 20 | } 21 | } 22 | 23 | @apply mb-8; 24 | } 25 | 26 | ul { 27 | li { 28 | @apply list-disc list-inside; 29 | } 30 | } 31 | 32 | ol { 33 | li { 34 | @apply list-decimal list-inside; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /resources/css/editor-style.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss/components"; 2 | @import "tailwindcss/utilities"; 3 | 4 | @import "custom.css"; 5 | @import "block-editor.css"; -------------------------------------------------------------------------------- /resources/js/app.js: -------------------------------------------------------------------------------- 1 | // Navigation toggle 2 | jQuery(document).ready(function () { 3 | 4 | const main_navigation = jQuery('#primary-menu'); 5 | 6 | jQuery('#primary-menu-toggle').on('click', function (e) { 7 | e.preventDefault(); 8 | 9 | main_navigation.toggleClass('hidden'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /safelist.txt: -------------------------------------------------------------------------------- 1 | has-primary-text-color 2 | has-secondary-text-color 3 | has-dark-text-color 4 | has-light-text-color 5 | has-primary-background-color 6 | has-secondary-background-color 7 | has-dark-background-color 8 | has-light-background-color 9 | has-small-font-size 10 | has-regular-font-size 11 | has-large-font-size 12 | alignfull 13 | alignwide 14 | alignnone 15 | aligncenter 16 | alignright 17 | wp-block-button 18 | wp-caption 19 | wp-caption-text -------------------------------------------------------------------------------- /search.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 | 16 | 17 | 25 | 26 | 48 | 49 |
50 | 51 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /single.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 | '' . esc_html__( 'Previous:', 'tailwind' ) . ' %title', 24 | 'next_text' => '' . esc_html__( 'Next:', 'tailwind' ) . ' %title', 25 | ) 26 | ); 27 | 28 | // If comments are open or we have at least one comment, load up the comment template. 29 | if ( comments_open() || get_comments_number() ) : 30 | comments_template(); 31 | endif; 32 | 33 | endwhile; // End of the loop. 34 | ?> 35 | 36 |
37 | 38 | tailwind, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for. 7 | Version: 1.0.0 8 | Tested up to: 5.4 9 | Requires PHP: 5.6 10 | License: GNU General Public License v2 or later 11 | License URI: LICENSE 12 | Text Domain: tailwind 13 | Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready 14 | 15 | This theme, like WordPress, is licensed under the GPL. 16 | Use it to make something cool, have fun, and share what you've learned. 17 | 18 | tailwind is based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc. 19 | Underscores is distributed under the terms of the GNU GPL v2 or later. 20 | 21 | Normalizing styles have been helped along thanks to the fine work of 22 | Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ 23 | */ 24 | 25 | /*-------------------------------------------------------------- 26 | >>> TABLE OF CONTENTS: 27 | ---------------------------------------------------------------- 28 | # Generic 29 | - Normalize 30 | - Box sizing 31 | # Base 32 | - Typography 33 | - Elements 34 | - Links 35 | - Forms 36 | ## Layouts 37 | # Components 38 | - Navigation 39 | - Posts and pages 40 | - Comments 41 | - Widgets 42 | - Media 43 | - Captions 44 | - Galleries 45 | # plugins 46 | - Jetpack infinite scroll 47 | # Utilities 48 | - Accessibility 49 | - Alignments 50 | 51 | --------------------------------------------------------------*/ 52 | 53 | /*-------------------------------------------------------------- 54 | # Generic 55 | --------------------------------------------------------------*/ 56 | 57 | /* Normalize 58 | --------------------------------------------- */ 59 | 60 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 61 | 62 | /* Document 63 | ========================================================================== */ 64 | 65 | /** 66 | * 1. Correct the line height in all browsers. 67 | * 2. Prevent adjustments of font size after orientation changes in iOS. 68 | */ 69 | html { 70 | line-height: 1.15; 71 | -webkit-text-size-adjust: 100%; 72 | } 73 | 74 | /* Sections 75 | ========================================================================== */ 76 | 77 | /** 78 | * Remove the margin in all browsers. 79 | */ 80 | body { 81 | margin: 0; 82 | } 83 | 84 | /** 85 | * Render the `main` element consistently in IE. 86 | */ 87 | main { 88 | display: block; 89 | } 90 | 91 | /** 92 | * Correct the font size and margin on `h1` elements within `section` and 93 | * `article` contexts in Chrome, Firefox, and Safari. 94 | */ 95 | h1 { 96 | font-size: 2em; 97 | margin: 0.67em 0; 98 | } 99 | 100 | /* Grouping content 101 | ========================================================================== */ 102 | 103 | /** 104 | * 1. Add the correct box sizing in Firefox. 105 | * 2. Show the overflow in Edge and IE. 106 | */ 107 | hr { 108 | box-sizing: content-box; 109 | height: 0; 110 | overflow: visible; 111 | } 112 | 113 | /** 114 | * 1. Correct the inheritance and scaling of font size in all browsers. 115 | * 2. Correct the odd `em` font sizing in all browsers. 116 | */ 117 | pre { 118 | font-family: monospace, monospace; 119 | font-size: 1em; 120 | } 121 | 122 | /* Text-level semantics 123 | ========================================================================== */ 124 | 125 | /** 126 | * Remove the gray background on active links in IE 10. 127 | */ 128 | a { 129 | background-color: transparent; 130 | } 131 | 132 | /** 133 | * 1. Remove the bottom border in Chrome 57- 134 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 135 | */ 136 | abbr[title] { 137 | border-bottom: none; 138 | text-decoration: underline; 139 | text-decoration: underline dotted; 140 | } 141 | 142 | /** 143 | * Add the correct font weight in Chrome, Edge, and Safari. 144 | */ 145 | b, 146 | strong { 147 | font-weight: bolder; 148 | } 149 | 150 | /** 151 | * 1. Correct the inheritance and scaling of font size in all browsers. 152 | * 2. Correct the odd `em` font sizing in all browsers. 153 | */ 154 | code, 155 | kbd, 156 | samp { 157 | font-family: monospace, monospace; 158 | font-size: 1em; 159 | } 160 | 161 | /** 162 | * Add the correct font size in all browsers. 163 | */ 164 | small { 165 | font-size: 80%; 166 | } 167 | 168 | /** 169 | * Prevent `sub` and `sup` elements from affecting the line height in 170 | * all browsers. 171 | */ 172 | sub, 173 | sup { 174 | font-size: 75%; 175 | line-height: 0; 176 | position: relative; 177 | vertical-align: baseline; 178 | } 179 | 180 | sub { 181 | bottom: -0.25em; 182 | } 183 | 184 | sup { 185 | top: -0.5em; 186 | } 187 | 188 | /* Embedded content 189 | ========================================================================== */ 190 | 191 | /** 192 | * Remove the border on images inside links in IE 10. 193 | */ 194 | img { 195 | border-style: none; 196 | } 197 | 198 | /* Forms 199 | ========================================================================== */ 200 | 201 | /** 202 | * 1. Change the font styles in all browsers. 203 | * 2. Remove the margin in Firefox and Safari. 204 | */ 205 | button, 206 | input, 207 | optgroup, 208 | select, 209 | textarea { 210 | font-family: inherit; 211 | font-size: 100%; 212 | line-height: 1.15; 213 | margin: 0; 214 | } 215 | 216 | /** 217 | * Show the overflow in IE. 218 | * 1. Show the overflow in Edge. 219 | */ 220 | button, 221 | input { 222 | overflow: visible; 223 | } 224 | 225 | /** 226 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 227 | * 1. Remove the inheritance of text transform in Firefox. 228 | */ 229 | button, 230 | select { 231 | text-transform: none; 232 | } 233 | 234 | /** 235 | * Correct the inability to style clickable types in iOS and Safari. 236 | */ 237 | button, 238 | [type="button"], 239 | [type="reset"], 240 | [type="submit"] { 241 | -webkit-appearance: button; 242 | } 243 | 244 | /** 245 | * Remove the inner border and padding in Firefox. 246 | */ 247 | button::-moz-focus-inner, 248 | [type="button"]::-moz-focus-inner, 249 | [type="reset"]::-moz-focus-inner, 250 | [type="submit"]::-moz-focus-inner { 251 | border-style: none; 252 | padding: 0; 253 | } 254 | 255 | /** 256 | * Restore the focus styles unset by the previous rule. 257 | */ 258 | button:-moz-focusring, 259 | [type="button"]:-moz-focusring, 260 | [type="reset"]:-moz-focusring, 261 | [type="submit"]:-moz-focusring { 262 | outline: 1px dotted ButtonText; 263 | } 264 | 265 | /** 266 | * Correct the padding in Firefox. 267 | */ 268 | fieldset { 269 | padding: 0.35em 0.75em 0.625em; 270 | } 271 | 272 | /** 273 | * 1. Correct the text wrapping in Edge and IE. 274 | * 2. Correct the color inheritance from `fieldset` elements in IE. 275 | * 3. Remove the padding so developers are not caught out when they zero out 276 | * `fieldset` elements in all browsers. 277 | */ 278 | legend { 279 | box-sizing: border-box; 280 | color: inherit; 281 | display: table; 282 | max-width: 100%; 283 | padding: 0; 284 | white-space: normal; 285 | } 286 | 287 | /** 288 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 289 | */ 290 | progress { 291 | vertical-align: baseline; 292 | } 293 | 294 | /** 295 | * Remove the default vertical scrollbar in IE 10+. 296 | */ 297 | textarea { 298 | overflow: auto; 299 | } 300 | 301 | /** 302 | * 1. Add the correct box sizing in IE 10. 303 | * 2. Remove the padding in IE 10. 304 | */ 305 | [type="checkbox"], 306 | [type="radio"] { 307 | box-sizing: border-box; 308 | padding: 0; 309 | } 310 | 311 | /** 312 | * Correct the cursor style of increment and decrement buttons in Chrome. 313 | */ 314 | [type="number"]::-webkit-inner-spin-button, 315 | [type="number"]::-webkit-outer-spin-button { 316 | height: auto; 317 | } 318 | 319 | /** 320 | * 1. Correct the odd appearance in Chrome and Safari. 321 | * 2. Correct the outline style in Safari. 322 | */ 323 | [type="search"] { 324 | -webkit-appearance: textfield; 325 | outline-offset: -2px; 326 | } 327 | 328 | /** 329 | * Remove the inner padding in Chrome and Safari on macOS. 330 | */ 331 | [type="search"]::-webkit-search-decoration { 332 | -webkit-appearance: none; 333 | } 334 | 335 | /** 336 | * 1. Correct the inability to style clickable types in iOS and Safari. 337 | * 2. Change font properties to `inherit` in Safari. 338 | */ 339 | ::-webkit-file-upload-button { 340 | -webkit-appearance: button; 341 | font: inherit; 342 | } 343 | 344 | /* Interactive 345 | ========================================================================== */ 346 | 347 | /* 348 | * Add the correct display in Edge, IE 10+, and Firefox. 349 | */ 350 | details { 351 | display: block; 352 | } 353 | 354 | /* 355 | * Add the correct display in all browsers. 356 | */ 357 | summary { 358 | display: list-item; 359 | } 360 | 361 | /* Misc 362 | ========================================================================== */ 363 | 364 | /** 365 | * Add the correct display in IE 10+. 366 | */ 367 | template { 368 | display: none; 369 | } 370 | 371 | /** 372 | * Add the correct display in IE 10. 373 | */ 374 | [hidden] { 375 | display: none; 376 | } 377 | 378 | /* Box sizing 379 | --------------------------------------------- */ 380 | 381 | /* Inherit box-sizing to more easily change it's value on a component level. 382 | @link http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ 383 | *, 384 | *::before, 385 | *::after { 386 | box-sizing: inherit; 387 | } 388 | 389 | html { 390 | box-sizing: border-box; 391 | } 392 | 393 | /*-------------------------------------------------------------- 394 | # Base 395 | --------------------------------------------------------------*/ 396 | 397 | /* Typography 398 | --------------------------------------------- */ 399 | body, 400 | button, 401 | input, 402 | select, 403 | optgroup, 404 | textarea { 405 | color: #404040; 406 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 407 | font-size: 1rem; 408 | line-height: 1.5; 409 | } 410 | 411 | h1, 412 | h2, 413 | h3, 414 | h4, 415 | h5, 416 | h6 { 417 | clear: both; 418 | } 419 | 420 | p { 421 | margin-bottom: 1.5em; 422 | } 423 | 424 | dfn, 425 | cite, 426 | em, 427 | i { 428 | font-style: italic; 429 | } 430 | 431 | blockquote { 432 | margin: 0 1.5em; 433 | } 434 | 435 | address { 436 | margin: 0 0 1.5em; 437 | } 438 | 439 | pre { 440 | background: #eee; 441 | font-family: "Courier 10 Pitch", courier, monospace; 442 | line-height: 1.6; 443 | margin-bottom: 1.6em; 444 | max-width: 100%; 445 | overflow: auto; 446 | padding: 1.6em; 447 | } 448 | 449 | code, 450 | kbd, 451 | tt, 452 | var { 453 | font-family: monaco, consolas, "Andale Mono", "DejaVu Sans Mono", monospace; 454 | } 455 | 456 | abbr, 457 | acronym { 458 | border-bottom: 1px dotted #666; 459 | cursor: help; 460 | } 461 | 462 | mark, 463 | ins { 464 | background: #fff9c0; 465 | text-decoration: none; 466 | } 467 | 468 | big { 469 | font-size: 125%; 470 | } 471 | 472 | /* Elements 473 | --------------------------------------------- */ 474 | body { 475 | background: #fff; 476 | } 477 | 478 | hr { 479 | background-color: #ccc; 480 | border: 0; 481 | height: 1px; 482 | margin-bottom: 1.5em; 483 | } 484 | 485 | ul, 486 | ol { 487 | margin: 0 3em 1.5em 0; 488 | } 489 | 490 | ul { 491 | list-style: disc; 492 | } 493 | 494 | ol { 495 | list-style: decimal; 496 | } 497 | 498 | li > ul, 499 | li > ol { 500 | margin-bottom: 0; 501 | margin-right: 1.5em; 502 | } 503 | 504 | dt { 505 | font-weight: 700; 506 | } 507 | 508 | dd { 509 | margin: 0 1.5em 1.5em; 510 | } 511 | 512 | /* Make sure embeds and iframes fit their containers. */ 513 | embed, 514 | iframe, 515 | object { 516 | max-width: 100%; 517 | } 518 | 519 | img { 520 | height: auto; 521 | max-width: 100%; 522 | } 523 | 524 | figure { 525 | margin: 1em 0; 526 | } 527 | 528 | table { 529 | margin: 0 0 1.5em; 530 | width: 100%; 531 | } 532 | 533 | /* Links 534 | --------------------------------------------- */ 535 | a { 536 | color: #4169e1; 537 | } 538 | 539 | a:visited { 540 | color: #800080; 541 | } 542 | 543 | a:hover, 544 | a:focus, 545 | a:active { 546 | color: #191970; 547 | } 548 | 549 | a:focus { 550 | outline: thin dotted; 551 | } 552 | 553 | a:hover, 554 | a:active { 555 | outline: 0; 556 | } 557 | 558 | /* Forms 559 | --------------------------------------------- */ 560 | button, 561 | input[type="button"], 562 | input[type="reset"], 563 | input[type="submit"] { 564 | border: 1px solid; 565 | border-color: #ccc #ccc #bbb; 566 | border-radius: 3px; 567 | background: #e6e6e6; 568 | color: rgba(0, 0, 0, 0.8); 569 | line-height: 1; 570 | padding: 0.6em 1em 0.4em; 571 | } 572 | 573 | button:hover, 574 | input[type="button"]:hover, 575 | input[type="reset"]:hover, 576 | input[type="submit"]:hover { 577 | border-color: #ccc #bbb #aaa; 578 | } 579 | 580 | button:active, 581 | button:focus, 582 | input[type="button"]:active, 583 | input[type="button"]:focus, 584 | input[type="reset"]:active, 585 | input[type="reset"]:focus, 586 | input[type="submit"]:active, 587 | input[type="submit"]:focus { 588 | border-color: #aaa #bbb #bbb; 589 | } 590 | 591 | input[type="text"], 592 | input[type="email"], 593 | input[type="url"], 594 | input[type="password"], 595 | input[type="search"], 596 | input[type="number"], 597 | input[type="tel"], 598 | input[type="range"], 599 | input[type="date"], 600 | input[type="month"], 601 | input[type="week"], 602 | input[type="time"], 603 | input[type="datetime"], 604 | input[type="datetime-local"], 605 | input[type="color"], 606 | textarea { 607 | color: #666; 608 | border: 1px solid #ccc; 609 | border-radius: 3px; 610 | padding: 3px; 611 | } 612 | 613 | input[type="text"]:focus, 614 | input[type="email"]:focus, 615 | input[type="url"]:focus, 616 | input[type="password"]:focus, 617 | input[type="search"]:focus, 618 | input[type="number"]:focus, 619 | input[type="tel"]:focus, 620 | input[type="range"]:focus, 621 | input[type="date"]:focus, 622 | input[type="month"]:focus, 623 | input[type="week"]:focus, 624 | input[type="time"]:focus, 625 | input[type="datetime"]:focus, 626 | input[type="datetime-local"]:focus, 627 | input[type="color"]:focus, 628 | textarea:focus { 629 | color: #111; 630 | } 631 | 632 | select { 633 | border: 1px solid #ccc; 634 | } 635 | 636 | textarea { 637 | width: 100%; 638 | } 639 | 640 | /*-------------------------------------------------------------- 641 | # Layouts 642 | --------------------------------------------------------------*/ 643 | 644 | /*-------------------------------------------------------------- 645 | # Components 646 | --------------------------------------------------------------*/ 647 | 648 | /* Navigation 649 | --------------------------------------------- */ 650 | .main-navigation { 651 | display: block; 652 | width: 100%; 653 | } 654 | 655 | .main-navigation ul { 656 | display: none; 657 | list-style: none; 658 | margin: 0; 659 | padding-right: 0; 660 | } 661 | 662 | .main-navigation ul ul { 663 | box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); 664 | float: right; 665 | position: absolute; 666 | top: 100%; 667 | right: -999em; 668 | z-index: 99999; 669 | } 670 | 671 | .main-navigation ul ul ul { 672 | right: -999em; 673 | top: 0; 674 | } 675 | 676 | .main-navigation ul ul li:hover > ul, 677 | .main-navigation ul ul li.focus > ul { 678 | display: block; 679 | right: auto; 680 | } 681 | 682 | .main-navigation ul ul a { 683 | width: 200px; 684 | } 685 | 686 | .main-navigation ul li:hover > ul, 687 | .main-navigation ul li.focus > ul { 688 | right: auto; 689 | } 690 | 691 | .main-navigation li { 692 | position: relative; 693 | } 694 | 695 | .main-navigation a { 696 | display: block; 697 | text-decoration: none; 698 | } 699 | 700 | /* Small menu. */ 701 | .menu-toggle, 702 | .main-navigation.toggled ul { 703 | display: block; 704 | } 705 | 706 | @media screen and (min-width: 37.5em) { 707 | 708 | .menu-toggle { 709 | display: none; 710 | } 711 | 712 | .main-navigation ul { 713 | display: flex; 714 | } 715 | } 716 | 717 | .site-main .comment-navigation, 718 | .site-main 719 | .posts-navigation, 720 | .site-main 721 | .post-navigation { 722 | margin: 0 0 1.5em; 723 | } 724 | 725 | .comment-navigation .nav-links, 726 | .posts-navigation .nav-links, 727 | .post-navigation .nav-links { 728 | display: flex; 729 | } 730 | 731 | .comment-navigation .nav-previous, 732 | .posts-navigation .nav-previous, 733 | .post-navigation .nav-previous { 734 | flex: 1 0 50%; 735 | } 736 | 737 | .comment-navigation .nav-next, 738 | .posts-navigation .nav-next, 739 | .post-navigation .nav-next { 740 | text-align: end; 741 | flex: 1 0 50%; 742 | } 743 | 744 | /* Posts and pages 745 | --------------------------------------------- */ 746 | .sticky { 747 | display: block; 748 | } 749 | 750 | .post, 751 | .page { 752 | margin: 0 0 1.5em; 753 | } 754 | 755 | .updated:not(.published) { 756 | display: none; 757 | } 758 | 759 | .page-content, 760 | .entry-content, 761 | .entry-summary { 762 | margin: 1.5em 0 0; 763 | } 764 | 765 | .page-links { 766 | clear: both; 767 | margin: 0 0 1.5em; 768 | } 769 | 770 | /* Comments 771 | --------------------------------------------- */ 772 | .comment-content a { 773 | word-wrap: break-word; 774 | } 775 | 776 | .bypostauthor { 777 | display: block; 778 | } 779 | 780 | /* Widgets 781 | --------------------------------------------- */ 782 | .widget { 783 | margin: 0 0 1.5em; 784 | } 785 | 786 | .widget select { 787 | max-width: 100%; 788 | } 789 | 790 | /* Media 791 | --------------------------------------------- */ 792 | .page-content .wp-smiley, 793 | .entry-content .wp-smiley, 794 | .comment-content .wp-smiley { 795 | border: none; 796 | margin-bottom: 0; 797 | margin-top: 0; 798 | padding: 0; 799 | } 800 | 801 | /* Make sure logo link wraps around logo image. */ 802 | .custom-logo-link { 803 | display: inline-block; 804 | } 805 | 806 | /* Captions 807 | --------------------------------------------- */ 808 | .wp-caption { 809 | margin-bottom: 1.5em; 810 | max-width: 100%; 811 | } 812 | 813 | .wp-caption img[class*="wp-image-"] { 814 | display: block; 815 | margin-right: auto; 816 | margin-left: auto; 817 | } 818 | 819 | .wp-caption .wp-caption-text { 820 | margin: 0.8075em 0; 821 | } 822 | 823 | .wp-caption-text { 824 | text-align: center; 825 | } 826 | 827 | /* Galleries 828 | --------------------------------------------- */ 829 | .gallery { 830 | margin-bottom: 1.5em; 831 | display: grid; 832 | grid-gap: 1.5em; 833 | } 834 | 835 | .gallery-item { 836 | display: inline-block; 837 | text-align: center; 838 | width: 100%; 839 | } 840 | 841 | .gallery-columns-2 { 842 | grid-template-columns: repeat(2, 1fr); 843 | } 844 | 845 | .gallery-columns-3 { 846 | grid-template-columns: repeat(3, 1fr); 847 | } 848 | 849 | .gallery-columns-4 { 850 | grid-template-columns: repeat(4, 1fr); 851 | } 852 | 853 | .gallery-columns-5 { 854 | grid-template-columns: repeat(5, 1fr); 855 | } 856 | 857 | .gallery-columns-6 { 858 | grid-template-columns: repeat(6, 1fr); 859 | } 860 | 861 | .gallery-columns-7 { 862 | grid-template-columns: repeat(7, 1fr); 863 | } 864 | 865 | .gallery-columns-8 { 866 | grid-template-columns: repeat(8, 1fr); 867 | } 868 | 869 | .gallery-columns-9 { 870 | grid-template-columns: repeat(9, 1fr); 871 | } 872 | 873 | .gallery-caption { 874 | display: block; 875 | } 876 | 877 | /*-------------------------------------------------------------- 878 | # Plugins 879 | --------------------------------------------------------------*/ 880 | 881 | /* Jetpack infinite scroll 882 | --------------------------------------------- */ 883 | 884 | /* Hide the Posts Navigation and the Footer when Infinite Scroll is in use. */ 885 | .infinite-scroll .posts-navigation, 886 | .infinite-scroll.neverending .site-footer { 887 | display: none; 888 | } 889 | 890 | /* Re-display the Theme Footer when Infinite Scroll has reached its end. */ 891 | .infinity-end.neverending .site-footer { 892 | display: block; 893 | } 894 | 895 | /*-------------------------------------------------------------- 896 | # Utilities 897 | --------------------------------------------------------------*/ 898 | 899 | /* Accessibility 900 | --------------------------------------------- */ 901 | 902 | /* Text meant only for screen readers. */ 903 | .screen-reader-text { 904 | border: 0; 905 | clip: rect(1px, 1px, 1px, 1px); 906 | clip-path: inset(50%); 907 | height: 1px; 908 | margin: -1px; 909 | overflow: hidden; 910 | padding: 0; 911 | position: absolute !important; 912 | width: 1px; 913 | word-wrap: normal !important; 914 | } 915 | 916 | .screen-reader-text:focus { 917 | background-color: #f1f1f1; 918 | border-radius: 3px; 919 | box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); 920 | clip: auto !important; 921 | clip-path: none; 922 | color: #21759b; 923 | display: block; 924 | font-size: 0.875rem; 925 | font-weight: 700; 926 | height: auto; 927 | right: 5px; 928 | line-height: normal; 929 | padding: 15px 23px 14px; 930 | text-decoration: none; 931 | top: 5px; 932 | width: auto; 933 | z-index: 100000; 934 | } 935 | 936 | /* Do not show the outline on the skip link target. */ 937 | #primary[tabindex="-1"]:focus { 938 | outline: 0; 939 | } 940 | 941 | /* Alignments 942 | --------------------------------------------- */ 943 | .alignleft { 944 | float: left; 945 | margin-right: 1.5em; 946 | margin-bottom: 1.5em; 947 | } 948 | 949 | .alignright { 950 | float: right; 951 | margin-left: 1.5em; 952 | margin-bottom: 1.5em; 953 | } 954 | 955 | .aligncenter { 956 | clear: both; 957 | display: block; 958 | margin-right: auto; 959 | margin-left: auto; 960 | margin-bottom: 1.5em; 961 | } 962 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /*! 2 | Theme Name: tailwind 3 | Theme URI: http://underscores.me/ 4 | Author: Underscores.me 5 | Author URI: http://underscores.me/ 6 | Description: Block-Enabled Tailwind Theme for WordPress using Underscores 7 | Tags: full-site-editing, blog, custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready 8 | Version: 1.0.0 9 | Requires at least: 5.0 10 | Tested up to: 5.7 11 | Requires PHP: 7.0 12 | License: GNU General Public License v2 or later 13 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 14 | Text Domain: tailwind 15 | 16 | This theme, like WordPress, is licensed under the GPL. 17 | Use it to make something cool, have fun, and share what you've learned. 18 | 19 | tailwind is based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc. 20 | Underscores is distributed under the terms of the GNU GPL v2 or later. 21 | 22 | Normalizing styles have been helped along thanks to the fine work of 23 | Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ 24 | */ 25 | 26 | /*-------------------------------------------------------------- 27 | >>> TABLE OF CONTENTS: 28 | ---------------------------------------------------------------- 29 | # Generic 30 | - Normalize 31 | - Box sizing 32 | # Base 33 | - Typography 34 | - Elements 35 | - Links 36 | - Forms 37 | ## Layouts 38 | # Components 39 | - Navigation 40 | - Posts and pages 41 | - Comments 42 | - Widgets 43 | - Media 44 | - Captions 45 | - Galleries 46 | # plugins 47 | - Jetpack infinite scroll 48 | # Utilities 49 | - Accessibility 50 | - Alignments 51 | 52 | --------------------------------------------------------------*/ 53 | 54 | /*-------------------------------------------------------------- 55 | # Generic 56 | --------------------------------------------------------------*/ 57 | 58 | /* Normalize 59 | --------------------------------------------- */ 60 | 61 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 62 | 63 | /* Document 64 | ========================================================================== */ 65 | 66 | /** 67 | * 1. Correct the line height in all browsers. 68 | * 2. Prevent adjustments of font size after orientation changes in iOS. 69 | */ 70 | html { 71 | line-height: 1.15; 72 | -webkit-text-size-adjust: 100%; 73 | } 74 | 75 | /* Sections 76 | ========================================================================== */ 77 | 78 | /** 79 | * Remove the margin in all browsers. 80 | */ 81 | body { 82 | margin: 0; 83 | } 84 | 85 | /** 86 | * Render the `main` element consistently in IE. 87 | */ 88 | main { 89 | display: block; 90 | } 91 | 92 | /** 93 | * Correct the font size and margin on `h1` elements within `section` and 94 | * `article` contexts in Chrome, Firefox, and Safari. 95 | */ 96 | h1 { 97 | font-size: 2em; 98 | margin: 0.67em 0; 99 | } 100 | 101 | /* Grouping content 102 | ========================================================================== */ 103 | 104 | /** 105 | * 1. Add the correct box sizing in Firefox. 106 | * 2. Show the overflow in Edge and IE. 107 | */ 108 | hr { 109 | box-sizing: content-box; 110 | height: 0; 111 | overflow: visible; 112 | } 113 | 114 | /** 115 | * 1. Correct the inheritance and scaling of font size in all browsers. 116 | * 2. Correct the odd `em` font sizing in all browsers. 117 | */ 118 | pre { 119 | font-family: monospace, monospace; 120 | font-size: 1em; 121 | } 122 | 123 | /* Text-level semantics 124 | ========================================================================== */ 125 | 126 | /** 127 | * Remove the gray background on active links in IE 10. 128 | */ 129 | a { 130 | background-color: transparent; 131 | } 132 | 133 | /** 134 | * 1. Remove the bottom border in Chrome 57- 135 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 136 | */ 137 | abbr[title] { 138 | border-bottom: none; 139 | text-decoration: underline; 140 | text-decoration: underline dotted; 141 | } 142 | 143 | /** 144 | * Add the correct font weight in Chrome, Edge, and Safari. 145 | */ 146 | b, 147 | strong { 148 | font-weight: bolder; 149 | } 150 | 151 | /** 152 | * 1. Correct the inheritance and scaling of font size in all browsers. 153 | * 2. Correct the odd `em` font sizing in all browsers. 154 | */ 155 | code, 156 | kbd, 157 | samp { 158 | font-family: monospace, monospace; 159 | font-size: 1em; 160 | } 161 | 162 | /** 163 | * Add the correct font size in all browsers. 164 | */ 165 | small { 166 | font-size: 80%; 167 | } 168 | 169 | /** 170 | * Prevent `sub` and `sup` elements from affecting the line height in 171 | * all browsers. 172 | */ 173 | sub, 174 | sup { 175 | font-size: 75%; 176 | line-height: 0; 177 | position: relative; 178 | vertical-align: baseline; 179 | } 180 | 181 | sub { 182 | bottom: -0.25em; 183 | } 184 | 185 | sup { 186 | top: -0.5em; 187 | } 188 | 189 | /* Embedded content 190 | ========================================================================== */ 191 | 192 | /** 193 | * Remove the border on images inside links in IE 10. 194 | */ 195 | img { 196 | border-style: none; 197 | } 198 | 199 | /* Forms 200 | ========================================================================== */ 201 | 202 | /** 203 | * 1. Change the font styles in all browsers. 204 | * 2. Remove the margin in Firefox and Safari. 205 | */ 206 | button, 207 | input, 208 | optgroup, 209 | select, 210 | textarea { 211 | font-family: inherit; 212 | font-size: 100%; 213 | line-height: 1.15; 214 | margin: 0; 215 | } 216 | 217 | /** 218 | * Show the overflow in IE. 219 | * 1. Show the overflow in Edge. 220 | */ 221 | button, 222 | input { 223 | overflow: visible; 224 | } 225 | 226 | /** 227 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 228 | * 1. Remove the inheritance of text transform in Firefox. 229 | */ 230 | button, 231 | select { 232 | text-transform: none; 233 | } 234 | 235 | /** 236 | * Correct the inability to style clickable types in iOS and Safari. 237 | */ 238 | button, 239 | [type="button"], 240 | [type="reset"], 241 | [type="submit"] { 242 | -webkit-appearance: button; 243 | } 244 | 245 | /** 246 | * Remove the inner border and padding in Firefox. 247 | */ 248 | button::-moz-focus-inner, 249 | [type="button"]::-moz-focus-inner, 250 | [type="reset"]::-moz-focus-inner, 251 | [type="submit"]::-moz-focus-inner { 252 | border-style: none; 253 | padding: 0; 254 | } 255 | 256 | /** 257 | * Restore the focus styles unset by the previous rule. 258 | */ 259 | button:-moz-focusring, 260 | [type="button"]:-moz-focusring, 261 | [type="reset"]:-moz-focusring, 262 | [type="submit"]:-moz-focusring { 263 | outline: 1px dotted ButtonText; 264 | } 265 | 266 | /** 267 | * Correct the padding in Firefox. 268 | */ 269 | fieldset { 270 | padding: 0.35em 0.75em 0.625em; 271 | } 272 | 273 | /** 274 | * 1. Correct the text wrapping in Edge and IE. 275 | * 2. Correct the color inheritance from `fieldset` elements in IE. 276 | * 3. Remove the padding so developers are not caught out when they zero out 277 | * `fieldset` elements in all browsers. 278 | */ 279 | legend { 280 | box-sizing: border-box; 281 | color: inherit; 282 | display: table; 283 | max-width: 100%; 284 | padding: 0; 285 | white-space: normal; 286 | } 287 | 288 | /** 289 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 290 | */ 291 | progress { 292 | vertical-align: baseline; 293 | } 294 | 295 | /** 296 | * Remove the default vertical scrollbar in IE 10+. 297 | */ 298 | textarea { 299 | overflow: auto; 300 | } 301 | 302 | /** 303 | * 1. Add the correct box sizing in IE 10. 304 | * 2. Remove the padding in IE 10. 305 | */ 306 | [type="checkbox"], 307 | [type="radio"] { 308 | box-sizing: border-box; 309 | padding: 0; 310 | } 311 | 312 | /** 313 | * Correct the cursor style of increment and decrement buttons in Chrome. 314 | */ 315 | [type="number"]::-webkit-inner-spin-button, 316 | [type="number"]::-webkit-outer-spin-button { 317 | height: auto; 318 | } 319 | 320 | /** 321 | * 1. Correct the odd appearance in Chrome and Safari. 322 | * 2. Correct the outline style in Safari. 323 | */ 324 | [type="search"] { 325 | -webkit-appearance: textfield; 326 | outline-offset: -2px; 327 | } 328 | 329 | /** 330 | * Remove the inner padding in Chrome and Safari on macOS. 331 | */ 332 | [type="search"]::-webkit-search-decoration { 333 | -webkit-appearance: none; 334 | } 335 | 336 | /** 337 | * 1. Correct the inability to style clickable types in iOS and Safari. 338 | * 2. Change font properties to `inherit` in Safari. 339 | */ 340 | ::-webkit-file-upload-button { 341 | -webkit-appearance: button; 342 | font: inherit; 343 | } 344 | 345 | /* Interactive 346 | ========================================================================== */ 347 | 348 | /* 349 | * Add the correct display in Edge, IE 10+, and Firefox. 350 | */ 351 | details { 352 | display: block; 353 | } 354 | 355 | /* 356 | * Add the correct display in all browsers. 357 | */ 358 | summary { 359 | display: list-item; 360 | } 361 | 362 | /* Misc 363 | ========================================================================== */ 364 | 365 | /** 366 | * Add the correct display in IE 10+. 367 | */ 368 | template { 369 | display: none; 370 | } 371 | 372 | /** 373 | * Add the correct display in IE 10. 374 | */ 375 | [hidden] { 376 | display: none; 377 | } 378 | 379 | /* Box sizing 380 | --------------------------------------------- */ 381 | 382 | /* Inherit box-sizing to more easily change it's value on a component level. 383 | @link http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ 384 | *, 385 | *::before, 386 | *::after { 387 | box-sizing: inherit; 388 | } 389 | 390 | html { 391 | box-sizing: border-box; 392 | } 393 | 394 | /*-------------------------------------------------------------- 395 | # Base 396 | --------------------------------------------------------------*/ 397 | 398 | /* Typography 399 | --------------------------------------------- */ 400 | body, 401 | button, 402 | input, 403 | select, 404 | optgroup, 405 | textarea { 406 | color: #404040; 407 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 408 | font-size: 1rem; 409 | line-height: 1.5; 410 | } 411 | 412 | h1, 413 | h2, 414 | h3, 415 | h4, 416 | h5, 417 | h6 { 418 | clear: both; 419 | } 420 | 421 | p { 422 | margin-bottom: 1.5em; 423 | } 424 | 425 | dfn, 426 | cite, 427 | em, 428 | i { 429 | font-style: italic; 430 | } 431 | 432 | blockquote { 433 | margin: 0 1.5em; 434 | } 435 | 436 | address { 437 | margin: 0 0 1.5em; 438 | } 439 | 440 | pre { 441 | background: #eee; 442 | font-family: "Courier 10 Pitch", courier, monospace; 443 | line-height: 1.6; 444 | margin-bottom: 1.6em; 445 | max-width: 100%; 446 | overflow: auto; 447 | padding: 1.6em; 448 | } 449 | 450 | code, 451 | kbd, 452 | tt, 453 | var { 454 | font-family: monaco, consolas, "Andale Mono", "DejaVu Sans Mono", monospace; 455 | } 456 | 457 | abbr, 458 | acronym { 459 | border-bottom: 1px dotted #666; 460 | cursor: help; 461 | } 462 | 463 | mark, 464 | ins { 465 | background: #fff9c0; 466 | text-decoration: none; 467 | } 468 | 469 | big { 470 | font-size: 125%; 471 | } 472 | 473 | /* Elements 474 | --------------------------------------------- */ 475 | body { 476 | background: #fff; 477 | } 478 | 479 | hr { 480 | background-color: #ccc; 481 | border: 0; 482 | height: 1px; 483 | margin-bottom: 1.5em; 484 | } 485 | 486 | ul, 487 | ol { 488 | margin: 0 0 1.5em 3em; 489 | } 490 | 491 | ul { 492 | list-style: disc; 493 | } 494 | 495 | ol { 496 | list-style: decimal; 497 | } 498 | 499 | li > ul, 500 | li > ol { 501 | margin-bottom: 0; 502 | margin-left: 1.5em; 503 | } 504 | 505 | dt { 506 | font-weight: 700; 507 | } 508 | 509 | dd { 510 | margin: 0 1.5em 1.5em; 511 | } 512 | 513 | /* Make sure embeds and iframes fit their containers. */ 514 | embed, 515 | iframe, 516 | object { 517 | max-width: 100%; 518 | } 519 | 520 | img { 521 | height: auto; 522 | max-width: 100%; 523 | } 524 | 525 | figure { 526 | margin: 1em 0; 527 | } 528 | 529 | table { 530 | margin: 0 0 1.5em; 531 | width: 100%; 532 | } 533 | 534 | /* Links 535 | --------------------------------------------- */ 536 | a { 537 | color: #4169e1; 538 | } 539 | 540 | a:visited { 541 | color: #800080; 542 | } 543 | 544 | a:hover, 545 | a:focus, 546 | a:active { 547 | color: #191970; 548 | } 549 | 550 | a:focus { 551 | outline: thin dotted; 552 | } 553 | 554 | a:hover, 555 | a:active { 556 | outline: 0; 557 | } 558 | 559 | /* Forms 560 | --------------------------------------------- */ 561 | button, 562 | input[type="button"], 563 | input[type="reset"], 564 | input[type="submit"] { 565 | border: 1px solid; 566 | border-color: #ccc #ccc #bbb; 567 | border-radius: 3px; 568 | background: #e6e6e6; 569 | color: rgba(0, 0, 0, 0.8); 570 | line-height: 1; 571 | padding: 0.6em 1em 0.4em; 572 | } 573 | 574 | button:hover, 575 | input[type="button"]:hover, 576 | input[type="reset"]:hover, 577 | input[type="submit"]:hover { 578 | border-color: #ccc #bbb #aaa; 579 | } 580 | 581 | button:active, 582 | button:focus, 583 | input[type="button"]:active, 584 | input[type="button"]:focus, 585 | input[type="reset"]:active, 586 | input[type="reset"]:focus, 587 | input[type="submit"]:active, 588 | input[type="submit"]:focus { 589 | border-color: #aaa #bbb #bbb; 590 | } 591 | 592 | input[type="text"], 593 | input[type="email"], 594 | input[type="url"], 595 | input[type="password"], 596 | input[type="search"], 597 | input[type="number"], 598 | input[type="tel"], 599 | input[type="range"], 600 | input[type="date"], 601 | input[type="month"], 602 | input[type="week"], 603 | input[type="time"], 604 | input[type="datetime"], 605 | input[type="datetime-local"], 606 | input[type="color"], 607 | textarea { 608 | color: #666; 609 | border: 1px solid #ccc; 610 | border-radius: 3px; 611 | padding: 3px; 612 | } 613 | 614 | input[type="text"]:focus, 615 | input[type="email"]:focus, 616 | input[type="url"]:focus, 617 | input[type="password"]:focus, 618 | input[type="search"]:focus, 619 | input[type="number"]:focus, 620 | input[type="tel"]:focus, 621 | input[type="range"]:focus, 622 | input[type="date"]:focus, 623 | input[type="month"]:focus, 624 | input[type="week"]:focus, 625 | input[type="time"]:focus, 626 | input[type="datetime"]:focus, 627 | input[type="datetime-local"]:focus, 628 | input[type="color"]:focus, 629 | textarea:focus { 630 | color: #111; 631 | } 632 | 633 | select { 634 | border: 1px solid #ccc; 635 | } 636 | 637 | textarea { 638 | width: 100%; 639 | } 640 | 641 | /*-------------------------------------------------------------- 642 | # Layouts 643 | --------------------------------------------------------------*/ 644 | 645 | /*-------------------------------------------------------------- 646 | # Components 647 | --------------------------------------------------------------*/ 648 | 649 | /* Navigation 650 | --------------------------------------------- */ 651 | .main-navigation { 652 | display: block; 653 | width: 100%; 654 | } 655 | 656 | .main-navigation ul { 657 | display: none; 658 | list-style: none; 659 | margin: 0; 660 | padding-left: 0; 661 | } 662 | 663 | .main-navigation ul ul { 664 | box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); 665 | float: left; 666 | position: absolute; 667 | top: 100%; 668 | left: -999em; 669 | z-index: 99999; 670 | } 671 | 672 | .main-navigation ul ul ul { 673 | left: -999em; 674 | top: 0; 675 | } 676 | 677 | .main-navigation ul ul li:hover > ul, 678 | .main-navigation ul ul li.focus > ul { 679 | display: block; 680 | left: auto; 681 | } 682 | 683 | .main-navigation ul ul a { 684 | width: 200px; 685 | } 686 | 687 | .main-navigation ul li:hover > ul, 688 | .main-navigation ul li.focus > ul { 689 | left: auto; 690 | } 691 | 692 | .main-navigation li { 693 | position: relative; 694 | } 695 | 696 | .main-navigation a { 697 | display: block; 698 | text-decoration: none; 699 | } 700 | 701 | /* Small menu. */ 702 | .menu-toggle, 703 | .main-navigation.toggled ul { 704 | display: block; 705 | } 706 | 707 | @media screen and (min-width: 37.5em) { 708 | 709 | .menu-toggle { 710 | display: none; 711 | } 712 | 713 | .main-navigation ul { 714 | display: flex; 715 | } 716 | } 717 | 718 | .site-main .comment-navigation, 719 | .site-main 720 | .posts-navigation, 721 | .site-main 722 | .post-navigation { 723 | margin: 0 0 1.5em; 724 | } 725 | 726 | .comment-navigation .nav-links, 727 | .posts-navigation .nav-links, 728 | .post-navigation .nav-links { 729 | display: flex; 730 | } 731 | 732 | .comment-navigation .nav-previous, 733 | .posts-navigation .nav-previous, 734 | .post-navigation .nav-previous { 735 | flex: 1 0 50%; 736 | } 737 | 738 | .comment-navigation .nav-next, 739 | .posts-navigation .nav-next, 740 | .post-navigation .nav-next { 741 | text-align: end; 742 | flex: 1 0 50%; 743 | } 744 | 745 | /* Posts and pages 746 | --------------------------------------------- */ 747 | .sticky { 748 | display: block; 749 | } 750 | 751 | .post, 752 | .page { 753 | margin: 0 0 1.5em; 754 | } 755 | 756 | .updated:not(.published) { 757 | display: none; 758 | } 759 | 760 | .page-content, 761 | .entry-content, 762 | .entry-summary { 763 | margin: 1.5em 0 0; 764 | } 765 | 766 | .page-links { 767 | clear: both; 768 | margin: 0 0 1.5em; 769 | } 770 | 771 | /* Comments 772 | --------------------------------------------- */ 773 | .comment-content a { 774 | word-wrap: break-word; 775 | } 776 | 777 | .bypostauthor { 778 | display: block; 779 | } 780 | 781 | /* Widgets 782 | --------------------------------------------- */ 783 | .widget { 784 | margin: 0 0 1.5em; 785 | } 786 | 787 | .widget select { 788 | max-width: 100%; 789 | } 790 | 791 | /* Media 792 | --------------------------------------------- */ 793 | .page-content .wp-smiley, 794 | .entry-content .wp-smiley, 795 | .comment-content .wp-smiley { 796 | border: none; 797 | margin-bottom: 0; 798 | margin-top: 0; 799 | padding: 0; 800 | } 801 | 802 | /* Make sure logo link wraps around logo image. */ 803 | .custom-logo-link { 804 | display: inline-block; 805 | } 806 | 807 | /* Captions 808 | --------------------------------------------- */ 809 | .wp-caption { 810 | margin-bottom: 1.5em; 811 | max-width: 100%; 812 | } 813 | 814 | .wp-caption img[class*="wp-image-"] { 815 | display: block; 816 | margin-left: auto; 817 | margin-right: auto; 818 | } 819 | 820 | .wp-caption .wp-caption-text { 821 | margin: 0.8075em 0; 822 | } 823 | 824 | .wp-caption-text { 825 | text-align: center; 826 | } 827 | 828 | /* Galleries 829 | --------------------------------------------- */ 830 | .gallery { 831 | margin-bottom: 1.5em; 832 | display: grid; 833 | grid-gap: 1.5em; 834 | } 835 | 836 | .gallery-item { 837 | display: inline-block; 838 | text-align: center; 839 | width: 100%; 840 | } 841 | 842 | .gallery-columns-2 { 843 | grid-template-columns: repeat(2, 1fr); 844 | } 845 | 846 | .gallery-columns-3 { 847 | grid-template-columns: repeat(3, 1fr); 848 | } 849 | 850 | .gallery-columns-4 { 851 | grid-template-columns: repeat(4, 1fr); 852 | } 853 | 854 | .gallery-columns-5 { 855 | grid-template-columns: repeat(5, 1fr); 856 | } 857 | 858 | .gallery-columns-6 { 859 | grid-template-columns: repeat(6, 1fr); 860 | } 861 | 862 | .gallery-columns-7 { 863 | grid-template-columns: repeat(7, 1fr); 864 | } 865 | 866 | .gallery-columns-8 { 867 | grid-template-columns: repeat(8, 1fr); 868 | } 869 | 870 | .gallery-columns-9 { 871 | grid-template-columns: repeat(9, 1fr); 872 | } 873 | 874 | .gallery-caption { 875 | display: block; 876 | } 877 | 878 | /*-------------------------------------------------------------- 879 | # Plugins 880 | --------------------------------------------------------------*/ 881 | 882 | /* Jetpack infinite scroll 883 | --------------------------------------------- */ 884 | 885 | /* Hide the Posts Navigation and the Footer when Infinite Scroll is in use. */ 886 | .infinite-scroll .posts-navigation, 887 | .infinite-scroll.neverending .site-footer { 888 | display: none; 889 | } 890 | 891 | /* Re-display the Theme Footer when Infinite Scroll has reached its end. */ 892 | .infinity-end.neverending .site-footer { 893 | display: block; 894 | } 895 | 896 | /*-------------------------------------------------------------- 897 | # Utilities 898 | --------------------------------------------------------------*/ 899 | 900 | /* Accessibility 901 | --------------------------------------------- */ 902 | 903 | /* Text meant only for screen readers. */ 904 | .screen-reader-text { 905 | border: 0; 906 | clip: rect(1px, 1px, 1px, 1px); 907 | clip-path: inset(50%); 908 | height: 1px; 909 | margin: -1px; 910 | overflow: hidden; 911 | padding: 0; 912 | position: absolute !important; 913 | width: 1px; 914 | word-wrap: normal !important; 915 | } 916 | 917 | .screen-reader-text:focus { 918 | background-color: #f1f1f1; 919 | border-radius: 3px; 920 | box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); 921 | clip: auto !important; 922 | clip-path: none; 923 | color: #21759b; 924 | display: block; 925 | font-size: 0.875rem; 926 | font-weight: 700; 927 | height: auto; 928 | left: 5px; 929 | line-height: normal; 930 | padding: 15px 23px 14px; 931 | text-decoration: none; 932 | top: 5px; 933 | width: auto; 934 | z-index: 100000; 935 | } 936 | 937 | /* Do not show the outline on the skip link target. */ 938 | #primary[tabindex="-1"]:focus { 939 | outline: 0; 940 | } 941 | 942 | /* Alignments 943 | --------------------------------------------- */ 944 | .alignleft { 945 | 946 | /*rtl:ignore*/ 947 | float: left; 948 | 949 | /*rtl:ignore*/ 950 | margin-right: 1.5em; 951 | margin-bottom: 1.5em; 952 | } 953 | 954 | .alignright { 955 | 956 | /*rtl:ignore*/ 957 | float: right; 958 | 959 | /*rtl:ignore*/ 960 | margin-left: 1.5em; 961 | margin-bottom: 1.5em; 962 | } 963 | 964 | .aligncenter { 965 | clear: both; 966 | display: block; 967 | margin-left: auto; 968 | margin-right: auto; 969 | margin-bottom: 1.5em; 970 | } 971 | -------------------------------------------------------------------------------- /tailpress.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors": { 3 | "primary": "#0EA5E9", 4 | "secondary": "#14B8A6", 5 | "dark": "#1F2937", 6 | "light": "#F9FAFB" 7 | }, 8 | "fontSizes": { 9 | "small": ["14px"], 10 | "regular": ["16px"], 11 | "large": ["18px", "bold"] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const plugin = require('tailwindcss/plugin'); 2 | const _ = require("lodash"); 3 | const tailpress = require('./tailpress.json'); 4 | 5 | module.exports = { 6 | tailpress, 7 | content: [ 8 | './*.php', 9 | './*/*.php', 10 | './safelist.txt' 11 | ], 12 | theme: { 13 | container: { 14 | padding: { 15 | DEFAULT: '1rem', 16 | sm: '2rem', 17 | lg: '0rem' 18 | }, 19 | }, 20 | extend: { 21 | colors: tailpress.colors, 22 | zIndex: { 23 | '-1': '-1', 24 | } 25 | }, 26 | fontFamily: { 27 | 'sans': ['SF Compact', 'ui-sans-serif'], 28 | 'serif': ['ui-serif', 'Georgia'], 29 | 'mono': ['ui-monospace', 'SFMono-Regular'], 30 | 'display': ['SF Compact', 'Helvetica', 'ui-sans-serif'], 31 | 'body': ['Open Sans', 'Helvetica'], 32 | 'interstate': ['interstate'] 33 | }, 34 | fontSize: { 35 | 'xs': '.75rem', 36 | 'sm': '.875rem', 37 | 'tiny': '.875rem', 38 | 'base': '100%', 39 | 'lg': '1.125rem', 40 | 'xl': '1.25rem', 41 | '2xl': '1.5rem', 42 | '3xl': '1.875rem', 43 | '4xl': '2.25rem', 44 | '5xl': '3rem', 45 | '6xl': '4rem', 46 | '7xl': '5rem', 47 | '8xl': '6rem', 48 | '9xl': '7rem', 49 | 'xxl': 'clamp(7rem, -0.875rem + 13vw, 14rem)' 50 | }, 51 | }, 52 | plugins: [ 53 | plugin(function ({addUtilities, addComponents, e, prefix, config, theme}) { 54 | const colors = theme('colors'); 55 | const margin = theme('margin'); 56 | const screens = theme('screens'); 57 | const fontSize = theme('fontSize'); 58 | 59 | const editorColorText = _.map(config("tailpress.colors", {}), (value, key) => { 60 | return { 61 | [`.has-${key}-text-color`]: { 62 | color: value, 63 | }, 64 | }; 65 | }); 66 | 67 | const editorColorBackground = _.map(config("tailpress.colors", {}), (value, key) => { 68 | return { 69 | [`.has-${key}-background-color`]: { 70 | backgroundColor: value, 71 | }, 72 | }; 73 | }); 74 | 75 | const editorFontSizes = _.map(config("tailpress.fontSizes", {}), (value, key) => { 76 | return { 77 | [`.has-${key}-font-size`]: { 78 | fontSize: value[0], 79 | fontWeight: `${value[1] || 'normal'}` 80 | }, 81 | }; 82 | }); 83 | 84 | const alignmentUtilities = { 85 | '.alignfull': { 86 | margin: `${margin[2] || '0.5rem'} calc(50% - 50vw)`, 87 | maxWidth: '100vw', 88 | "@apply w-screen": {} 89 | }, 90 | '.alignwide': { 91 | "@apply -mx-16 my-2 max-w-screen-xl": {} 92 | }, 93 | '.alignnone': { 94 | "@apply h-auto max-w-full mx-0": {} 95 | }, 96 | ".aligncenter": { 97 | margin: `${margin[2] || '0.5rem'} auto`, 98 | "@apply block": {} 99 | }, 100 | [`@media (min-width: ${screens.sm || '640px'})`]: { 101 | '.alignleft:not(.wp-block-button)': { 102 | marginRight: margin[2] || '0.5rem', 103 | "@apply float-left": {} 104 | }, 105 | '.alignright:not(.wp-block-button)': { 106 | marginLeft: margin[2] || '0.5rem', 107 | "@apply float-right": {} 108 | }, 109 | ".wp-block-button.alignleft a": { 110 | "@apply float-left mr-4": {}, 111 | }, 112 | ".wp-block-button.alignright a": { 113 | "@apply float-right ml-4": {}, 114 | }, 115 | }, 116 | }; 117 | 118 | const imageCaptions = { 119 | '.wp-caption': { 120 | "@apply inline-block": {}, 121 | '& img': { 122 | marginBottom: margin[2] || '0.5rem', 123 | "@apply leading-none": {} 124 | }, 125 | }, 126 | '.wp-caption-text': { 127 | fontSize: (fontSize.sm && fontSize.sm[0]) || '0.9rem', 128 | color: (colors.gray && colors.gray[600]) || '#718096', 129 | }, 130 | }; 131 | 132 | addUtilities([editorColorText, editorColorBackground, alignmentUtilities, editorFontSizes, imageCaptions], { 133 | respectPrefix: false, 134 | respectImportant: false, 135 | }); 136 | }), 137 | ] 138 | }; -------------------------------------------------------------------------------- /template-parts/content-none.php: -------------------------------------------------------------------------------- 1 | 11 | 12 |
13 | 16 | 17 |
18 | ' . wp_kses( 23 | /* translators: 1: link to WP admin new post page. */ 24 | __( 'Ready to publish your first post? Get started here.', 'tailwind' ), 25 | array( 26 | 'a' => array( 27 | 'href' => array(), 28 | ), 29 | ) 30 | ) . '

', 31 | esc_url( admin_url( 'post-new.php' ) ) 32 | ); 33 | 34 | elseif ( is_search() ) : 35 | ?> 36 | 37 |

38 | 43 | 44 |

45 | 50 |
51 |
52 | -------------------------------------------------------------------------------- /template-parts/content-page.php: -------------------------------------------------------------------------------- 1 | 11 | 12 |
> 13 |
14 | ', '' ); ?> 15 |
16 | 17 | 18 | 19 |
20 | '', 27 | ) 28 | ); 29 | ?> 30 |
31 | 32 | 33 |
34 | %s', 'tailwind' ), 40 | array( 41 | 'span' => array( 42 | 'class' => array(), 43 | ), 44 | ) 45 | ), 46 | wp_kses_post( get_the_title() ) 47 | ), 48 | '', 49 | '' 50 | ); 51 | ?> 52 |
53 | 54 |
55 | -------------------------------------------------------------------------------- /template-parts/content-search.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 36 | -------------------------------------------------------------------------------- /template-parts/content-single.php: -------------------------------------------------------------------------------- 1 |
> 2 | 3 |
4 | ', esc_url( get_permalink() ) ), '' ); ?> 5 | 6 |
7 | 8 |
9 | 10 | 11 | '', 16 | 'link_before' => '', 17 | 'link_after' => '', 18 | 'pagelink' => '' . __( 'Page', 'tailpress' ) . ' %', 19 | 'separator' => ', ', 20 | ) 21 | ); 22 | ?> 23 |
24 | 25 |
26 | -------------------------------------------------------------------------------- /template-parts/content.php: -------------------------------------------------------------------------------- 1 | 11 | 12 |
> 13 |
14 | ', '' ); 17 | else : 18 | the_title( '

', '

' ); 19 | endif; 20 | 21 | if ( 'post' === get_post_type() ) : 22 | ?> 23 | 29 | 30 |
31 | 32 | 33 | 34 |
35 | "%s"', 'tailwind' ), 41 | array( 42 | 'span' => array( 43 | 'class' => array(), 44 | ), 45 | ) 46 | ), 47 | wp_kses_post( get_the_title() ) 48 | ) 49 | ); 50 | 51 | wp_link_pages( 52 | array( 53 | 'before' => '', 55 | ) 56 | ); 57 | ?> 58 |
59 | 60 |
61 | 62 |
63 |
64 | -------------------------------------------------------------------------------- /theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "settings": { 4 | }, 5 | "styles": { 6 | }, 7 | "templateParts": [ 8 | ] 9 | } -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | let mix = require('laravel-mix'); 2 | let path = require('path'); 3 | 4 | mix.setPublicPath(path.resolve('./')); 5 | 6 | mix.js('resources/js/app.js', 'js'); 7 | 8 | mix.postCss("resources/css/app.css", "css"); 9 | 10 | mix.postCss("resources/css/editor-style.css", "./"); 11 | 12 | mix.options({ 13 | postCss: [ 14 | require('postcss-nested-ancestors'), 15 | require('postcss-nested'), 16 | require('postcss-import'), 17 | require('tailwindcss'), 18 | require('autoprefixer'), 19 | ] 20 | }); 21 | 22 | mix.browserSync({ 23 | proxy: 'http://your-website.test', 24 | host: 'your-website.test', 25 | open: 'external', 26 | port: 8000 27 | }); 28 | 29 | mix.version(); --------------------------------------------------------------------------------