pax_global_header00006660000000000000000000000064142054263640014520gustar00rootroot0000000000000052 comment=e7f2a879d8e634a8d1f33993654f959475818ad0 pyScss-1.4.0/000077500000000000000000000000001420542636400130065ustar00rootroot00000000000000pyScss-1.4.0/.gitignore000066400000000000000000000001451420542636400147760ustar00rootroot00000000000000*~ .coverage .*.swp *.pyc *.pyo *.so *.o *.egg-info/ build/ dist/ docs/_build/ *_flymake* .sass-cachepyScss-1.4.0/.travis.yml000066400000000000000000000010731420542636400151200ustar00rootroot00000000000000language: python dist: bionic addons: apt: packages: - libpcre2-dev arch: - arm64 - amd64 python: - '3.6' - '3.7' - '3.8' - pypy3 jobs: exclude: - arch: arm64 python: pypy3 install: - pip install . - pip install pillow pytest-cov coveralls script: py.test --cov scss after_success: coveralls deploy: provider: pypi user: __token__ password: secure: J5RfXq1B9p1/xZmtqVeCeFm4wx816KzTCmuej7bAVNC7u9amNL0QV5HkzLGHYM/SxY0zJs9pN0+TS20NoAatNDrvRjZ6Wh+d/mqgGjMqrNCQruFOe8yzS9XE5IlOgaMgsvWfISXGOmwUHpLcMq/RlyoX3f0S2PW1OTb/AmV7Kc8= on: tags: true pyScss-1.4.0/DESCRIPTION000066400000000000000000000000421420542636400145100ustar00rootroot00000000000000pyScss, a Scss compiler for PythonpyScss-1.4.0/LICENSE000066400000000000000000000021021420542636400140060ustar00rootroot00000000000000The MIT License Copyright (c) 2011, 2012 German M. Bravo (Kronuz) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.pyScss-1.4.0/MANIFEST.in000066400000000000000000000000741420542636400145450ustar00rootroot00000000000000include DESCRIPTION LICENSE README.rst include scss/src/*.h pyScss-1.4.0/README.rst000066400000000000000000000027541420542636400145050ustar00rootroot00000000000000pyScss, a Scss compiler for Python ================================== |build-status| |coverage| .. |build-status| image:: https://travis-ci.org/Kronuz/pyScss.svg?branch=master :target: https://travis-ci.org/Kronuz/pyScss .. |coverage| image:: https://coveralls.io/repos/Kronuz/pyScss/badge.png :target: https://coveralls.io/r/Kronuz/pyScss pyScss is a compiler for the `Sass`_ language, a superset of CSS3 that adds programming capabilities and some other syntactic sugar. .. _Sass: http://sass-lang.com/ Quickstart ---------- You need Python 2.6+ or 3.3+. PyPy is also supported. Installation:: pip install pyScss Usage:: python -mscss < style.scss Python API:: from scss import Compiler Compiler().compile_string("a { color: red + green; }") Features -------- 95% of Sass 3.2 is supported. If it's not supported, it's a bug! Please file a ticket. Most of Compass 0.11 is also built in. Further reading --------------- Documentation is in Sphinx. You can build it yourself by running ``make html`` from within the ``docs`` directory, or read it on RTD: http://pyscss.readthedocs.org/en/latest/ The canonical syntax reference is part of the Ruby Sass documentation: http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html Obligatory ---------- Copyright © 2012 German M. Bravo (Kronuz). Additional credits in the documentation. Licensed under the `MIT license`_, reproduced in ``LICENSE``. .. _MIT license: http://www.opensource.org/licenses/mit-license.php pyScss-1.4.0/conftest.py000066400000000000000000000111331420542636400152040ustar00rootroot00000000000000"""py.test plugin configuration.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging from pathlib import Path import pytest import scss from scss.compiler import compile_file import scss.config from scss.errors import SassEvaluationError from scss.errors import SassMissingDependency from scss.extension.core import CoreExtension from scss.extension.extra import ExtraExtension from scss.extension.fonts import FontsExtension from scss.extension.compass import CompassExtension try: import fontforge except ImportError: fontforge = None # Turn on pyscss's logging console = logging.StreamHandler() logger = logging.getLogger('scss') logger.setLevel(logging.ERROR) logger.addHandler(console) def pytest_addoption(parser): """Add options for filtering which file tests run. This has to be done in the project root; py.test doesn't (and can't) recursively look for conftest.py files until after it's parsed the command line. """ parser.addoption( '--include-ruby', help='run tests imported from Ruby and sassc, most of which fail', action='store_true', dest='include_ruby', ) def pytest_ignore_collect(path, config): # Ruby/sassc tests don't even exist without this option if path.basename in ('from_ruby', 'from-sassc'): if not config.getoption('include_ruby'): return True def pytest_collect_file(path, parent): if path.ext == '.scss': parts = str(path).split(path.sep) # -4 tests / -3 files / -2 directory / -1 file.scss if parts[-4:-2] == ['tests', 'files']: if hasattr(SassFile, "from_parent"): return SassFile.from_parent(parent, fspath=path) else: return SassFile(path, parent) class SassFile(pytest.File): def collect(self): parent_name = self.fspath.dirpath().basename if not fontforge and parent_name == 'fonts': pytest.skip("font tests require fontforge") if hasattr(SassItem, "from_parent"): yield SassItem.from_parent(parent=self, name=str(self.fspath)) else: yield SassItem(str(self.fspath), self) class SassItem(pytest.Item): """A Sass test input file, collected as its own test item. A file of the same name but with a .css extension is assumed to contain the expected output. """ _nodeid = None @property def nodeid(self): # Rig the nodeid to be "directory::filename", so all the files in the # same directory are treated as grouped together if not self._nodeid: self._nodeid = "{0}::{1}".format( self.fspath.dirpath().relto(self.session.fspath), self.fspath.basename, ) return self._nodeid def reportinfo(self): return ( self.fspath.dirpath(), None, self.fspath.relto(self.session.fspath), ) def _prunetraceback(self, excinfo): # Traceback implements __getitem__, but list implements __getslice__, # which wins in Python 2 excinfo.traceback = excinfo.traceback.cut(__file__) def runtest(self): scss_file = Path(str(self.fspath)) css_file = scss_file.with_suffix('.css') with css_file.open('rb') as fh: # Output is Unicode, so decode this here expected = fh.read().decode('utf8') scss.config.STATIC_ROOT = str(scss_file.parent / 'static') search_path = [] include = scss_file.parent / 'include' if include.exists(): search_path.append(include) search_path.append(scss_file.parent) try: actual = compile_file( scss_file, output_style='expanded', search_path=search_path, extensions=[ CoreExtension, ExtraExtension, FontsExtension, CompassExtension, ], ) except SassEvaluationError as e: # Treat any missing dependencies (PIL not installed, fontforge not # installed) as skips # TODO this is slightly cumbersome and sorta defeats the purpose of # having separate exceptions if isinstance(e.exc, SassMissingDependency): pytest.skip(e.format_message()) else: raise # Normalize leading and trailing newlines actual = actual.strip('\n') expected = expected.strip('\n') assert expected == actual pyScss-1.4.0/docs/000077500000000000000000000000001420542636400137365ustar00rootroot00000000000000pyScss-1.4.0/docs/Makefile000066400000000000000000000126751420542636400154110ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build2 PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyScss.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyScss.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/pyScss" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyScss" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." pyScss-1.4.0/docs/back-matter.rst000066400000000000000000000352641420542636400166740ustar00rootroot00000000000000Back matter =========== Reporting bugs -------------- If you have any suggestions, bug reports, or minor annoyances, please report them to the issue tracker on GitHub: http://github.com/Kronuz/pyScss/issues Contributing ------------ Please send us pull requests on GitHub! https://github.com/Kronuz/pyScss Running the test suite ---------------------- The test suite is built atop the excellent `py.test`_ library, and can be run with:: py.test from the root of a source checkout. .. _py.test: http://pytest.org/latest/ Most of the tests are pairs of input/output files in ``scss/tests/files``; the test suite scans for these, compiles all the ``.scss`` files, and compares the output with the ``.css`` file of the same name. To run only particular tests, you can pass them directly as filenames:: py.test scss/tests/files/general/000-smoketest.scss There are also several tests borrowed from the Ruby and C implementations. Many of these don't work (due to missing features, different error messages, slightly different formatting, etc.), so to reduce the useless noise produced by a test run, you must explicitly opt into them with ``--include-ruby``, even when using a file filter. These files are in the ``from-ruby/`` and ``from-sassc/`` subdirectories. Other than the borrowed tests, the directory names are arbitrary. License and copyright --------------------- Copyright © 2012 German M. Bravo (Kronuz), with additional heavy contributions by Eevee (Lexy Munroe). Licensed under the `MIT license`_. .. _MIT license: http://www.opensource.org/licenses/mit-license.php pyScss is inspired by and partially derived from various projects: * `Compass`_ © 2009 Christopher M. Eppstein * `Sass`_ © 2006-2009 Hampton Catlin and Nathan Weizenbaum * `xCSS`_ © 2010 Anton Pawlik .. _Compass: http://compass-style.org/ .. _Sass: http://sass-lang.com/ .. _xCSS: http://xcss.antpaw.org/docs/ Special thanks to Yelp for allowing Eevee to contribute to pyScss during working hours. Yelp does not claim copyright. Changelog --------- 1.3.5 (June 8, 2016) ^^^^^^^^^^^^^^^^^^^^ * The new ``less2scss`` module attempts to convert Less syntax to SCSS. * The ``*-exists`` functions from Sass 3.3 are now supported. * The contents of a file ``@import``-ed in the middle of an input file now appears in the expected place, not at the end of the output. * Double-slashes within URLs, as often happens with base64-encoded data URLs, are no longer stripped as comments. * Nesting selectors that end with a combinator, e.g. ``div > { p { ... } }``, now works correctly. * ``invert()`` is now left alone when the argument is a number, indicating the CSS filter rather than the Sass function. * ``if()`` now evaluates its arguments lazily. * ``str-slice()`` now silently corrects out-of-bounds indices. * ``append()`` now defaults to returning a space-delimited list, when the given list has fewer than two elements. * ``-moz-calc`` and ``-webkit-calc`` are recognized as variants of the ``calc()`` CSS function. * Filenames containing dots can now be imported. * Properties with a computed value of ``null`` are now omitted from the output. * The ``opacity`` token in IE's strange ``alpha(opacity=N)`` construct is now recognized case-insensitively. * The Compass gradient functions now recognize ``currentColor`` as a color. * The fonts extension should now work under Python 3. * Escaped astral plane characters no longer crash narrow Python 2 builds. * The alpha value in ``rgba(...)`` is no longer truncated to only two decimal places. * Some edge cases with float precision were fixed, so 742px - 40px is no longer 701.99999999px. 1.3.4 (Dec 15, 2014) ^^^^^^^^^^^^^^^^^^^^ * The modulus (``%``) operator is now supported. * ``/`` and ``-`` inside an expression work correctly; this fixes some cases of using vanilla CSS's ``/`` syntax. * Relative imports have been more fixed. * Line numbers in error messages are... more likely to be correct. * Sass at-blocks now parse correctly even when there's no space after the block name, e.g. ``@if(foo){...}``. * A few more cases of ``#{...}`` being replaced lexically have been switched to real parsing. With these changes, pyScss can now successfully compile Zurb Foundation 5. 1.3.3 (Nov 18, 2014) ^^^^^^^^^^^^^^^^^^^^ * URLs with quotes now parse as the `Url` type, not as generic functions. Fixes some uses of ``@import``. * A ``return`` got lost in the Compass gradient code, which would break some uses of gradients. * Some API work in an attempt to get django-pyscss working against 1.3. 1.3.2 (Oct 17, 2014) ^^^^^^^^^^^^^^^^^^^^ * Fix another couple embarrassing bugs, this time with the CLI. * Fix the auto behavior of ``join()`` to match Ruby. * Fully allow arbitrary expressions as map keys; previously, this only worked for the first key. LL(1) is hard. * Restore Python 3.2 compatibility. * Travis CI and Coveralls are now enabled. 1.3.1 (Oct 16, 2014) ^^^^^^^^^^^^^^^^^^^^ Fixes an embarrassing crash when compiling multiple files together. 1.3.0 (Oct 15, 2014) ^^^^^^^^^^^^^^^^^^^^ This is a somewhat transitional release along the road to 2.0, which will remove a lot of deprecated features. Sass/CSS compatibility """""""""""""""""""""" * Importing files from a parent directory with ``../`` now works (as long as the imported file is still on the search path). * Multiple CSS imports on the same line are now left unchanged. (Previously, the line would be repeated once for each import.) * CSS 3 character set detection is supported. * CSS escapes within strings are supported (though, unlike Sass, are usually printed literally rather than escaped). * Map keys may now be arbitrary expressions. * Slurpy named arguments are now supported. * ``!global`` on variable assignments is now supported (and does nothing, as in Sass). * `rebeccapurple`_ is understood as a color name. .. _rebeccapurple: http://meyerweb.com/eric/thoughts/2014/06/19/rebeccapurple/ Additionally, a great many more constructs should now parse correctly. By default, when pyScss encounters a parse error, it replaces any interpolations and variables, and treats the result as a single opaque string. This was the only way syntax like ``url(http://foo/bar)`` was recognized, since a colon is usually not allowed in the middle of a bareword. As a result, code like ``background: url(...) scale-color(...);`` didn't work, because the url would fail to parse and so pyScss would never even know that ``scale-color`` is supposed to be a function call. Now, the parser understands most of the unusual quirks of CSS syntax: * ``()`` is recognized as an empty list. * ``url()`` is fully supported. * ``expression()``, ``alpha(opacity=...)``, and ``calc()`` are supported (and left alone, except for interpolation). * Interpolation is part of the parser, rather than being applied before parsing, so there should be far fewer bugs with it. * CSS escapes within barewords are recognized (and ignored). * ``!important`` may have whitespace after the ``!``. Glossing over a bad parse now spits out a deprecation warning, and will be removed entirely in 2.0. Bug fixes """"""""" * Old-style pseudo-element selectors (``:before`` and friends, written with only one colon) always stay at the end of the selector. * The CSS3 ``grayscale(90%)`` function is now left alone, rather than being treated as a Sass function. (Previously, only unitless numbers would trigger this behavior.) * Placeholder selectors (``%foo``) no longer end up in the output. * Iterating over a list of lists with a single variable works (again). * File path handling is much more polite with Windows directory separators. * At-rules broken across several lines are now recognized correctly. * ``@for ... to`` now excludes the upper bound. * ``@extend`` no longer shuffles rules around, and should now produce rules in the same order as Ruby Sass. It also produces rules in the correct order when extending from the same rule more than once. Hopefully it's now correct, once and for all. * Fixed a couple more Compass gradient bugs. Probably. New features """""""""""" * Compatibility with Python 3.2, allegedly. * Support for building SVG font sheets from within stylesheets. * Error messages have been improved once again: parse errors should be somewhat less cryptic, the source of mixins is included in a traceback, and missing closing braces are reported. Backwards-incompatible changes """""""""""""""""""""""""""""" * Missing imports are now fatal. * Much sloppy behavior or reliance on old xCSS features will now produce deprecation warnings. All such behaviors will be removed in pyScss 2.0. Internals """"""""" * The C speedups module is now Unicode-aware, and works under CPython 3. * There's no longer a runtime warning if the speedups module is not found. * pyScss is now (a lot more) Unicode-clean; everything internally is treated as text, not bytes. * Compiling the grammar is now much less painful, and doesn't require copy-pasting anything. * Several large modules have been broken up further. ``__init__`` is, at last, virtually empty. * All the built-in functions have been moved into built-in extensions. 1.2.0 (Oct 8, 2013) ^^^^^^^^^^^^^^^^^^^ This is a significant release that greatly increases compatibility with the reference compiler; in particular, the Sass port of Bootstrap now compiles. There are a lot of changes here, so please feel free to report any bugs you see! The goal is 100% compatibility with the Ruby project. Missing Sass features """"""""""""""""""""" * Dashes and underscores are treated as interchangeable in variable, function, and mixin names. * Rule blocks in the form ``background: red { ... }`` are now supported. * Colors are output as their shortest representation, and never as ``hsl()``. The separate compiler options for compressing colors have been removed. * The color modification functions (``adjust-color``, etc.) now work reliably. * ``transparent`` is recognized as a color. * Unrecognized units are now supported and treated as opaque. * Arbitrary combinations of units (e.g., ``px * px``) are supported for intermediate values. Unit cancellation now works reliably. * Comparison and addition are now more in line with the Ruby behavior. * ``/`` is now left untouched when it appears between literals, as in ``font: 0 / 0``. * ``null`` is supported. * ``zip()`` is supported. * ``grayscale()`` now knows it's also a CSS3 filter function, and won't be evaluated if its argument is a number. * Slurpy arguments (``some-function($args...)``) are supported. * ``@extend`` has been greatly improved: it eliminates common ancestors and works in many complex cases that used to produce strange results. * Several Compass functions now adhere more closely to Compass's behavior. ``linear-gradient()`` is less likely to wreck valid CSS3 syntax. * Compass's ``e()``, ``pow()``, ``log()``, and ``sqrt()`` are now supported. Bug fixes """"""""" * Interactive mode works. Again. * Color names in strings and selectors are no longer replaced with hex equivalents. * Unrecognized ``@``-rule blocks such as ``@keyframes`` are left alone, rather than being treated like selectors. * ``@media`` blocks aren't repeated for every rule inside. * Pound-interpolation always drops quotes on strings. * Single quoted strings no longer lose their quotes when rendered. * ``+ foo { ... }`` is now recognized as a nested block, not an include. * ``color-stop()`` and several proposed CSS4 functions no longer produce "unrecognized function" warnings. * Several obscure bugs with variable scoping have been fixed, though a couple others remain. * Several bugfixes to the C speedups module to bring it in line with the behavior of the pure-Python scanner. New features """""""""""" * Python 3 support. As a result, Python 2.5 no longer works; whether this is a bug or a feature is not yet clear. * It's possible to write custom Sass functions in Python, though the API for this is not final. * Experimental support for the map type and destructuring ``@each``, both unreleased additions to the Ruby project. * Support for the new string and list functions in Sass 3.3. * Added ``background-brushed``. Backwards-incompatible changes """""""""""""""""""""""""""""" * Configuration via monkeypatching the ``scss`` module no longer works. Monkeypatch ``scss.config`` instead. * ``em`` and ``px`` are no longer compatible. * Unrecognized variable names are now a fatal error. Internals """"""""" * No longer a single 5000-line file! * Vastly expanded test suite, including some experimental tests borrowed from the Ruby and C implementations. * Parser now produces an AST rather than evaluating expressions during the parse, which allows for heavier caching and fixes some existing cache bugs. * The type system has been virtually rewritten; types now act much less like Python types, and compilation uses Sass types throughout rather than mixing Python types with Sass types. 1.1.5 (Feb 15, 2013) ^^^^^^^^^^^^^^^^^^^^ * ``debug_info`` now properly produces rules that can be used by FireSass and Google Chrome SASS Source Maps. * Improved memory usage for large sets of files to be used as sprites. * Warns about IE 4095 maximum number of selectors. * ``debug_info`` prints info as comments if specified as ``comments``. * Better handling of undefined variables. * Added CSS filter functions and ``skewX`` ``skewY``. * Command line tool and entry point fixed. * Fix cache buster URLs when paths already include queries or fragments. * Hashable Values. 1.1.4 (Aug 8, 2012) ^^^^^^^^^^^^^^^^^^^ * Added ``--debug-info`` command line option (for *FireSass* output). * Added compass helper function ``reject()``. * Added ``undefined`` keyword for undefined variables. 1.1.3 (Jan 9, 2012) ^^^^^^^^^^^^^^^^^^^ * Support for the new Sass 3.2.0 features (``@content`` and placeholder selectors) * Fixed bug with line numbers throwing an exception. 1.1.2 (Jan 3, 2012) ^^^^^^^^^^^^^^^^^^^ * Regression bug fixed from 1.1.1 1.1.1 (Jan 2, 2012) ^^^^^^^^^^^^^^^^^^^ * Added optional C speedup module for an amazing boost in scanning speed! * Added ``headings``, ``stylesheet-url``, ``font-url``, ``font-files``, ``inline-font-files`` and ``sprite-names``. 1.1.0 (Dec 22, 2011) ^^^^^^^^^^^^^^^^^^^^ * Added ``min()`` and ``max()`` for lists. * Removed exception raise. 1.0.9 (Dec 22, 2011) ^^^^^^^^^^^^^^^^^^^^ * Optimizations in the scanner. * Added ``background-noise()`` for compass-recipes support. * ``enumerate()`` and ``range()`` can go backwards. Ex.: ``range(3, 0)`` goes from 3 to 0. * Added line numbers and files for errors. * Added support for *Firebug* with *FireSass*. * ``nth(n)`` is round (returns the ``nth mod len`` item of the list). * ``--watch`` added to the command line. * Several bugs fixed. 1.0.8 (May 13, 2011) ^^^^^^^^^^^^^^^^^^^^ * Changed source color (``$src-color``) default to black. * Moved the module filename to ``__init__.py`` and module renamed back to scss. pyScss-1.4.0/docs/conf.py000066400000000000000000000173201420542636400152400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # pyScss documentation build configuration file, created by # sphinx-quickstart2 on Thu Sep 19 18:03:51 2013. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode'] autodoc_member_order = 'bysource' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'pyScss' copyright = u'2013, German M. Bravo (Kronuz)' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '1.3' # The full version, including alpha/beta/rc tags. release = '1.3.0.dev1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'pyScssdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'pyScss.tex', u'pyScss Documentation', u'German M. Bravo (Kronuz)', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'pyscss', u'pyScss Documentation', [u'German M. Bravo (Kronuz)'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'pyScss', u'pyScss Documentation', u'German M. Bravo (Kronuz)', 'pyScss', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' pyScss-1.4.0/docs/index.rst000066400000000000000000000033041420542636400155770ustar00rootroot00000000000000.. pyScss documentation master file, created by sphinx-quickstart2 on Thu Sep 19 18:03:51 2013. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. pyScss, a Sass compiler for Python ================================== |build-status| |coverage| .. |build-status| image:: https://travis-ci.org/Kronuz/pyScss.svg?branch=master :target: https://travis-ci.org/Kronuz/pyScss .. |coverage| image:: https://coveralls.io/repos/Kronuz/pyScss/badge.png :target: https://coveralls.io/r/Kronuz/pyScss pyScss is a Python implementation of `Sass`_, a CSS preprocessing language that adds variables, expressions, nested rules, mixins, inheritance, and other features that help ease the maintenance of large stylesheets. .. _Sass: http://sass-lang.com/ pyScss also includes support for Compass, and has an extension mechanism for adding your own custom behavior. pyScss is not yet fully compatible with the canonical Ruby implementation, but we're getting there and constantly improving. Please feel free to `file a GitHub issue`_ for anything pyScss gets wrong. .. _file a GitHub issue: https://github.com/Kronuz/pyScss/issues .. image:: http://pledgie.com/campaigns/16513.png?skin_name=chrome :alt: Click here to lend your support to pyScss and make a donation at pledgie.com! :target: http://pledgie.com/campaigns/16513 .. TODO this first page should have some basic usage; there's currently nothing particularly helpful on it. also installation, deps, etc. Contents: .. toctree:: :maxdepth: 2 usage python-api syntax back-matter Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` pyScss-1.4.0/docs/make.bat000066400000000000000000000117511420542636400153500ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build2 ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pyScss.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pyScss.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end pyScss-1.4.0/docs/python-api.rst000066400000000000000000000162241420542636400165650ustar00rootroot00000000000000Python API ========== Legacy API ---------- .. warning:: This API is still supported while the new API below is worked out, but it's slated for deprecation and eventual removal. If you don't need any of the features not yet available with the new API, consider porting as soon as possible. Compiling files *************** Very basic usage is simple enough:: from scss import Scss css = Scss() css.compile("a { color: red + green; }") Configuration ************* There are several configuration variables in the :py:mod:`scss.config` module that you may wish to change. ``PROJECT_ROOT``: Root of your entire project. Used only to construct defaults for other variables. Defaults to the root of the pyScss installation, which is probably not what you want. ``LOAD_PATHS``: An iterable of paths to search when using``@import``. ``STATIC_ROOT``: Used for finding sprite files. Defaults to ``$PROJECT_ROOT/static``. ``ASSETS_ROOT``: Generated sprites are saved here. Defaults to ``$STATIC_ROOT/assets``. ``CACHE_ROOT``: Used for storing cached sprite information. Defaults to ``ASSETS_ROOT``. ``STATIC_URL``: URL equivalent to ``STATIC_ROOT``. Defaults to ``static/``. ``ASSETS_URL``: URL equivalent to ``ASSETS_ROOT``. Defaults to ``static/assets/``. ``SPRTE_MAP_DIRECTION``: Direction in which to arrange sprites in a spritesheet. Defaults to ``vertical``; may be changed to ``horizontal``, ``diagonal``, or ``smart``. ``VERBOSITY``: Increase spew from the compiler. Defaults to ``1``. ``DEBUG``: Set to true to make parse errors fatal. Defaults to false. Django example ************** A rough example of using pyScss with Django:: import os import fnmatch import scss from django.conf import settings from django.utils.datastructures import SortedDict from django.contrib.staticfiles import finders def finder(glob): """ Finds all files in the django finders for a given glob, returns the file path, if available, and the django storage object. storage objects must implement the File storage API: https://docs.djangoproject.com/en/dev/ref/files/storage/ """ for finder in finders.get_finders(): for path, storage in finder.list([]): if fnmatch.fnmatchcase(path, glob): yield path, storage # STATIC_ROOT is where pyScss looks for images and static data. # STATIC_ROOT can be either a fully qualified path name or a "finder" # iterable function that receives a filename or glob and returns a tuple # of the file found and its file storage object for each matching file. # (https://docs.djangoproject.com/en/dev/ref/files/storage/) scss.config.STATIC_ROOT = finder scss.config.STATIC_URL = settings.STATIC_URL # ASSETS_ROOT is where the pyScss outputs the generated files such as spritemaps # and compile cache: scss.config.ASSETS_ROOT = os.path.join(settings.MEDIA_ROOT, 'assets/') scss.config.ASSETS_URL = settings.MEDIA_URL + 'assets/' # These are the paths pyScss will look ".scss" files on. This can be the path to # the compass framework or blueprint or compass-recepies, etc. scss.config.LOAD_PATHS = [ '/usr/local/www/sass/frameworks/', '/Library/Ruby/Gems/1.8/gems/compass-0.11.5/frameworks/compass/stylesheets/', '/Library/Ruby/Gems/1.8/gems/compass-0.11.5/frameworks/blueprint/stylesheets/', ] # This creates the Scss object used to compile SCSS code. In this example, # _scss_vars will hold the context variables: _scss_vars = {} _scss = scss.Scss( scss_vars=_scss_vars, scss_opts={ 'compress': True, 'debug_info': True, } ) # 1. Compile from a string: compiled_css_from_string = _scss.compile('@import "file2"; a {color: red + green; }') # 2. Compile from a file: compiled_css_from_file = _scss.compile(scss_file='file1.scss') # 3. Compile from a set of files (use SortedDict or collections.OrderedDict to # maintain the compile order): _scss._scss_files = SortedDict(( ('file2.scss', open('file2.scss').read()), ('file3.scss', open('file3.scss').read()), ('file4.scss', open('file4.scss').read()), )) compiled_css_from_files = _scss.compile() .. note:: The API here is likely to be improved in 1.3, to avoid the need for calling underscored functions. New API ------- The simplest example:: from scss.compiler import compile_string print(compile_string("a { color: red + green; }")) :py:func:`scss.compiler.compile_string` is just a simple wrapper around the :py:class:`scss.compiler.Compiler` class:: from scss.compiler import Compiler compiler = Compiler() print(compiler.compile_string("a { color: red + green; }")) The most common arguments passed to `Compiler` are: **search_path** A list of paths to search for ``@import``\ s. May be either strings or :py:class:`pathlib.Path` objects. Extending pyScss ---------------- A significant advantage to using pyScss is that you can inject Python values and code into the Sass compilation process. Injecting values **************** You can define Sass values by creating and populating a :class:`scss.namespace.Namespace`:: from scss.namespace import Namespace from scss.types import String namespace = Namespace() namespace.set_variable('$base-url', String('http://localhost/')) compiler = Compiler(namespace=namespace) compiler.compile_string('div { background: url($base-url); }') Now, ``$base-url`` will be available to the compiled Sass code, just like any other variable. Note that the value given must be one of the Sass types defined in :py:mod:`scss.types`. Injecting functions ******************* You can inject functions the same way:: def square(x): return x * x namespace.set_function('square', 1, square) This creates a function ``square`` for use in your Sass source. Optional arguments, keyword arguments, and slurpy arguments are all supported automatically. The arguments are Sass types, and the return value must be one as well. The second argument is the arity — the number of required arguments, or None if any number of arguments is allowed. Sass functions can be overloaded by arity, so this is required. For functions with optional arguments, adding the same function multiple times can be tedious and error-prone, so the ``declare`` decorator is also available:: @namespace.declare def square(x): return x * x This will inspect the arguments for you and register the function with all arities it accepts. The function name is determined from the Python name: underscores become hyphens, and trailing underscores are removed. If you'd prefer to be more explicit, there's also a ``declare_alias``:: @namespace.declare_alias('square') def square(x): return x * x API reference ------------- scss.compiler ************* .. automodule:: scss.compiler :members: scss.namespace ************** .. automodule:: scss.namespace :members: scss.extension ************** .. automodule:: scss.extension :members: pyScss-1.4.0/docs/syntax.rst000066400000000000000000000250301420542636400160160ustar00rootroot00000000000000.. highlight:: scss ============= pyScss syntax ============= Supported Sass features ======================= pyScss is mostly compatible with Sass 3.2 and has partial support for the upcoming Sass 3.3. The canonical syntax reference is in the Sass documentation: http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html Both syntaxes ------------- SCSS (CSS3 superset) is the primary syntax, but there's experimental support for the SASS (YAML-like) syntax. Built-in functions ------------------ All of the Sass 3.2 functions described in `the Sass documentation`_ are supported. .. _the Sass documentation: text, black } Maps may be iterated over with ``@each``, of course, but each item will be a somewhat clumsy 2-list. Instead, you can give multiple variables to do an unpacking iteration:: @each $key, $value in $colors { // I don't know why you'd do this either! [data-style=$key] { color: $value; } } This syntax works on any list-of-lists. Everything is a list -------------------- Another change borrowed from Sass trunk: any scalar type (string, number, boolean, etc.) will also act as a list of one element when used where a list is expected. This is most useful when writing Python extensions, but may also save you from checking ``type-of`` in a complex API. Compass support =============== An arbitrary cross-section of Compass 0.11 is supported: * **Math functions**: ``sin``, ``cos``, ``tan``, ``round``, ``ceil``, ``floor``, ``pi``, ``e`` * **Images**: ``image-url``, ``image-width``, ``image-height``... * **Embedded (inline) images**: ``inline-image`` .. todo:: Document exactly what's supported, how it works, and what's missing. .. note:: Currently, Compass support is provided by default, which has led to some surprising behavior since parts of Compass conflict with parts of CSS3. In the future, Compass will become an extension like it is for Ruby, and you will have to opt in. Sprites ------- Example:: $icons: sprite-map("sociable/*.png"); // contains sociable/facebook.png among others. div { background: $icons; } @each $icon in sprites($icons) { div .#{$icon} { width: image-width(sprite-file($icons, $icon)); height: image-height(sprite-file($icons, $icon)); background-position: sprite-position($icons, $icon); } } ...generates a new sprite file and produces something like:: div { background: url("/static/assets/u8Y7yEQL0UffAVw5rX7yhw.png?_=1298240989") 0px 0px no-repeat; } div .facebook { width: 32px; height: 32px; background-position: 0px 0px; } div .twitter { width: 32px; height: 32px; background-position: 0px -32px; } ... pyScss-specific extensions ========================== pyScss supports some constructs that upstream Sass does not, for various reasons. Listed here are "blessed" features in no danger of being removed, though you should avoid them if you're at all interested in working with the reference compiler. There are also some deviations that only exist for backwards compatibility; you should **not** rely on them, they will start spewing warnings at some point in the future, and eventually they will disappear. They are listed separately in :ref:`deprecated-features`. ``@option`` ----------- Compiler options may be toggled at runtime with ``@option``. At the moment the only supported option is ``compress``, to control whether the output is compressed:: @option compress: true; Multiplying strings by numbers ------------------------------ Much like in Python, this works:: content: "foo" * 3; // => "foofoofoo" This is a runtime error in the reference compiler. .. _deprecated-features: Deprecated features =================== Brackets to delimit expressions ------------------------------- In an expression, square brackets are equivalent to parentheses:: margin-top: [1px + 2px] * 3; // => 9px This is a holdover from xCSS and will be removed in the future. ``extends`` ----------- There's an alternative syntax for ``@extend``:: a extends b { ... } This is identical to:: a { @extend b; ... } This is a holdover from xCSS and will be removed in the future. ``self`` selector ----------------- ``self`` is an alias for ``&``:: a { self:hover { text-decoration: underline; } } This is a holdover from xCSS and will be removed in the future. ``@variables`` block -------------------- Variables may be declared in a dedicated block:: @variables { $color: red; } ``@vars`` is an alias for ``@variables``. This is a holdover from xCSS and will be removed in the future. ``+foo`` to include a mixin --------------------------- This:: div { +border-radius 3px; } Is equivalent to this:: div { @include border-radius(3px); } This is the same as the Sass syntax, but causes some parsing ambiguity, since ``+foo`` with a block could be either a nested CSS block with a sibling selector or a mixin call. Its future is uncertain, but you should probably avoid using it in SCSS files. Soft errors ----------- pyScss is much more liberal in what it accepts than the reference compiler; for example, rules at the top level and missing closing braces are accepted without complaint, and attempting to use a non-existent mixin only results in a warning. pyScss 2.0 is likely to be much stricter; don't rely on any particular abuse of syntax to work in the future. Operations on lists ------------------- Binary operations with a list on the left-hand side are performed element-wise:: p { margin: (1em 0 3em) * 0.5; // => 0.5em 0 1.5em } Given that future versions of the reference compiler are likely to introduce built-in list operations, the future of this feature is unclear. Mixin "injection" ----------------- A mixin defined like this:: @mixin foo(...) { // ... } will accept **any** keyword arguments, which will be available as variables within the mixin. This behavior exists for historical reasons and due to the lack of a ``**kwargs`` equivalent within Sass. Its usage makes mixin behavior harder to understand and you should not use it. Unsupported Sass features ========================= Some Sass features are not supported or have some gaps. Each of these may be considered a bug. CLI --- pyScss's command-line arguments are not entirely compatible with those of the reference compiler. Sass 3.3 -------- The following Sass 3.3 improvements are not yet implemented, but are planned for the near future: * Use of ``&`` in expressions. * ``@at-root`` * Source map support. * Using ``...`` multiple times in a function call, or passing a map of arguments with ``...``. Likewise, ``keywords()`` is not implemented. * ``unique-id()``, ``call()``, and the various ``*-exists()`` functions are not implemented. pyScss-1.4.0/docs/usage.rst000066400000000000000000000034531420542636400156010ustar00rootroot00000000000000Installation and usage ====================== Installation ------------ pyScss requires only Python 2.6 or later, including Python 3.x. PyPy is also known to work. Install with pip:: pip install pyScss It has a handful of pure-Python dependencies, which pip should install for you: * ``six`` * ``enum34`` (for Python 3.3 and below) * ``pathlib`` (for Python 3.3 and below) There's also an optional C speedup module, which requires having ``libpcre`` and its development headers installed, with UTF-8 support enabled (which it is by default). Usage ----- Run from the command line by using ``-m``:: python -m scss < file.scss Specify directories to search for imports with ``-I``. See ``python -mscss --help`` for more options. .. note:: ``-mscss`` will only work in Python 2.7 and above. In Python 2.6, ``-m`` doesn't work with packages, and you need to invoke this instead:: python -m scss.tool Interactive mode ---------------- To get a REPL:: python -mscss --interactive Example session:: $ python scss.py --interactive >>> @import "compass/css3" >>> show() ['functions', 'mixins', 'options', 'vars'] >>> show(mixins) ['apply-origin', 'apply-transform', ... 'transparent'] >>> show(mixins, transparent) @mixin transparent() { @include opacity(0); } >>> 1px + 5px 6px >>> _ Compass example --------------- With ``--load-path`` set to Compass and Blueprint roots, you can compile with Compass like with the following:: @option compress: no; $blueprint-grid-columns : 24; $blueprint-grid-width : 30px; $blueprint-grid-margin : 10px; $font-color : #333; @import "compass/reset"; @import "compass/utilities"; @import "blueprint"; // your code... pyScss-1.4.0/scss/000077500000000000000000000000001420542636400137615ustar00rootroot00000000000000pyScss-1.4.0/scss/__init__.py000066400000000000000000000037231420542636400160770ustar00rootroot00000000000000#-*- coding: utf-8 -*- """ pyScss, a Scss compiler for Python @author German M. Bravo (Kronuz) @version 1.2.0 alpha @see https://github.com/Kronuz/pyScss @copyright (c) 2012-2013 German M. Bravo (Kronuz) @license MIT License http://www.opensource.org/licenses/mit-license.php pyScss compiles Scss, a superset of CSS that is more powerful, elegant and easier to maintain than plain-vanilla CSS. The library acts as a CSS source code preprocesor which allows you to use variables, nested rules, mixins, andhave inheritance of rules, all with a CSS-compatible syntax which the preprocessor then compiles to standard CSS. Scss, as an extension of CSS, helps keep large stylesheets well-organized. It borrows concepts and functionality from projects such as OOCSS and other similar frameworks like as Sass. It's build on top of the original PHP xCSS codebase structure but it's been completely rewritten, many bugs have been fixed and it has been extensively extended to support almost the full range of Sass' Scss syntax and functionality. Bits of code in pyScss come from various projects: Compass: (c) 2009 Christopher M. Eppstein http://compass-style.org/ Sass: (c) 2006-2009 Hampton Catlin and Nathan Weizenbaum http://sass-lang.com/ xCSS: (c) 2010 Anton Pawlik http://xcss.antpaw.org/docs/ """ from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division from scss.scss_meta import BUILD_INFO, PROJECT, VERSION, REVISION, URL, AUTHOR, AUTHOR_EMAIL, LICENSE __project__ = PROJECT __version__ = VERSION __author__ = AUTHOR + ' <' + AUTHOR_EMAIL + '>' __license__ = LICENSE import logging log = logging.getLogger(__name__) # Helpful re-exports from scss.compiler import Compiler # Backwards compatibility from scss.legacy import Scss # TODO surely there are others. what do our own django docs say...? __all__ = ['Compiler'] pyScss-1.4.0/scss/__main__.py000066400000000000000000000000431420542636400160500ustar00rootroot00000000000000import scss.tool scss.tool.main() pyScss-1.4.0/scss/ast.py000066400000000000000000000452771420542636400151410ustar00rootroot00000000000000"""Syntax tree for parsed Sass expressions. The overall structure for a Sass file uses a different kind of AST; have a look at :mod:`scss.blockast`. """ from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from functools import partial import logging import operator try: from collections import OrderedDict except ImportError: # Backport from ordereddict import OrderedDict import six from scss.cssdefs import COLOR_NAMES from scss.cssdefs import is_builtin_css_function from scss.types import Boolean from scss.types import Color from scss.types import Function from scss.types import List from scss.types import Map from scss.types import Null from scss.types import String from scss.types import Undefined from scss.types import Url from scss.types import Value from scss.util import normalize_var log = logging.getLogger(__name__) class Expression(object): def __repr__(self): return '<%s()>' % (self.__class__.__name__) def evaluate(self, calculator, divide=False): """Evaluate this AST node, and return a Sass value. `divide` indicates whether a descendant node representing a division should be forcibly treated as a division. See the commentary in `BinaryOp`. """ raise NotImplementedError class Parentheses(Expression): """An expression of the form `(foo)`. Only exists to force a slash to be interpreted as division when contained within parentheses. """ def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.contents)) def __init__(self, contents): self.contents = contents def evaluate(self, calculator, divide=False): return self.contents.evaluate(calculator, divide=True) class UnaryOp(Expression): def __repr__(self): return '<%s(%s, %s)>' % (self.__class__.__name__, repr(self.op), repr(self.operand)) def __init__(self, op, operand): self.op = op self.operand = operand def evaluate(self, calculator, divide=False): return self.op(self.operand.evaluate(calculator, divide=True)) class BinaryOp(Expression): OPERATORS = { operator.lt: '<', operator.gt: '>', operator.le: '<=', operator.ge: '>=', operator.eq: '==', operator.eq: '!=', operator.add: '+', operator.sub: '-', operator.mul: '*', operator.truediv: '/', operator.mod: '%', } def __repr__(self): return '<%s(%s, %s, %s)>' % (self.__class__.__name__, repr(self.op), repr(self.left), repr(self.right)) def __init__(self, op, left, right): self.op = op self.left = left self.right = right def evaluate(self, calculator, divide=False): left = self.left.evaluate(calculator, divide=True) right = self.right.evaluate(calculator, divide=True) # Determine whether to actually evaluate, or just print the operator # literally. literal = False # If either operand starts with an interpolation, treat the whole # shebang as literal. if any(isinstance(operand, Interpolation) and operand.parts[0] == '' for operand in (self.left, self.right)): literal = True # Special handling of division: treat it as a literal slash if both # operands are literals, there are no parentheses, and this isn't part # of a bigger expression. # The first condition is covered by the type check. The other two are # covered by the `divide` argument: other nodes that perform arithmetic # will pass in True, indicating that this should always be a division. elif ( self.op is operator.truediv and not divide and isinstance(self.left, Literal) and isinstance(self.right, Literal) ): literal = True if literal: # TODO we don't currently preserve the spacing, whereas Sass # remembers whether there was space on either side op = " {0} ".format(self.OPERATORS[self.op]) return String.unquoted(left.render() + op + right.render()) return self.op(left, right) class AnyOp(Expression): def __repr__(self): return '<%s(*%s)>' % (self.__class__.__name__, repr(self.operands)) def __init__(self, *operands): self.operands = operands def evaluate(self, calculator, divide=False): for operand in self.operands: value = operand.evaluate(calculator, divide=True) if value: return value return value class AllOp(Expression): def __repr__(self): return '<%s(*%s)>' % (self.__class__.__name__, repr(self.operands)) def __init__(self, *operands): self.operands = operands def evaluate(self, calculator, divide=False): for operand in self.operands: value = operand.evaluate(calculator, divide=True) if not value: return value return value class NotOp(Expression): def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.operand)) def __init__(self, operand): self.operand = operand def evaluate(self, calculator, divide=False): operand = self.operand.evaluate(calculator, divide=True) return Boolean(not(operand)) class CallOp(Expression): def __repr__(self): return '<%s(%s, %s)>' % (self.__class__.__name__, repr(self.func_name), repr(self.argspec)) def __init__(self, func_name, argspec): self.func_name = func_name self.argspec = argspec def evaluate(self, calculator, divide=False): # TODO bake this into the context and options "dicts", plus library func_name = normalize_var(self.func_name) argspec_node = self.argspec # Turn the pairs of arg tuples into *args and **kwargs # TODO unclear whether this is correct -- how does arg, kwarg, arg # work? args, kwargs = argspec_node.evaluate_call_args(calculator) argspec_len = len(args) + len(kwargs) # Translate variable names to Python identifiers # TODO what about duplicate kw names? should this happen in argspec? # how does that affect mixins? kwargs = dict( (key.lstrip('$').replace('-', '_'), value) for key, value in kwargs.items()) # TODO merge this with the library funct = None try: funct = calculator.namespace.function(func_name, argspec_len) except KeyError: try: # DEVIATION: Fall back to single parameter funct = calculator.namespace.function(func_name, 1) args = [List(args, use_comma=True)] except KeyError: if not is_builtin_css_function(func_name): log.error("Function not found: %s:%s", func_name, argspec_len, extra={'stack': True}) if funct: if getattr(funct, '_pyscss_needs_namespace', False): # @functions and some Python functions take the namespace as an # extra first argument ret = funct(calculator.namespace, *args, **kwargs) else: ret = funct(*args, **kwargs) if not isinstance(ret, Value): raise TypeError("Expected Sass type as return value, got %r" % (ret,)) return ret # No matching function found, so render the computed values as a CSS # function call. Slurpy arguments are expanded and named arguments are # unsupported. if kwargs: raise TypeError("The CSS function %s doesn't support keyword arguments." % (func_name,)) # TODO another candidate for a "function call" sass type rendered_args = [arg.render() for arg in args] return String( "%s(%s)" % (func_name, ", ".join(rendered_args)), quotes=None) # TODO this class should delegate the unescaping to the type, rather than # burying it in the parser class Interpolation(Expression): """A string that may contain any number of interpolations: foo#{...}bar#{...}baz """ def __init__(self, parts, quotes=None, type=String, **kwargs): self.parts = parts self.quotes = quotes self.type = type self.kwargs = kwargs def __repr__(self): repr_parts = [] for i, part in enumerate(self.parts): if i % 2 == 0: if part: repr_parts.append(repr(part)) else: repr_parts.append('#{' + repr(part) + '}') return "<{0} {1}>".format(type(self).__name__, " ".join(repr_parts)) @classmethod def maybe(cls, parts, quotes=None, type=String, **kwargs): """Returns an interpolation if there are multiple parts, otherwise a plain Literal. This keeps the AST somewhat simpler, but also is the only way `Literal.from_bareword` gets called. """ if len(parts) > 1: return cls(parts, quotes=quotes, type=type, **kwargs) if quotes is None and type is String: return Literal.from_bareword(parts[0]) return Literal(type(parts[0], quotes=quotes, **kwargs)) def evaluate(self, calculator, divide=False): result = [] for i, part in enumerate(self.parts): if i % 2 == 0: # First part and other odd parts are literal string result.append(part) else: # Interspersed (even) parts are nodes value = part.evaluate(calculator, divide) # TODO need to know whether to pass `compress` here result.append(value.render_interpolated()) return self.type(''.join(result), quotes=self.quotes, **self.kwargs) class Literal(Expression): def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.value)) def __init__(self, value): self.value = value @classmethod def from_bareword(cls, word): if word in COLOR_NAMES: value = Color.from_name(word) elif word == 'null': value = Null() elif word == 'undefined': value = Undefined() elif word == 'true': value = Boolean(True) elif word == 'false': value = Boolean(False) else: value = String(word, quotes=None) return cls(value) def evaluate(self, calculator, divide=False): if (isinstance(self.value, Undefined) and calculator.undefined_variables_fatal): raise SyntaxError("Undefined literal.") return self.value class Variable(Expression): def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.name)) def __init__(self, name): self.name = name def evaluate(self, calculator, divide=False): try: value = calculator.namespace.variable(self.name) except KeyError: if calculator.undefined_variables_fatal: raise SyntaxError("Undefined variable: '%s'." % self.name) else: log.error("Undefined variable '%s'", self.name, extra={'stack': True}) return Undefined() else: if isinstance(value, six.string_types): log.warn( "Expected a Sass type for the value of {0}, " "but found a string expression: {1!r}" .format(self.name, value) ) evald = calculator.evaluate_expression(value) if evald is not None: return evald return value class ListLiteral(Expression): def __repr__(self): return '<%s(%s, comma=%s)>' % (self.__class__.__name__, repr(self.items), repr(self.comma)) def __init__(self, items, comma=True): self.items = items self.comma = comma def evaluate(self, calculator, divide=False): items = [item.evaluate(calculator, divide=divide) for item in self.items] # Whether this is a "plain" literal matters for null removal: nulls are # left alone if this is a completely vanilla CSS property literal = True if divide: # TODO sort of overloading "divide" here... rename i think literal = False elif not all(isinstance(item, Literal) for item in self.items): literal = False return List(items, use_comma=self.comma, literal=literal) class MapLiteral(Expression): def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.pairs)) def __init__(self, pairs): self.pairs = tuple((var, value) for var, value in pairs if value is not None) def evaluate(self, calculator, divide=False): scss_pairs = [] for key, value in self.pairs: scss_pairs.append(( key.evaluate(calculator), value.evaluate(calculator), )) return Map(scss_pairs) class ArgspecLiteral(Expression): """Contains pairs of argument names and values, as parsed from a function definition or function call. Note that the semantics are somewhat ambiguous. Consider parsing: $foo, $bar: 3 If this appeared in a function call, $foo would refer to a value; if it appeared in a function definition, $foo would refer to an existing variable. This it's up to the caller to use the right iteration function. """ def __repr__(self): return '<%s(%s)>' % (self.__class__.__name__, repr(self.argpairs)) def __init__(self, argpairs, slurp=None): # argpairs is a list of 2-tuples, parsed as though this were a function # call, so (variable name as string or None, default value as AST # node). # slurp is the name of a variable to receive slurpy arguments. self.argpairs = tuple(argpairs) if slurp is all: # DEVIATION: special syntax to allow injecting arbitrary arguments # from the caller to the callee self.inject = True self.slurp = None elif slurp: self.inject = False self.slurp = Variable(slurp) else: self.inject = False self.slurp = None def iter_list_argspec(self): yield None, ListLiteral(zip(*self.argpairs)[1]) def iter_def_argspec(self): """Interpreting this literal as a function definition, yields pairs of (variable name as a string, default value as an AST node or None). """ started_kwargs = False seen_vars = set() for var, value in self.argpairs: if var is None: # value is actually the name var = value value = None if started_kwargs: raise SyntaxError( "Required argument %r must precede optional arguments" % (var.name,)) else: started_kwargs = True if not isinstance(var, Variable): raise SyntaxError("Expected variable name, got %r" % (var,)) if var.name in seen_vars: raise SyntaxError("Duplicate argument %r" % (var.name,)) seen_vars.add(var.name) yield var.name, value def evaluate_call_args(self, calculator): """Interpreting this literal as a function call, return a 2-tuple of ``(args, kwargs)``. """ args = [] kwargs = OrderedDict() # Sass kwargs preserve order for var_node, value_node in self.argpairs: value = value_node.evaluate(calculator, divide=True) if var_node is None: # Positional args.append(value) else: # Named if not isinstance(var_node, Variable): raise TypeError( "Expected variable name, got {0!r}".format(var_node)) kwargs[var_node.name] = value # Slurpy arguments go on the end of the args if self.slurp: args.extend(self.slurp.evaluate(calculator, divide=True)) return args, kwargs class FunctionLiteral(Expression): """Wraps an existing AST node in a literal (unevaluated) function call.""" def __init__(self, child, function_name): self.child = child self.function_name = function_name def evaluate(self, calculator, divide=False): child = self.child.evaluate(calculator, divide) if isinstance(child, String): contents = child.value quotes = child.quotes else: # TODO compress contents = child.render() quotes = None # TODO unclear if this is the right place for this logic, or if it # should go in the Function constructor, or should be passed in # explicitly by the grammar, or even if Url should go away entirely if self.function_name == "url": return Url(contents, quotes=quotes) else: return Function(contents, self.function_name, quotes=quotes) class AlphaFunctionLiteral(Expression): """Wraps an existing AST node in a literal (unevaluated) function call, prepending "opacity=" to the contents. """ def __init__(self, child): self.child = child def evaluate(self, calculator, divide=False): child = self.child.evaluate(calculator, divide) if isinstance(child, String): contents = child.value else: # TODO compress contents = child.render() return Function('opacity=' + contents, 'alpha', quotes=None) class TernaryOp(Expression): """Sass implements this with a function: prop: if(condition, true-value, false-value); However, the second and third arguments are guaranteed not to be evaluated unless necessary. Functions always receive evaluated arguments, so this is a syntactic construct in disguise. """ def __repr__(self): return '<%s(%r, %r, %r)>' % ( self.__class__.__name__, self.condition, self.true_expression, self.false_expression, ) def __init__(self, list_literal): args = list_literal.items if len(args) != 3: raise SyntaxError("if() must have exactly 3 arguments") self.condition, self.true_expression, self.false_expression = args def evaluate(self, calculator, divide=False): if self.condition.evaluate(calculator, divide=True): return self.true_expression.evaluate(calculator, divide=True) else: return self.false_expression.evaluate(calculator, divide=True) pyScss-1.4.0/scss/calculator.py000066400000000000000000000154271420542636400164750ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import sys import logging from warnings import warn import six from scss.ast import Literal from scss.cssdefs import _expr_glob_re, _interpolate_re from scss.errors import SassError, SassEvaluationError, SassParseError from scss.grammar.expression import SassExpression, SassExpressionScanner from scss.rule import Namespace from scss.types import String from scss.types import Value from scss.util import dequote log = logging.getLogger(__name__) class Calculator(object): """Expression evaluator.""" ast_cache = {} def __init__( self, namespace=None, ignore_parse_errors=False, undefined_variables_fatal=True, ): if namespace is None: self.namespace = Namespace() else: self.namespace = namespace self.ignore_parse_errors = ignore_parse_errors self.undefined_variables_fatal = undefined_variables_fatal def _pound_substitute(self, result): expr = result.group(1) value = self.evaluate_expression(expr) if value is None: return self.apply_vars(expr) elif value.is_null: return "" else: return dequote(value.render()) def do_glob_math(self, cont): """Performs #{}-interpolation. The result is always treated as a fixed syntactic unit and will not be re-evaluated. """ # TODO that's a lie! this should be in the parser for most cases. if not isinstance(cont, six.string_types): warn(FutureWarning( "do_glob_math was passed a non-string {0!r} " "-- this will no longer be supported in pyScss 2.0" .format(cont) )) cont = six.text_type(cont) if '#{' not in cont: return cont cont = _expr_glob_re.sub(self._pound_substitute, cont) return cont def apply_vars(self, cont): # TODO this is very complicated. it should go away once everything # valid is actually parseable. if isinstance(cont, six.string_types) and '$' in cont: try: # Optimization: the full cont is a variable in the context, cont = self.namespace.variable(cont) except KeyError: # Interpolate variables: def _av(m): v = None n = m.group(2) try: v = self.namespace.variable(n) except KeyError: if self.undefined_variables_fatal: raise SyntaxError("Undefined variable: '%s'." % n) else: log.error("Undefined variable '%s'", n, extra={'stack': True}) return n else: if v: if not isinstance(v, Value): raise TypeError( "Somehow got a variable {0!r} " "with a non-Sass value: {1!r}" .format(n, v) ) v = v.render() # TODO this used to test for _dequote if m.group(1): v = dequote(v) else: v = m.group(0) return v cont = _interpolate_re.sub(_av, cont) else: # Variable succeeded, so we need to render it cont = cont.render() # TODO this is surprising and shouldn't be here cont = self.do_glob_math(cont) return cont def calculate(self, expression, divide=False): result = self.evaluate_expression(expression, divide=divide) if result is None: return String.unquoted(self.apply_vars(expression)) return result # TODO only used by magic-import...? def interpolate(self, var): value = self.namespace.variable(var) if var != value and isinstance(value, six.string_types): _vi = self.evaluate_expression(value) if _vi is not None: value = _vi return value def evaluate_expression(self, expr, divide=False): try: ast = self.parse_expression(expr) except SassError as e: if self.ignore_parse_errors: return None raise try: return ast.evaluate(self, divide=divide) except Exception as e: six.reraise(SassEvaluationError, SassEvaluationError(e, expression=expr), sys.exc_info()[2]) def parse_expression(self, expr, target='goal'): if isinstance(expr, six.text_type): # OK pass elif isinstance(expr, six.binary_type): # Dubious warn(FutureWarning( "parse_expression was passed binary data {0!r} " "-- this will no longer be supported in pyScss 2.0" .format(expr) )) # Don't guess an encoding; you reap what you sow expr = six.text_type(expr) else: raise TypeError("Expected string, got %r" % (expr,)) key = (target, expr) if key in self.ast_cache: return self.ast_cache[key] try: parser = SassExpression(SassExpressionScanner(expr)) ast = getattr(parser, target)() except SyntaxError as e: raise SassParseError(e, expression=expr, expression_pos=parser._char_pos) self.ast_cache[key] = ast return ast def parse_interpolations(self, string): """Parse a string for interpolations, but don't treat anything else as Sass syntax. Returns an AST node. """ # Shortcut: if there are no #s in the string in the first place, it # must not have any interpolations, right? if '#' not in string: return Literal(String.unquoted(string)) return self.parse_expression(string, 'goal_interpolated_literal') def parse_vars_and_interpolations(self, string): """Parse a string for variables and interpolations, but don't treat anything else as Sass syntax. Returns an AST node. """ # Shortcut: if there are no #s or $s in the string in the first place, # it must not have anything of interest. if '#' not in string and '$' not in string: return Literal(String.unquoted(string)) return self.parse_expression( string, 'goal_interpolated_literal_with_vars') __all__ = ('Calculator',) pyScss-1.4.0/scss/compiler.py000066400000000000000000001615201420542636400161520ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division from collections import defaultdict from enum import Enum import logging from pathlib import Path import re import sys import warnings try: from collections import OrderedDict except ImportError: # Backport from ordereddict import OrderedDict import six from scss.calculator import Calculator from scss.cssdefs import _spaces_re from scss.cssdefs import _escape_chars_re from scss.cssdefs import _prop_split_re from scss.errors import SassError from scss.errors import SassBaseError from scss.errors import SassImportError from scss.extension import Extension from scss.extension.core import CoreExtension from scss.extension import NamespaceAdapterExtension from scss.grammar import locate_blocks from scss.rule import BlockAtRuleHeader from scss.rule import Namespace from scss.rule import RuleAncestry from scss.rule import SassRule from scss.rule import UnparsedBlock from scss.selector import Selector from scss.source import SourceFile from scss.types import Arglist from scss.types import List from scss.types import Null from scss.types import Number from scss.types import String from scss.types import Undefined from scss.types import Url from scss.util import normalize_var # TODO put in... namespace maybe? # TODO should mention logging for the programmatic interface in the # documentation # TODO or have a little helper (or compiler setting) to turn it on log = logging.getLogger(__name__) _xcss_extends_re = re.compile(r'\s+extends\s+') class OutputStyle(Enum): nested = () compact = () compressed = () expanded = () legacy = () # ??? class SassDeprecationWarning(UserWarning): # Note: DO NOT inherit from DeprecationWarning; it's turned off by default # in 2.7 and later! pass def warn_deprecated(rule, message): warnings.warn( "{0} (at {1})".format(message, rule.file_and_line), SassDeprecationWarning, stacklevel=2, ) class Compiler(object): """A Sass compiler. Stores settings and knows how to fire off a compilation. Main entry point into compiling Sass. """ def __init__( self, root=Path(), search_path=(), namespace=None, extensions=(CoreExtension,), import_static_css=False, output_style='nested', generate_source_map=False, live_errors=False, warn_unused_imports=False, ignore_parse_errors=False, loops_have_own_scopes=True, undefined_variables_fatal=True, super_selector='', ): """Configure a compiler. :param root: Directory to treat as the "project root". Search paths and some custom extensions (e.g. Compass) are relative to this directory. Defaults to the current directory. :type root: :class:`pathlib.Path` :param search_path: List of paths to search for ``@import``s, relative to ``root``. Absolute and parent paths are allowed here, but ``@import`` will refuse to load files that aren't in one of the directories here. Defaults to only the root. :type search_path: list of strings, :class:`pathlib.Path` objects, or something that implements a similar interface (useful for custom pseudo filesystems) """ # TODO perhaps polite to automatically cast any string paths to Path? # but have to be careful since the api explicitly allows dummy objects. if root is None: self.root = None else: self.root = root.resolve() self.search_path = tuple( self.normalize_path(path) for path in search_path ) self.extensions = [] if namespace is not None: self.extensions.append(NamespaceAdapterExtension(namespace)) for extension in extensions: if isinstance(extension, Extension): self.extensions.append(extension) elif (isinstance(extension, type) and issubclass(extension, Extension)): self.extensions.append(extension()) elif isinstance(extension, Namespace): self.extensions.append( NamespaceAdapterExtension(extension)) else: raise TypeError( "Expected an Extension or Namespace, got: {0!r}" .format(extension) ) if import_static_css: self.dynamic_extensions = ('.scss', '.sass', '.css') self.static_extensions = () else: self.dynamic_extensions = ('.scss', '.sass') self.static_extensions = ('.css',) self.output_style = output_style self.generate_source_map = generate_source_map self.live_errors = live_errors self.warn_unused_imports = warn_unused_imports self.ignore_parse_errors = ignore_parse_errors self.loops_have_own_scopes = loops_have_own_scopes self.undefined_variables_fatal = undefined_variables_fatal self.super_selector = super_selector def normalize_path(self, path): if isinstance(path, six.string_types): path = Path(path) if path.is_absolute(): return path if self.root is None: raise IOError("Can't make absolute path when root is None") return self.root / path def make_compilation(self): return Compilation(self) def call_and_catch_errors(self, f, *args, **kwargs): """Call the given function with the given arguments. If it succeeds, return its return value. If it raises a :class:`scss.errors.SassError` and `live_errors` is turned on, return CSS containing a traceback and error message. """ try: return f(*args, **kwargs) except SassError as e: if self.live_errors: # TODO should this setting also capture and display warnings? return e.to_css() else: raise def compile(self, *filenames): # TODO this doesn't spit out the compilation itself, so if you want to # get something out besides just the output, you have to copy this # method. that sucks. # TODO i think the right thing is to get all the constructors out of # SourceFile, since it's really the compiler that knows the import # paths and should be consulted about this. reconsider all this (but # preserve it for now, SIGH) once importers are a thing compilation = self.make_compilation() for filename in filenames: # TODO maybe SourceFile should not be exposed to the end user, and # instead Compilation should have methods for add_string etc. that # can call normalize_path. # TODO it's not possible to inject custom files into the # /compiler/ as persistent across compiles, nor to provide "fake" # imports. do we want the former? is the latter better suited to # an extension? source = SourceFile.from_filename(self.normalize_path(filename)) compilation.add_source(source) return self.call_and_catch_errors(compilation.run) def compile_sources(self, *sources): # TODO this api is not the best please don't use it. this all needs to # be vastly simplified, still, somehow. compilation = self.make_compilation() for source in sources: compilation.add_source(source) return self.call_and_catch_errors(compilation.run) def compile_string(self, string): source = SourceFile.from_string(string) compilation = self.make_compilation() compilation.add_source(source) return self.call_and_catch_errors(compilation.run) def compile_file(filename, compiler_class=Compiler, **kwargs): """Compile a single file (provided as a :class:`pathlib.Path`), and return a string of CSS. Keyword arguments are passed along to the underlying `Compiler`. Note that the search path is set to the file's containing directory by default, unless you explicitly pass a ``search_path`` kwarg. :param filename: Path to the file to compile. :type filename: str, bytes, or :class:`pathlib.Path` """ filename = Path(filename) if 'search_path' not in kwargs: kwargs['search_path'] = [filename.parent.resolve()] compiler = compiler_class(**kwargs) return compiler.compile(filename) def compile_string(string, compiler_class=Compiler, **kwargs): """Compile a single string, and return a string of CSS. Keyword arguments are passed along to the underlying `Compiler`. """ compiler = compiler_class(**kwargs) return compiler.compile_string(string) class Compilation(object): """A single run of a compiler.""" def __init__(self, compiler): self.compiler = compiler self.ignore_parse_errors = compiler.ignore_parse_errors # TODO this needs a write barrier, so assignment can't overwrite what's # in the original namespaces # TODO or maybe the extensions themselves should take care of that, so # it IS possible to overwrite from within sass, but only per-instance? self.root_namespace = Namespace.derive_from(*( ext.namespace for ext in compiler.extensions if ext.namespace )) self.sources = [] self.source_index = {} self.dependency_map = defaultdict(frozenset) self.rules = [] def should_scope_loop_in_rule(self, rule): """Return True iff a looping construct (@each, @for, @while, @if) should get its own scope, as is standard Sass behavior. """ return rule.legacy_compiler_options.get( 'control_scoping', self.compiler.loops_have_own_scopes) def add_source(self, source): if source.key in self.source_index: return self.source_index[source.key] self.sources.append(source) self.source_index[source.key] = source return source def run(self): # Any @import will add the source file to self.sources and infect this # list, so make a quick copy to insulate against that # TODO maybe @import should just not do that? for source_file in list(self.sources): rule = SassRule( source_file=source_file, lineno=1, unparsed_contents=source_file.contents, namespace=self.root_namespace, ) self.rules.append(rule) self.manage_children(rule, scope=None) self._warn_unused_imports(rule) # Run through all the rules and apply @extends in a separate pass self.rules = self.apply_extends(self.rules) output, total_selectors = self.create_css(self.rules) if total_selectors > 65534: log.warning("Maximum number of supported selectors in Internet Explorer (65534) exceeded!") return output def parse_selectors(self, raw_selectors): """ Parses out the old xCSS "foo extends bar" syntax. Returns a 2-tuple: a set of selectors, and a set of extended selectors. """ # Fix tabs and spaces in selectors raw_selectors = _spaces_re.sub(' ', raw_selectors) parts = _xcss_extends_re.split(raw_selectors, 1) # handle old xCSS extends if len(parts) > 1: unparsed_selectors, unsplit_parents = parts # Multiple `extends` are delimited by `&` unparsed_parents = unsplit_parents.split('&') else: unparsed_selectors, = parts unparsed_parents = () selectors = Selector.parse_many(unparsed_selectors) parents = [Selector.parse_one(parent) for parent in unparsed_parents] return selectors, parents def _warn_unused_imports(self, rule): if not rule.legacy_compiler_options.get( 'warn_unused', self.compiler.warn_unused_imports): return for name, file_and_line in rule.namespace.unused_imports(): log.warn("Unused @import: '%s' (%s)", name, file_and_line) def _make_calculator(self, namespace): return Calculator( namespace, ignore_parse_errors=self.ignore_parse_errors, undefined_variables_fatal=self.compiler.undefined_variables_fatal, ) # @print_timing(4) def manage_children(self, rule, scope): try: self._manage_children_impl(rule, scope) except SassBaseError as e: e.add_rule(rule) raise except Exception as e: raise SassError(e, rule=rule) def _manage_children_impl(self, rule, scope): calculator = self._make_calculator(rule.namespace) for c_lineno, c_property, c_codestr in locate_blocks(rule.unparsed_contents): block = UnparsedBlock(rule, c_lineno, c_property, c_codestr) #################################################################### # At (@) blocks if block.is_atrule: # TODO particularly wild idea: allow extensions to handle # unrecognized blocks, and get the pyscss stuff out of the # core? even move the core stuff into the core extension? code = block.directive code = '_at_' + code.lower().replace(' ', '_')[1:] try: method = getattr(self, code) except AttributeError: if block.unparsed_contents is None: rule.properties.append((block.prop, None)) elif scope is None: # needs to have no scope to crawl down the nested rules self._nest_at_rules(rule, scope, block) else: method(calculator, rule, scope, block) #################################################################### # Properties elif block.unparsed_contents is None: self._get_properties(rule, scope, block) # Nested properties elif block.is_scope: if block.header.unscoped_value: # Possibly deal with default unscoped value self._get_properties(rule, scope, block) rule.unparsed_contents = block.unparsed_contents subscope = (scope or '') + block.header.scope + '-' self.manage_children(rule, subscope) #################################################################### # Nested rules elif scope is None: # needs to have no scope to crawl down the nested rules self._nest_rules(rule, scope, block) def _at_warn(self, calculator, rule, scope, block): """ Implements @warn """ value = calculator.calculate(block.argument) log.warn(repr(value)) def _at_print(self, calculator, rule, scope, block): """ Implements @print """ value = calculator.calculate(block.argument) sys.stderr.write("%s\n" % value) def _at_raw(self, calculator, rule, scope, block): """ Implements @raw """ value = calculator.calculate(block.argument) sys.stderr.write("%s\n" % repr(value)) def _at_dump_context(self, calculator, rule, scope, block): """ Implements @dump_context """ sys.stderr.write("%s\n" % repr(rule.namespace._variables)) def _at_dump_functions(self, calculator, rule, scope, block): """ Implements @dump_functions """ sys.stderr.write("%s\n" % repr(rule.namespace._functions)) def _at_dump_mixins(self, calculator, rule, scope, block): """ Implements @dump_mixins """ sys.stderr.write("%s\n" % repr(rule.namespace._mixins)) def _at_dump_imports(self, calculator, rule, scope, block): """ Implements @dump_imports """ sys.stderr.write("%s\n" % repr(rule.namespace._imports)) def _at_dump_options(self, calculator, rule, scope, block): """ Implements @dump_options """ sys.stderr.write("%s\n" % repr(rule.options)) def _at_debug(self, calculator, rule, scope, block): """ Implements @debug """ setting = block.argument.strip() if setting.lower() in ('1', 'true', 't', 'yes', 'y', 'on'): setting = True elif setting.lower() in ('0', 'false', 'f', 'no', 'n', 'off', 'undefined'): setting = False self.ignore_parse_errors = setting log.info("Debug mode is %s", 'On' if self.ignore_parse_errors else 'Off') def _at_pdb(self, calculator, rule, scope, block): """ Implements @pdb """ try: import ipdb as pdb except ImportError: import pdb pdb.set_trace() def _at_extend(self, calculator, rule, scope, block): """ Implements @extend """ from scss.selector import Selector selectors = calculator.apply_vars(block.argument) rule.extends_selectors.extend(Selector.parse_many(selectors)) def _at_return(self, calculator, rule, scope, block): """ Implements @return """ # TODO should assert this only happens within a @function ret = calculator.calculate(block.argument) raise SassReturn(ret) # @print_timing(10) def _at_option(self, calculator, rule, scope, block): """ Implements @option """ # TODO This only actually supports "style" (which only really makes # sense as the first thing in a single input file) or "warn_unused" # (which only makes sense at file level /at best/). Explore either # replacing this with a better mechanism or dropping it entirely. # Note also that all rules share the same underlying legacy option # dict, so the rules aren't even lexically scoped like you might think, # and @importing a file can change the compiler! That seems totally # wrong. for option in block.argument.split(','): key, colon, value = option.partition(':') key = key.strip().lower().replace('-', '_') value = value.strip().lower() if value in ('1', 'true', 't', 'yes', 'y', 'on'): value = True elif value in ('0', 'false', 'f', 'no', 'n', 'off', 'undefined'): value = False elif not colon: value = True if key == 'compress': warn_deprecated( rule, "The 'compress' @option is deprecated. " "Please use 'style' instead." ) key = 'style' value = 'compressed' if value else 'legacy' if key in ('short_colors', 'reverse_colors'): warn_deprecated( rule, "The '{0}' @option no longer has any effect." .format(key), ) return elif key == 'style': try: OutputStyle[value] except KeyError: raise SassError("No such output style: {0}".format(value)) elif key in ('warn_unused', 'control_scoping'): # TODO deprecate control_scoping? or add it to compiler? if not isinstance(value, bool): raise SassError("The '{0}' @option requires a bool, not {1!r}".format(key, value)) else: raise SassError("Unknown @option: {0}".format(key)) rule.legacy_compiler_options[key] = value def _get_funct_def(self, rule, calculator, argument): funct, lpar, argstr = argument.partition('(') funct = calculator.do_glob_math(funct) funct = normalize_var(funct.strip()) argstr = argstr.strip() # Parse arguments with the argspec rule if lpar: if not argstr.endswith(')'): raise SyntaxError("Expected ')', found end of line for %s (%s)" % (funct, rule.file_and_line)) argstr = argstr[:-1].strip() else: # Whoops, no parens at all. That's like calling with no arguments. argstr = '' argspec_node = calculator.parse_expression(argstr, target='goal_argspec') return funct, argspec_node def _populate_namespace_from_call(self, name, callee_namespace, mixin, args, kwargs): # Mutation protection args = list(args) kwargs = OrderedDict(kwargs) #m_params = mixin[0] #m_defaults = mixin[1] #m_codestr = mixin[2] pristine_callee_namespace = mixin[3] callee_argspec = mixin[4] import_key = mixin[5] callee_calculator = self._make_calculator(callee_namespace) # Populate the mixin/function's namespace with its arguments for var_name, node in callee_argspec.iter_def_argspec(): if args: # If there are positional arguments left, use the first value = args.pop(0) elif var_name in kwargs: # Try keyword arguments value = kwargs.pop(var_name) elif node is not None: # OK, try the default argument. Using callee_calculator means # that default values of arguments can refer to earlier # arguments' values; yes, that is how Sass works. value = node.evaluate(callee_calculator, divide=True) else: # TODO this should raise value = Undefined() callee_namespace.set_variable(var_name, value, local_only=True) if callee_argspec.slurp: # Slurpy var gets whatever is left # TODO should preserve the order of extra kwargs sass_kwargs = [] for key, value in kwargs.items(): sass_kwargs.append((String(key[1:]), value)) callee_namespace.set_variable( callee_argspec.slurp.name, Arglist(args, sass_kwargs)) args = [] kwargs = {} elif callee_argspec.inject: # Callee namespace gets all the extra kwargs whether declared or # not for var_name, value in kwargs.items(): callee_namespace.set_variable(var_name, value, local_only=True) kwargs = {} # TODO would be nice to say where the mixin/function came from if kwargs: raise NameError("%s has no such argument %s" % (name, kwargs.keys()[0])) if args: raise NameError("%s received extra arguments: %r" % (name, args)) pristine_callee_namespace.use_import(import_key) return callee_namespace # @print_timing(10) def _at_function(self, calculator, rule, scope, block): """ Implements @mixin and @function """ if not block.argument: raise SyntaxError("%s requires a function name (%s)" % (block.directive, rule.file_and_line)) funct, argspec_node = self._get_funct_def(rule, calculator, block.argument) defaults = {} new_params = [] for var_name, default in argspec_node.iter_def_argspec(): new_params.append(var_name) if default is not None: defaults[var_name] = default # TODO a function or mixin is re-parsed every time it's called; there's # no AST for anything but expressions :( mixin = [rule.source_file, block.lineno, block.unparsed_contents, rule.namespace, argspec_node, rule.source_file] if block.directive == '@function': def _call(mixin): def __call(namespace, *args, **kwargs): source_file = mixin[0] lineno = mixin[1] m_codestr = mixin[2] pristine_callee_namespace = mixin[3] callee_namespace = pristine_callee_namespace.derive() # TODO CallOp converts Sass names to Python names, so we # have to convert them back to Sass names. would be nice # to avoid this back-and-forth somehow kwargs = OrderedDict( (normalize_var('$' + key), value) for (key, value) in kwargs.items()) self._populate_namespace_from_call( "Function {0}".format(funct), callee_namespace, mixin, args, kwargs) _rule = SassRule( source_file=source_file, lineno=lineno, unparsed_contents=m_codestr, namespace=callee_namespace, # rule import_key=rule.import_key, legacy_compiler_options=rule.legacy_compiler_options, options=rule.options, properties=rule.properties, extends_selectors=rule.extends_selectors, ancestry=rule.ancestry, nested=rule.nested, ) # TODO supposed to throw an error if there's a slurpy arg # but keywords() is never called on it try: self.manage_children(_rule, scope) except SassReturn as e: return e.retval else: return Null() __call._pyscss_needs_namespace = True return __call _mixin = _call(mixin) _mixin.mixin = mixin mixin = _mixin if block.directive == '@mixin': add = rule.namespace.set_mixin elif block.directive == '@function': add = rule.namespace.set_function # Register the mixin for every possible arity it takes if argspec_node.slurp or argspec_node.inject: add(funct, None, mixin) else: while len(new_params): add(funct, len(new_params), mixin) param = new_params.pop() if param not in defaults: break if not new_params: add(funct, 0, mixin) _at_mixin = _at_function # @print_timing(10) def _at_include(self, calculator, rule, scope, block): """ Implements @include, for @mixins """ caller_namespace = rule.namespace caller_calculator = self._make_calculator(caller_namespace) funct, caller_argspec = self._get_funct_def(rule, caller_calculator, block.argument) # Render the passed arguments, using the caller's namespace args, kwargs = caller_argspec.evaluate_call_args(caller_calculator) argc = len(args) + len(kwargs) try: mixin = caller_namespace.mixin(funct, argc) except KeyError: try: # TODO maybe? don't do this, once '...' works # Fallback to single parameter: mixin = caller_namespace.mixin(funct, 1) except KeyError: log.error("Mixin not found: %s:%d (%s)", funct, argc, rule.file_and_line, extra={'stack': True}) return else: args = [List(args, use_comma=True)] # TODO what happens to kwargs? source_file = mixin[0] lineno = mixin[1] m_codestr = mixin[2] pristine_callee_namespace = mixin[3] callee_argspec = mixin[4] if caller_argspec.inject and callee_argspec.inject: # DEVIATION: Pass the ENTIRE local namespace to the mixin (yikes) callee_namespace = Namespace.derive_from( caller_namespace, pristine_callee_namespace) else: callee_namespace = pristine_callee_namespace.derive() self._populate_namespace_from_call( "Mixin {0}".format(funct), callee_namespace, mixin, args, kwargs) _rule = SassRule( # These must be file and line in which the @include occurs source_file=rule.source_file, lineno=rule.lineno, # These must be file and line in which the @mixin was defined from_source_file=source_file, from_lineno=lineno, unparsed_contents=m_codestr, namespace=callee_namespace, # rule import_key=rule.import_key, legacy_compiler_options=rule.legacy_compiler_options, options=rule.options, properties=rule.properties, extends_selectors=rule.extends_selectors, ancestry=rule.ancestry, nested=rule.nested, ) _rule.options['@content'] = block.unparsed_contents self.manage_children(_rule, scope) # @print_timing(10) def _at_content(self, calculator, rule, scope, block): """ Implements @content """ if '@content' not in rule.options: log.error("Content string not found for @content (%s)", rule.file_and_line) rule.unparsed_contents = rule.options.pop('@content', '') self.manage_children(rule, scope) # @print_timing(10) def _at_import(self, calculator, rule, scope, block): """ Implements @import Load and import mixins and functions and rules """ # TODO it would be neat to opt into warning that you're using # values/functions from a file you didn't explicitly import # TODO base-level directives, like @mixin or @charset, aren't allowed # to be @imported into a nested block # TODO i'm not sure we disallow them nested in the first place # TODO @import is disallowed within mixins, control directives # TODO @import doesn't take a block -- that's probably an issue with a # lot of our directives # TODO if there's any #{}-interpolation in the AST, this should become # a CSS import (though in practice Ruby only even evaluates it in url() # -- in a string it's literal!) sass_paths = calculator.evaluate_expression(block.argument) css_imports = [] for sass_path in sass_paths: # These are the rules for when an @import is interpreted as a CSS # import: if ( # If it's a url() isinstance(sass_path, Url) or # If it's not a string (including `"foo" screen`, a List) not isinstance(sass_path, String) or # If the filename begins with an http protocol sass_path.value.startswith(('http://', 'https://')) or # If the filename ends with .css sass_path.value.endswith(self.compiler.static_extensions)): css_imports.append(sass_path.render(compress=False)) continue # Should be left with a plain String name = sass_path.value source = None for extension in self.compiler.extensions: source = extension.handle_import(name, self, rule) if source: break else: # Didn't find anything! raise SassImportError(name, self.compiler, rule=rule) source = self.add_source(source) if rule.namespace.has_import(source): # If already imported in this scope, skip # TODO this might not be right -- consider if you @import a # file at top level, then @import it inside a selector block! continue _rule = SassRule( source_file=source, lineno=block.lineno, unparsed_contents=source.contents, # rule legacy_compiler_options=rule.legacy_compiler_options, options=rule.options, properties=rule.properties, extends_selectors=rule.extends_selectors, ancestry=rule.ancestry, namespace=rule.namespace, ) rule.namespace.add_import(source, rule) self.manage_children(_rule, scope) # Create a new @import rule for each import determined to be CSS for import_ in css_imports: # TODO this seems extremely janky (surely we should create an # actual new Rule), but the CSS rendering doesn't understand how to # print rules without blocks # TODO if this ever creates a new Rule, shuffle stuff around so # this is still hoisted to the top rule.properties.append(('@import ' + import_, None)) # @print_timing(10) def _at_if(self, calculator, rule, scope, block): """ Implements @if and @else if """ # "@if" indicates whether any kind of `if` since the last `@else` has # succeeded, in which case `@else if` should be skipped if block.directive != '@if': if '@if' not in rule.options: raise SyntaxError("@else with no @if (%s)" % (rule.file_and_line,)) if rule.options['@if']: # Last @if succeeded; stop here return condition = calculator.calculate(block.argument) if condition: inner_rule = rule.copy() inner_rule.unparsed_contents = block.unparsed_contents if not self.should_scope_loop_in_rule(inner_rule): # DEVIATION: Allow not creating a new namespace inner_rule.namespace = rule.namespace self.manage_children(inner_rule, scope) rule.options['@if'] = condition _at_else_if = _at_if # @print_timing(10) def _at_else(self, calculator, rule, scope, block): """ Implements @else """ if '@if' not in rule.options: log.error("@else with no @if (%s)", rule.file_and_line) val = rule.options.pop('@if', True) if not val: inner_rule = rule.copy() inner_rule.unparsed_contents = block.unparsed_contents inner_rule.namespace = rule.namespace # DEVIATION: Commenting this line gives the Sass bahavior inner_rule.unparsed_contents = block.unparsed_contents self.manage_children(inner_rule, scope) # @print_timing(10) def _at_for(self, calculator, rule, scope, block): """ Implements @for """ var, _, name = block.argument.partition(' from ') frm, _, through = name.partition(' through ') if through: inclusive = True else: inclusive = False frm, _, through = frm.partition(' to ') frm = calculator.calculate(frm) through = calculator.calculate(through) try: frm = int(float(frm)) through = int(float(through)) except ValueError: return if frm > through: # DEVIATION: allow reversed '@for .. from .. through' (same as enumerate() and range()) frm, through = through, frm rev = reversed else: rev = lambda x: x var = var.strip() var = calculator.do_glob_math(var) var = normalize_var(var) inner_rule = rule.copy() inner_rule.unparsed_contents = block.unparsed_contents if not self.should_scope_loop_in_rule(inner_rule): # DEVIATION: Allow not creating a new namespace inner_rule.namespace = rule.namespace if inclusive: through += 1 for i in rev(range(frm, through)): inner_rule.namespace.set_variable(var, Number(i)) self.manage_children(inner_rule, scope) # @print_timing(10) def _at_each(self, calculator, rule, scope, block): """ Implements @each """ varstring, _, valuestring = block.argument.partition(' in ') values = calculator.calculate(valuestring) if not values: return varlist = [ normalize_var(calculator.do_glob_math(var.strip())) # TODO use list parsing here for var in varstring.split(",") ] # `@each $foo, in $bar` unpacks, but `@each $foo in $bar` does not! unpack = len(varlist) > 1 if not varlist[-1]: varlist.pop() inner_rule = rule.copy() inner_rule.unparsed_contents = block.unparsed_contents if not self.should_scope_loop_in_rule(inner_rule): # DEVIATION: Allow not creating a new namespace inner_rule.namespace = rule.namespace for v in List.from_maybe(values): if unpack: v = List.from_maybe(v) for i, var in enumerate(varlist): if i >= len(v): value = Null() else: value = v[i] inner_rule.namespace.set_variable(var, value) else: inner_rule.namespace.set_variable(varlist[0], v) self.manage_children(inner_rule, scope) # @print_timing(10) def _at_while(self, calculator, rule, scope, block): """ Implements @while """ first_condition = condition = calculator.calculate(block.argument) while condition: inner_rule = rule.copy() inner_rule.unparsed_contents = block.unparsed_contents if not self.should_scope_loop_in_rule(inner_rule): # DEVIATION: Allow not creating a new namespace inner_rule.namespace = rule.namespace self.manage_children(inner_rule, scope) condition = calculator.calculate(block.argument) rule.options['@if'] = first_condition # @print_timing(10) def _at_variables(self, calculator, rule, scope, block): """ Implements @variables and @vars """ warn_deprecated( rule, "@variables and @vars are deprecated. " "Just assign variables at top-level.") _rule = rule.copy() _rule.unparsed_contents = block.unparsed_contents _rule.namespace = rule.namespace _rule.properties = [] self.manage_children(_rule, scope) _at_vars = _at_variables # @print_timing(10) def _get_properties(self, rule, scope, block): """ Implements properties and variables extraction and assignment """ prop, raw_value = (_prop_split_re.split(block.prop, 1) + [None])[:2] if raw_value is not None: raw_value = raw_value.strip() try: is_var = (block.prop[len(prop)] == '=') except IndexError: is_var = False if is_var: warn_deprecated(rule, "Assignment with = is deprecated; use : instead.") calculator = self._make_calculator(rule.namespace) prop = prop.strip() prop = calculator.do_glob_math(prop) if not prop: return _prop = (scope or '') + prop if is_var or prop.startswith('$') and raw_value is not None: # Pop off any flags: !default, !global is_default = False is_global = True # eventually sass will default this to false while True: splits = raw_value.rsplit(None, 1) if len(splits) < 2 or not splits[1].startswith('!'): break raw_value, flag = splits if flag == '!default': is_default = True elif flag == '!global': is_global = True else: raise ValueError("Unrecognized flag: {0}".format(flag)) # Variable assignment _prop = normalize_var(_prop) try: existing_value = rule.namespace.variable(_prop) except KeyError: existing_value = None is_defined = existing_value is not None and not existing_value.is_null if is_default and is_defined: pass else: if is_defined and prop.startswith('$') and prop[1].isupper(): log.warn("Constant %r redefined", prop) # Variable assignment is an expression, so it always performs # real division value = calculator.calculate(raw_value, divide=True) rule.namespace.set_variable( _prop, value, local_only=not is_global) else: # Regular property destined for output _prop = calculator.apply_vars(_prop) if raw_value is None: value = None else: value = calculator.calculate(raw_value) if value is None: pass elif isinstance(value, six.string_types): # TODO kill this branch pass else: if value.is_null: return style = rule.legacy_compiler_options.get( 'style', self.compiler.output_style) compress = style == 'compressed' value = value.render(compress=compress) rule.properties.append((_prop, value)) # @print_timing(10) def _nest_at_rules(self, rule, scope, block): """ Implements @-blocks """ # TODO handle @charset, probably? # Interpolate the current block # TODO this seems like it should be done in the block header. and more # generally? calculator = self._make_calculator(rule.namespace) if block.header.argument: # TODO is this correct? do ALL at-rules ALWAYS allow both vars and # interpolation? node = calculator.parse_vars_and_interpolations( block.header.argument) block.header.argument = node.evaluate(calculator).render() # TODO merge into RuleAncestry new_ancestry = list(rule.ancestry.headers) if block.directive == '@media' and new_ancestry: for i, header in reversed(list(enumerate(new_ancestry))): if header.is_selector: continue elif header.directive == '@media': new_ancestry[i] = BlockAtRuleHeader( '@media', "%s and %s" % (header.argument, block.argument)) break else: new_ancestry.insert(i, block.header) else: new_ancestry.insert(0, block.header) else: new_ancestry.append(block.header) rule.descendants += 1 new_rule = SassRule( source_file=rule.source_file, import_key=rule.import_key, lineno=block.lineno, num_header_lines=block.header.num_lines, unparsed_contents=block.unparsed_contents, legacy_compiler_options=rule.legacy_compiler_options, options=rule.options.copy(), #properties #extends_selectors ancestry=RuleAncestry(new_ancestry), namespace=rule.namespace.derive(), nested=rule.nested + 1, ) self.rules.append(new_rule) rule.namespace.use_import(rule.source_file) self.manage_children(new_rule, scope) self._warn_unused_imports(new_rule) # @print_timing(10) def _nest_rules(self, rule, scope, block): """ Implements Nested CSS rules """ calculator = self._make_calculator(rule.namespace) raw_selectors = calculator.do_glob_math(block.prop) # DEVIATION: ruby sass doesn't support bare variables in selectors raw_selectors = calculator.apply_vars(raw_selectors) c_selectors, c_parents = self.parse_selectors(raw_selectors) if c_parents: warn_deprecated( rule, "The XCSS 'a extends b' syntax is deprecated. " "Use 'a { @extend b; }' instead." ) new_ancestry = rule.ancestry.with_nested_selectors(c_selectors) rule.descendants += 1 new_rule = SassRule( source_file=rule.source_file, import_key=rule.import_key, lineno=block.lineno, num_header_lines=block.header.num_lines, unparsed_contents=block.unparsed_contents, legacy_compiler_options=rule.legacy_compiler_options, options=rule.options.copy(), #properties extends_selectors=c_parents, ancestry=new_ancestry, namespace=rule.namespace.derive(), nested=rule.nested + 1, ) self.rules.append(new_rule) rule.namespace.use_import(rule.source_file) self.manage_children(new_rule, scope) self._warn_unused_imports(new_rule) # @print_timing(3) def apply_extends(self, rules): """Run through the given rules and translate all the pending @extends declarations into real selectors on parent rules. The list is modified in-place and also sorted in dependency order. """ # Game plan: for each rule that has an @extend, add its selectors to # every rule that matches that @extend. # First, rig a way to find arbitrary selectors quickly. Most selectors # revolve around elements, classes, and IDs, so parse those out and use # them as a rough key. Ignore order and duplication for now. key_to_selectors = defaultdict(set) selector_to_rules = defaultdict(set) rule_selector_order = {} order = 0 for rule in rules: for selector in rule.selectors: for key in selector.lookup_key(): key_to_selectors[key].add(selector) selector_to_rules[selector].add(rule) rule_selector_order[rule, selector] = order order += 1 # Now go through all the rules with an @extends and find their parent # rules. for rule in rules: for selector in rule.extends_selectors: # This is a little dirty. intersection isn't a class method. # Don't think about it too much. candidates = set.intersection(*( key_to_selectors[key] for key in selector.lookup_key())) extendable_selectors = [ candidate for candidate in candidates if candidate.is_superset_of(selector)] if not extendable_selectors: # TODO implement !optional warn_deprecated( rule, "Can't find any matching rules to extend {0!r} -- this " "will be fatal in 2.0, unless !optional is specified!" .format(selector.render())) continue # Armed with a set of selectors that this rule can extend, do # some substitution and modify the appropriate parent rules. # One tricky bit: it's possible we're extending two selectors # that both exist in the same parent rule, in which case we # want to extend in the order the original selectors appear in # that rule. known_parents = [] for extendable_selector in extendable_selectors: parent_rules = selector_to_rules[extendable_selector] for parent_rule in parent_rules: if parent_rule is rule: # Don't extend oneself continue known_parents.append( (parent_rule, extendable_selector)) # This will put our parents back in their original order known_parents.sort(key=rule_selector_order.__getitem__) for parent_rule, extendable_selector in known_parents: more_parent_selectors = [] for rule_selector in rule.selectors: more_parent_selectors.extend( extendable_selector.substitute( selector, rule_selector)) for parent in more_parent_selectors: # Update indices, in case later rules try to extend # this one for key in parent.lookup_key(): key_to_selectors[key].add(parent) selector_to_rules[parent].add(parent_rule) rule_selector_order[parent_rule, parent] = order order += 1 parent_rule.ancestry = ( parent_rule.ancestry.with_more_selectors( more_parent_selectors)) # Remove placeholder-only rules return [rule for rule in rules if not rule.is_pure_placeholder] # @print_timing(3) def create_css(self, rules): """ Generate the final CSS string """ style = rules[0].legacy_compiler_options.get( 'style', self.compiler.output_style) debug_info = self.compiler.generate_source_map if style == 'legacy': sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg = True, ' ', ' ', False, '', '\n', '\n', '\n', debug_info elif style == 'compressed': sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg = False, '', '', False, '', '', '', '', False elif style == 'compact': sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg = True, ' ', '', False, '\n', ' ', '\n', ' ', debug_info elif style == 'expanded': sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg = True, ' ', ' ', False, '\n', '\n', '\n', '\n', debug_info else: # if style == 'nested': sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg = True, ' ', ' ', True, '\n', '\n', '\n', ' ', debug_info return self._create_css(rules, sc, sp, tb, nst, srnl, nl, rnl, lnl, dbg) def _textwrap(self, txt, width=70): if not hasattr(self, '_textwrap_wordsep_re'): self._textwrap_wordsep_re = re.compile(r'(?<=,)\s+') self._textwrap_strings_re = re.compile(r'''(["'])(?:(?!\1)[^\\]|\\.)*\1''') # First, remove commas from anything within strings (marking commas as \0): def _repl(m): ori = m.group(0) fin = ori.replace(',', '\0') if ori != fin: subs[fin] = ori return fin subs = {} txt = self._textwrap_strings_re.sub(_repl, txt) # Mark split points for word separators using (marking spaces with \1): txt = self._textwrap_wordsep_re.sub('\1', txt) # Replace all the strings back: for fin, ori in subs.items(): txt = txt.replace(fin, ori) # Split in chunks: chunks = txt.split('\1') # Break in lines of at most long_width width appending chunks: ln = '' lines = [] long_width = int(width * 1.2) for chunk in chunks: _ln = ln + ' ' if ln else '' _ln += chunk if len(ln) >= width or len(_ln) >= long_width: if ln: lines.append(ln) _ln = chunk ln = _ln if ln: lines.append(ln) return lines def _create_css(self, rules, sc=True, sp=' ', tb=' ', nst=True, srnl='\n', nl='\n', rnl='\n', lnl='', debug_info=False): super_selector = self.compiler.super_selector if super_selector: super_selector += ' ' skip_selectors = False prev_ancestry_headers = [] total_selectors = 0 result = '' dangling_property = False separate = False nesting = current_nesting = last_nesting = -1 if nst else 0 nesting_stack = [] for rule in rules: nested = rule.nested if nested <= 1: separate = True if nst: last_nesting = current_nesting current_nesting = nested delta_nesting = current_nesting - last_nesting if delta_nesting > 0: nesting_stack += [nesting] * delta_nesting elif delta_nesting < 0: nesting_stack = nesting_stack[:delta_nesting] nesting = nesting_stack[-1] if rule.is_empty: continue if nst: nesting += 1 ancestry = rule.ancestry ancestry_len = len(ancestry) first_mismatch = 0 for i, (old_header, new_header) in enumerate(zip(prev_ancestry_headers, ancestry.headers)): if old_header != new_header: first_mismatch = i break # When sc is False, sets of properties are printed without a # trailing semicolon. If the previous block isn't being closed, # that trailing semicolon needs adding in to separate the last # property from the next rule. if not sc and dangling_property and first_mismatch >= len(prev_ancestry_headers): result += ';' # Close blocks and outdent as necessary for i in range(len(prev_ancestry_headers), first_mismatch, -1): result += tb * (i - 1) + '}' + rnl # Open new blocks as necessary for i in range(first_mismatch, ancestry_len): header = ancestry.headers[i] if separate: if result: result += srnl separate = False if debug_info: def _print_debug_info(filename, lineno): if debug_info == 'comments': result = tb * (i + nesting) + "/* file: %s, line: %s */" % (filename, lineno) + nl else: filename = _escape_chars_re.sub(r'\\\1', filename) result = tb * (i + nesting) + "@media -sass-debug-info{filename{font-family:file\:\/\/%s}line{font-family:\\00003%s}}" % (filename, lineno) + nl return result if rule.lineno and rule.source_file: result += _print_debug_info(rule.source_file.path, rule.lineno) if rule.from_lineno and rule.from_source_file: result += _print_debug_info(rule.from_source_file.path, rule.from_lineno) if header.is_selector: header_string = header.render(sep=',' + sp, super_selector=super_selector) if nl: header_string = (nl + tb * (i + nesting)).join(self._textwrap(header_string)) else: header_string = header.render() result += tb * (i + nesting) + header_string + sp + '{' + nl if header.is_selector: total_selectors += 1 prev_ancestry_headers = ancestry.headers dangling_property = False if not skip_selectors: result += self._print_properties(rule.properties, sc, sp, tb * (ancestry_len + nesting), nl, lnl) dangling_property = True # Close all remaining blocks for i in reversed(range(len(prev_ancestry_headers))): result += tb * i + '}' + rnl # Always end with a newline, even in compressed mode if not result.endswith('\n'): result += '\n' return (result, total_selectors) def _print_properties(self, properties, sc=True, sp=' ', tb='', nl='\n', lnl=' '): result = '' last_prop_index = len(properties) - 1 for i, (name, value) in enumerate(properties): if value is None: prop = name elif value: if nl: value = (nl + tb + tb).join(self._textwrap(value)) prop = name + ':' + sp + value else: # Empty string means there's supposed to be a value but it # evaluated to nothing; skip this # TODO interacts poorly with last_prop_index continue if i == last_prop_index: if sc: result += tb + prop + ';' + lnl else: result += tb + prop + lnl else: result += tb + prop + ';' + nl return result class SassReturn(SassBaseError): """Special control-flow exception used to hop up the stack from a Sass function's ``@return``. """ def __init__(self, retval): super(SassReturn, self).__init__() self.retval = retval def __str__(self): return "Returning {0!r}".format(self.retval) pyScss-1.4.0/scss/config.py000066400000000000000000000024401420542636400156000ustar00rootroot00000000000000from __future__ import unicode_literals ################################################################################ # Configuration: DEBUG = False VERBOSITY = 1 import os PROJECT_ROOT = os.path.normpath(os.path.dirname(os.path.abspath(__file__))) # Sass @import load_paths: LOAD_PATHS = os.path.join(PROJECT_ROOT, 'sass/frameworks') # Assets path, where new sprite files are created (defaults to STATIC_ROOT + '/assets'): ASSETS_ROOT = None # Cache files path, where cache files are saved (defaults to ASSETS_ROOT): CACHE_ROOT = None # Assets path, where new sprite files are created: STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') FONTS_ROOT = None # default: STATIC_ROOT IMAGES_ROOT = None # default: STATIC_ROOT # Urls for the static and assets: ASSETS_URL = 'static/assets/' STATIC_URL = 'static/' FONTS_URL = None # default: STATIC_URL IMAGES_URL = None # default: STATIC_URL # Rendering style. Available values are 'nested', 'expanded', 'compact', 'compressed' and 'legacy' (defaults to 'nested'): STYLE = 'nested' # Use a different scope inside control structures create a scope (defaults to create new scopes for control structures, same as Sass): CONTROL_SCOPING = True # Throw fatal errors when finding undefined variables: FATAL_UNDEFINED = True SPRTE_MAP_DIRECTION = 'vertical' pyScss-1.4.0/scss/cssdefs.py000066400000000000000000000376161420542636400160020ustar00rootroot00000000000000"""Constants and functions defined by the CSS specification, not specific to Sass. """ from fractions import Fraction from math import pi import re import six # ------------------------------------------------------------------------------ # Built-in CSS color names # See: http://www.w3.org/TR/css3-color/#svg-color COLOR_NAMES = { 'aliceblue': (240, 248, 255, 1), 'antiquewhite': (250, 235, 215, 1), 'aqua': (0, 255, 255, 1), 'aquamarine': (127, 255, 212, 1), 'azure': (240, 255, 255, 1), 'beige': (245, 245, 220, 1), 'bisque': (255, 228, 196, 1), 'black': (0, 0, 0, 1), 'blanchedalmond': (255, 235, 205, 1), 'blue': (0, 0, 255, 1), 'blueviolet': (138, 43, 226, 1), 'brown': (165, 42, 42, 1), 'burlywood': (222, 184, 135, 1), 'cadetblue': (95, 158, 160, 1), 'chartreuse': (127, 255, 0, 1), 'chocolate': (210, 105, 30, 1), 'coral': (255, 127, 80, 1), 'cornflowerblue': (100, 149, 237, 1), 'cornsilk': (255, 248, 220, 1), 'crimson': (220, 20, 60, 1), 'cyan': (0, 255, 255, 1), 'darkblue': (0, 0, 139, 1), 'darkcyan': (0, 139, 139, 1), 'darkgoldenrod': (184, 134, 11, 1), 'darkgray': (169, 169, 169, 1), 'darkgreen': (0, 100, 0, 1), 'darkkhaki': (189, 183, 107, 1), 'darkmagenta': (139, 0, 139, 1), 'darkolivegreen': (85, 107, 47, 1), 'darkorange': (255, 140, 0, 1), 'darkorchid': (153, 50, 204, 1), 'darkred': (139, 0, 0, 1), 'darksalmon': (233, 150, 122, 1), 'darkseagreen': (143, 188, 143, 1), 'darkslateblue': (72, 61, 139, 1), 'darkslategray': (47, 79, 79, 1), 'darkturquoise': (0, 206, 209, 1), 'darkviolet': (148, 0, 211, 1), 'deeppink': (255, 20, 147, 1), 'deepskyblue': (0, 191, 255, 1), 'dimgray': (105, 105, 105, 1), 'dodgerblue': (30, 144, 255, 1), 'firebrick': (178, 34, 34, 1), 'floralwhite': (255, 250, 240, 1), 'forestgreen': (34, 139, 34, 1), 'fuchsia': (255, 0, 255, 1), 'gainsboro': (220, 220, 220, 1), 'ghostwhite': (248, 248, 255, 1), 'gold': (255, 215, 0, 1), 'goldenrod': (218, 165, 32, 1), 'gray': (128, 128, 128, 1), 'green': (0, 128, 0, 1), 'greenyellow': (173, 255, 47, 1), 'honeydew': (240, 255, 240, 1), 'hotpink': (255, 105, 180, 1), 'indianred': (205, 92, 92, 1), 'indigo': (75, 0, 130, 1), 'ivory': (255, 255, 240, 1), 'khaki': (240, 230, 140, 1), 'lavender': (230, 230, 250, 1), 'lavenderblush': (255, 240, 245, 1), 'lawngreen': (124, 252, 0, 1), 'lemonchiffon': (255, 250, 205, 1), 'lightblue': (173, 216, 230, 1), 'lightcoral': (240, 128, 128, 1), 'lightcyan': (224, 255, 255, 1), 'lightgoldenrodyellow': (250, 250, 210, 1), 'lightgreen': (144, 238, 144, 1), 'lightgrey': (211, 211, 211, 1), 'lightpink': (255, 182, 193, 1), 'lightsalmon': (255, 160, 122, 1), 'lightseagreen': (32, 178, 170, 1), 'lightskyblue': (135, 206, 250, 1), 'lightslategray': (119, 136, 153, 1), 'lightsteelblue': (176, 196, 222, 1), 'lightyellow': (255, 255, 224, 1), 'lime': (0, 255, 0, 1), 'limegreen': (50, 205, 50, 1), 'linen': (250, 240, 230, 1), 'magenta': (255, 0, 255, 1), 'maroon': (128, 0, 0, 1), 'mediumaquamarine': (102, 205, 170, 1), 'mediumblue': (0, 0, 205, 1), 'mediumorchid': (186, 85, 211, 1), 'mediumpurple': (147, 112, 219, 1), 'mediumseagreen': (60, 179, 113, 1), 'mediumslateblue': (123, 104, 238, 1), 'mediumspringgreen': (0, 250, 154, 1), 'mediumturquoise': (72, 209, 204, 1), 'mediumvioletred': (199, 21, 133, 1), 'midnightblue': (25, 25, 112, 1), 'mintcream': (245, 255, 250, 1), 'mistyrose': (255, 228, 225, 1), 'moccasin': (255, 228, 181, 1), 'navajowhite': (255, 222, 173, 1), 'navy': (0, 0, 128, 1), 'oldlace': (253, 245, 230, 1), 'olive': (128, 128, 0, 1), 'olivedrab': (107, 142, 35, 1), 'orange': (255, 165, 0, 1), 'orangered': (255, 69, 0, 1), 'orchid': (218, 112, 214, 1), 'palegoldenrod': (238, 232, 170, 1), 'palegreen': (152, 251, 152, 1), 'paleturquoise': (175, 238, 238, 1), 'palevioletred': (219, 112, 147, 1), 'papayawhip': (255, 239, 213, 1), 'peachpuff': (255, 218, 185, 1), 'peru': (205, 133, 63, 1), 'pink': (255, 192, 203, 1), 'plum': (221, 160, 221, 1), 'powderblue': (176, 224, 230, 1), 'purple': (128, 0, 128, 1), 'rebeccapurple': (0x66, 0x33, 0x99, 1), 'red': (255, 0, 0, 1), 'rosybrown': (188, 143, 143, 1), 'royalblue': (65, 105, 225, 1), 'saddlebrown': (139, 69, 19, 1), 'salmon': (250, 128, 114, 1), 'sandybrown': (244, 164, 96, 1), 'seagreen': (46, 139, 87, 1), 'seashell': (255, 245, 238, 1), 'sienna': (160, 82, 45, 1), 'silver': (192, 192, 192, 1), 'skyblue': (135, 206, 235, 1), 'slateblue': (106, 90, 205, 1), 'slategray': (112, 128, 144, 1), 'snow': (255, 250, 250, 1), 'springgreen': (0, 255, 127, 1), 'steelblue': (70, 130, 180, 1), 'tan': (210, 180, 140, 1), 'teal': (0, 128, 128, 1), 'thistle': (216, 191, 216, 1), 'tomato': (255, 99, 71, 1), 'transparent': (0, 0, 0, 0), 'turquoise': (64, 224, 208, 1), 'violet': (238, 130, 238, 1), 'wheat': (245, 222, 179, 1), 'white': (255, 255, 255, 1), 'whitesmoke': (245, 245, 245, 1), 'yellow': (255, 255, 0, 1), 'yellowgreen': (154, 205, 50, 1), } COLOR_LOOKUP = dict((v, k) for (k, v) in COLOR_NAMES.items()) # ------------------------------------------------------------------------------ # Built-in CSS units # See: http://www.w3.org/TR/2013/CR-css3-values-20130730/#numeric-types # Maps units to a set of common units per type, with conversion factors BASE_UNIT_CONVERSIONS = { # Lengths 'mm': (1, 'mm'), 'cm': (10, 'mm'), 'in': (Fraction(254, 10), 'mm'), 'px': (Fraction(254, 960), 'mm'), 'pt': (Fraction(254, 720), 'mm'), 'pc': (Fraction(254, 60), 'mm'), # Angles 'deg': (Fraction(1, 360), 'turn'), 'grad': (Fraction(1, 400), 'turn'), 'rad': (Fraction.from_float(pi / 2), 'turn'), 'turn': (1, 'turn'), # Times 'ms': (1, 'ms'), 's': (1000, 'ms'), # Frequencies 'hz': (1, 'hz'), 'khz': (1000, 'hz'), # Resolutions 'dpi': (1, 'dpi'), 'dpcm': (Fraction(254 / 100), 'dpi'), 'dppx': (96, 'dpi'), } def get_conversion_factor(unit): """Look up the "base" unit for this unit and the factor for converting to it. Returns a 2-tuple of `factor, base_unit`. """ if unit in BASE_UNIT_CONVERSIONS: return BASE_UNIT_CONVERSIONS[unit] else: return 1, unit def convert_units_to_base_units(units): """Convert a set of units into a set of "base" units. Returns a 2-tuple of `factor, new_units`. """ total_factor = 1 new_units = [] for unit in units: if unit not in BASE_UNIT_CONVERSIONS: continue factor, new_unit = BASE_UNIT_CONVERSIONS[unit] total_factor *= factor new_units.append(new_unit) new_units.sort() return total_factor, tuple(new_units) def count_base_units(units): """Returns a dict mapping names of base units to how many times they appear in the given iterable of units. Effectively this counts how many length units you have, how many time units, and so forth. """ ret = {} for unit in units: factor, base_unit = get_conversion_factor(unit) ret.setdefault(base_unit, 0) ret[base_unit] += 1 return ret def cancel_base_units(units, to_remove): """Given a list of units, remove a specified number of each base unit. Arguments: units: an iterable of units to_remove: a mapping of base_unit => count, such as that returned from count_base_units Returns a 2-tuple of (factor, remaining_units). """ # Copy the dict since we're about to mutate it to_remove = to_remove.copy() remaining_units = [] total_factor = Fraction(1) for unit in units: factor, base_unit = get_conversion_factor(unit) if not to_remove.get(base_unit, 0): remaining_units.append(unit) continue total_factor *= factor to_remove[base_unit] -= 1 return total_factor, remaining_units # A fixed set of units can be omitted when the value is 0 # See: http://www.w3.org/TR/2013/CR-css3-values-20130730/#lengths ZEROABLE_UNITS = frozenset(( # Relative lengths 'em', 'ex', 'ch', 'rem', # Viewport 'vw', 'vh', 'vmin', 'vmax', # Absolute lengths 'cm', 'mm', 'in', 'px', 'pt', 'pc', )) # ------------------------------------------------------------------------------ # Built-in CSS function reference # Known function names BUILTIN_FUNCTIONS = frozenset([ # CSS2 'attr', 'counter', 'counters', 'url', 'rgb', 'rect', # CSS3 values: http://www.w3.org/TR/css3-values/ 'calc', 'min', 'max', 'cycle', # CSS3 colors: http://www.w3.org/TR/css3-color/ 'rgba', 'hsl', 'hsla', # CSS3 fonts: http://www.w3.org/TR/css3-fonts/ 'local', 'format', # CSS3 images: http://www.w3.org/TR/css3-images/ 'image', 'element', 'linear-gradient', 'radial-gradient', 'repeating-linear-gradient', 'repeating-radial-gradient', # CSS3 transforms: http://www.w3.org/TR/css3-transforms/ 'perspective', 'matrix', 'matrix3d', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'rotate3d', 'translate', 'translateX', 'translateY', 'translateZ', 'translate3d', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'scale3d', 'skew', 'skewX', 'skewY', # CSS3 transitions: http://www.w3.org/TR/css3-transitions/ 'cubic-bezier', 'steps', # CSS filter effects: # https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html 'grayscale', 'sepia', 'saturate', 'hue-rotate', 'invert', 'opacity', 'brightness', 'contrast', 'blur', 'drop-shadow', 'custom', # CSS shapes # https://www.w3.org/TR/css-shapes-1/ 'inset', 'circle', 'ellipse', 'polygon', # CSS4 image module: # http://dev.w3.org/csswg/css-images/ 'image-set', 'cross-fade', 'conic-gradient', 'repeating-conic-gradient', # Others 'color-stop', # Older version of CSS3 gradients 'mask', # ??? 'from', 'to', # Very old WebKit gradient syntax ]) def is_builtin_css_function(name): """Returns whether the given `name` looks like the name of a builtin CSS function. Unrecognized functions not in this list produce warnings. """ name = name.replace('_', '-') if name in BUILTIN_FUNCTIONS: return True # Vendor-specific functions (-foo-bar) are always okay if name[0] == '-' and '-' in name[1:]: return True return False # ------------------------------------------------------------------------------ # CSS character set determination # Based upon: http://www.w3.org/TR/CSS2/syndata.html#charset def determine_encoding(buf): """Return the appropriate encoding for the given CSS source, according to the CSS charset rules. `buf` may be either a string or bytes. """ # The ultimate default is utf8; bravo, W3C bom_encoding = 'UTF-8' if not buf: # What return bom_encoding if isinstance(buf, six.text_type): # We got a file that, for whatever reason, produces already-decoded # text. Check for the BOM (which is useless now) and believe # whatever's in the @charset. if buf[0] == '\ufeff': buf = buf[0:] # This is pretty similar to the code below, but without any encoding # double-checking. charset_start = '@charset "' charset_end = '";' if buf.startswith(charset_start): start = len(charset_start) end = buf.index(charset_end, start) return buf[start:end] else: return bom_encoding # BOMs if buf[:3] == b'\xef\xbb\xbf': bom_encoding = 'UTF-8' buf = buf[3:] if buf[:4] == b'\x00\x00\xfe\xff': bom_encoding = 'UTF-32BE' buf = buf[4:] elif buf[:4] == b'\xff\xfe\x00\x00': bom_encoding = 'UTF-32LE' buf = buf[4:] if buf[:4] == b'\x00\x00\xff\xfe': raise UnicodeError("UTF-32-2143 is not supported") elif buf[:4] == b'\xfe\xff\x00\x00': raise UnicodeError("UTF-32-2143 is not supported") elif buf[:2] == b'\xfe\xff': bom_encoding = 'UTF-16BE' buf = buf[2:] elif buf[:2] == b'\xff\xfe': bom_encoding = 'UTF-16LE' buf = buf[2:] # The spec requires exactly this syntax; no escapes or extra spaces or # other shenanigans, thank goodness. charset_start = '@charset "'.encode(bom_encoding) charset_end = '";'.encode(bom_encoding) if buf.startswith(charset_start): start = len(charset_start) end = buf.index(charset_end, start) encoded_encoding = buf[start:end] encoding = encoded_encoding.decode(bom_encoding) # Ensure that decoding with the specified encoding actually produces # the same @charset rule encoded_charset = buf[:end + len(charset_end)] if (encoded_charset.decode(encoding) != encoded_charset.decode(bom_encoding)): raise UnicodeError( "@charset {0} is incompatible with detected encoding {1}" .format(bom_encoding, encoding)) else: # With no @charset, believe the BOM encoding = bom_encoding return encoding # ------------------------------------------------------------------------------ # Bits and pieces of the official CSS grammar # These are the only pseudo-elements allowed to be specified with a single # colon, for backwards compatibility CSS2_PSEUDO_ELEMENTS = frozenset(( ':after', ':before', ':first-line', ':first-letter', )) # CSS escape sequences are either a backslash followed by a single character, # or a backslash followed by one to six hex digits and a single optional # whitespace. Escaped newlines become nothing. # Ref: http://dev.w3.org/csswg/css-syntax-3/#consume-an-escaped-code-point escape_rx = re.compile(r"(?s)\\([0-9a-fA-F]{1,6})[\n\t ]?|\\(.)|\\\n") def _unescape_one(match): if match.group(1) is not None: try: return six.unichr(int(match.group(1), 16)) except ValueError: return (r'\U%08x' % int(match.group(1), 16)).decode( 'unicode-escape') elif match.group(2) is not None: return match.group(2) else: return six.text_type() def unescape(string): """Given a raw CSS string (i.e. taken directly from CSS source with no processing), eliminate all backslash escapes. """ return escape_rx.sub(_unescape_one, string) # ------------------------------------------------------------------------------ # Ad-hoc regexes specific to pyscss _expr_glob_re = re.compile(r''' \#\{(.*?)\} # Global Interpolation only ''', re.VERBOSE) # XXX these still need to be fixed; the //-in-functions thing is a chumpy hack _ml_comment_re = re.compile(r'\/\*(.*?)\*\/', re.DOTALL) _sl_comment_re = re.compile(r'(?".format(type(self).__name__) def handle_import(self, name, compilation, rule): """Attempt to resolve an import. Called once for every Sass string listed in an ``@import`` statement. Imports that Sass dictates should be converted to plain CSS imports do NOT trigger this hook. So this:: @import url(foo), "bar", "baz"; would call `handle_import` twice: once with "bar", once with "baz". Return a :class:`scss.source.SourceFile` if you want to handle the import, or None if you don't. (This method returns None by default, so if you don't care about hooking imports, just don't implement it.) This method is tried on every registered `Extension` in order, until one of them returns successfully. A good example is the core Sass import machinery, which is implemented with this hook; see the source code of the core extension. """ pass class NamespaceAdapterExtension(Extension): """Trivial wrapper that adapts a bare :class:`scss.namespace.Namespace` into a full extension. """ def __init__(self, namespace): self.namespace = namespace pyScss-1.4.0/scss/extension/bootstrap.py000066400000000000000000000012331420542636400203630ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division from scss.extension import Extension from scss.extension.compass.helpers import _font_url from scss.extension.compass.images import _image_url from scss.namespace import Namespace class BootstrapExtension(Extension): name = 'bootstrap' namespace = Namespace() ns = BootstrapExtension.namespace @ns.declare def twbs_font_path(path): return _font_url(path, False, True, False) @ns.declare def twbs_image_path(path): return _image_url(path, False, True, None, None, False, None, None, None, None) pyScss-1.4.0/scss/extension/compass/000077500000000000000000000000001420542636400174425ustar00rootroot00000000000000pyScss-1.4.0/scss/extension/compass/__init__.py000066400000000000000000000111641420542636400215560ustar00rootroot00000000000000"""Extension providing Compass support.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import glob import os.path import scss.config as config from scss.extension import Extension from scss.namespace import Namespace from scss.source import SourceFile from scss.types import Boolean from scss.types import Number from scss.types import String class CompassExtension(Extension): name = 'compass' namespace = Namespace() def handle_import(self, name, compilation, rule): """Implementation of Compass's "magic" imports, which generate spritesheets on the fly, given either a wildcard or the name of a directory. """ from .sprites import sprite_map # TODO check that the found file is actually under the root if callable(config.STATIC_ROOT): files = sorted(config.STATIC_ROOT(name)) else: glob_path = os.path.join(config.STATIC_ROOT, name) files = glob.glob(glob_path) files = sorted((fn[len(config.STATIC_ROOT):], None) for fn in files) if not files: return # Build magic context calculator = compilation._make_calculator(rule.namespace) map_name = os.path.normpath(os.path.dirname(name)).replace('\\', '_').replace('/', '_') kwargs = {} # TODO this is all kinds of busted. rule.context hasn't existed for # ages. def setdefault(var, val): _var = '$' + map_name + '-' + var if _var in rule.context: kwargs[var] = calculator.interpolate(rule.context[_var], rule, self._library) else: rule.context[_var] = val kwargs[var] = calculator.interpolate(val, rule, self._library) return rule.context[_var] setdefault('sprite-base-class', String('.' + map_name + '-sprite', quotes=None)) setdefault('sprite-dimensions', Boolean(False)) position = setdefault('position', Number(0, '%')) spacing = setdefault('spacing', Number(0)) repeat = setdefault('repeat', String('no-repeat', quotes=None)) names = tuple(os.path.splitext(os.path.basename(file))[0] for file, storage in files) for n in names: setdefault(n + '-position', position) setdefault(n + '-spacing', spacing) setdefault(n + '-repeat', repeat) rule.context['$' + map_name + '-' + 'sprites'] = sprite_map(name, **kwargs) generated_code = ''' @import "compass/utilities/sprites/base"; // All sprites should extend this class // The %(map_name)s-sprite mixin will do so for you. #{$%(map_name)s-sprite-base-class} { background: $%(map_name)s-sprites; } // Use this to set the dimensions of an element // based on the size of the original image. @mixin %(map_name)s-sprite-dimensions($name) { @include sprite-dimensions($%(map_name)s-sprites, $name); } // Move the background position to display the sprite. @mixin %(map_name)s-sprite-position($name, $offset-x: 0, $offset-y: 0) { @include sprite-position($%(map_name)s-sprites, $name, $offset-x, $offset-y); } // Extends the sprite base class and set the background position for the desired sprite. // It will also apply the image dimensions if $dimensions is true. @mixin %(map_name)s-sprite($name, $dimensions: $%(map_name)s-sprite-dimensions, $offset-x: 0, $offset-y: 0) { @extend #{$%(map_name)s-sprite-base-class}; @include sprite($%(map_name)s-sprites, $name, $dimensions, $offset-x, $offset-y); } @mixin %(map_name)s-sprites($sprite-names, $dimensions: $%(map_name)s-sprite-dimensions) { @include sprites($%(map_name)s-sprites, $sprite-names, $%(map_name)s-sprite-base-class, $dimensions); } // Generates a class for each sprited image. @mixin all-%(map_name)s-sprites($dimensions: $%(map_name)s-sprite-dimensions) { @include %(map_name)s-sprites(%(sprites)s, $dimensions); } ''' % {'map_name': map_name, 'sprites': ' '.join(names)} return SourceFile.from_string(generated_code) __all__ = ['CompassExtension'] # Import child modules LAST, so they can in turn import CompassExtension from # us import scss.extension.compass.gradients import scss.extension.compass.helpers import scss.extension.compass.images import scss.extension.compass.sprites # NOQA pyScss-1.4.0/scss/extension/compass/gradients.py000066400000000000000000000321361420542636400220010ustar00rootroot00000000000000"""Utilities for working with gradients. Inspired by Compass, but not quite the same. """ from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import base64 import logging import six from . import CompassExtension from .helpers import opposite_position, position from scss.types import Color, List, Number, String from scss.util import escape, split_params, to_float, to_str log = logging.getLogger(__name__) ns = CompassExtension.namespace def _is_color(value): # currentColor is not a Sass color value, but /is/ a CSS color value return isinstance(value, Color) or value == String('currentColor') def __color_stops(percentages, *args): if len(args) == 1: if isinstance(args[0], (list, tuple, List)): return list(args[0]) elif isinstance(args[0], (String, six.string_types)): color_stops = [] colors = split_params(getattr(args[0], 'value', args[0])) for color in colors: color = color.strip() if color.startswith('color-stop('): s, c = split_params(color[11:].rstrip(')')) s = s.strip() c = c.strip() else: c, s = color.split() color_stops.append((to_float(s), c)) return color_stops colors = [] stops = [] prev_color = False for c in args: for c in List.from_maybe(c): if _is_color(c): if prev_color: stops.append(None) colors.append(c) prev_color = True elif isinstance(c, Number): stops.append(c) prev_color = False if prev_color: stops.append(None) stops = stops[:len(colors)] if stops[0] is None or stops[0] == Number(0): stops[0] = Number(0, '%') if stops[-1] is None: stops[-1] = Number(100, '%') maxable_stops = [s for s in stops if s and not s.is_simple_unit('%')] if maxable_stops: max_stops = max(maxable_stops) else: max_stops = None stops = [_s / max_stops if _s and not _s.is_simple_unit('%') else _s for _s in stops] init = 0 start = None for i, s in enumerate(stops + [1.0]): if s is None: if start is None: start = i end = i else: final = s if start is not None: stride = (final - init) / Number(end - start + 1 + (1 if i < len(stops) else 0)) for j in range(start, end + 1): stops[j] = init + stride * Number(j - start + 1) init = final start = None if not max_stops or percentages: pass else: stops = [s if s.is_simple_unit('%') else s * max_stops for s in stops] return List(List(pair) for pair in zip(stops, colors)) def _render_standard_color_stops(color_stops): pairs = [] for i, (stop, color) in enumerate(color_stops): if ((i == 0 and stop == Number(0, '%')) or (i == len(color_stops) - 1 and stop == Number(100, '%'))): pairs.append(color) else: pairs.append(List([color, stop], use_comma=False)) return List(pairs, use_comma=True) @ns.declare def grad_color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops]) return String.unquoted(ret) def __grad_end_position(radial, color_stops): return __grad_position(-1, 100, radial, color_stops) @ns.declare def grad_point(*p): pos = set() hrz = vrt = Number(0.5, '%') for _p in p: pos.update(String.unquoted(_p).value.split()) if 'left' in pos: hrz = Number(0, '%') elif 'right' in pos: hrz = Number(1, '%') if 'top' in pos: vrt = Number(0, '%') elif 'bottom' in pos: vrt = Number(1, '%') return List([v for v in (hrz, vrt) if v is not None]) def __grad_position(index, default, radial, color_stops): try: stops = Number(color_stops[index][0]) if radial and not stops.is_simple_unit('px') and (index == 0 or index == -1 or index == len(color_stops) - 1): log.warn("Webkit only supports pixels for the start and end stops for radial gradients. Got %s", stops) except IndexError: stops = Number(default) return stops @ns.declare def grad_end_position(*color_stops): color_stops = __color_stops(False, *color_stops) return Number(__grad_end_position(False, color_stops)) @ns.declare def color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(False, *args) ret = ', '.join(['%s %s' % (c.render(), s.render()) for s, c in color_stops]) return String.unquoted(ret) @ns.declare def color_stops_in_percentages(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['%s %s' % (c.render(), s.render()) for s, c in color_stops]) return String.unquoted(ret) def _get_gradient_position_and_angle(args): for arg in args: ret = None skip = False for a in arg: if _is_color(a): skip = True break elif isinstance(a, Number): ret = arg if skip: continue if ret is not None: return ret for seek in ( 'center', 'top', 'bottom', 'left', 'right', ): if String(seek) in arg: return arg return None def _get_gradient_shape_and_size(args): for arg in args: for seek in ( 'circle', 'ellipse', 'closest-side', 'closest-corner', 'farthest-side', 'farthest-corner', 'contain', 'cover', ): if String(seek) in arg: return arg return None def _get_gradient_color_stops(args): color_stops = [] for arg in args: for a in List.from_maybe(arg): if _is_color(a): color_stops.append(arg) break return color_stops or None # TODO these functions need to be # 1. well-defined # 2. guaranteed to never wreck css3 syntax # 3. updated to whatever current compass does # 4. fixed to use a custom type instead of monkeypatching @ns.declare def radial_gradient(*args): args = List.from_maybe_starargs(args) try: # Do a rough check for standard syntax first -- `shape at position` at_position = list(args[0]).index(String('at')) except (IndexError, ValueError): shape_and_size = _get_gradient_shape_and_size(args) position_and_angle = _get_gradient_position_and_angle(args) else: shape_and_size = List.maybe_new(args[0][:at_position]) position_and_angle = List.maybe_new(args[0][at_position + 1:]) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to radial-gradient function') color_stops = __color_stops(False, *color_stops) if position_and_angle: rendered_position = position(position_and_angle) else: rendered_position = None rendered_color_stops = _render_standard_color_stops(color_stops) args = [] if shape_and_size and rendered_position: args.append(List([shape_and_size, String.unquoted('at'), rendered_position], use_comma=False)) elif rendered_position: args.append(rendered_position) elif shape_and_size: args.append(shape_and_size) args.extend(rendered_color_stops) legacy_args = [] if rendered_position: legacy_args.append(rendered_position) if shape_and_size: legacy_args.append(shape_and_size) legacy_args.extend(rendered_color_stops) ret = String.unquoted( 'radial-gradient(' + ', '.join(a.render() for a in args) + ')') legacy_ret = 'radial-gradient(' + ', '.join(a.render() for a in legacy_args) + ')' def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + legacy_ret) ret.to__moz = to__moz def to__pie(): log.warn("PIE does not support radial-gradient.") return String.unquoted('-pie-radial-gradient(unsupported)') ret.to__pie = to__pie def to__webkit(): return String.unquoted('-webkit-' + legacy_ret) ret.to__webkit = to__webkit def to__owg(): args = [ 'radial', grad_point(*position_and_angle) if position_and_angle is not None else 'center', '0', grad_point(*position_and_angle) if position_and_angle is not None else 'center', __grad_end_position(True, color_stops), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return radial_svg_gradient(*(list(color_stops) + list(position_and_angle or [String('center')]))) ret.to__svg = to__svg return ret @ns.declare def linear_gradient(*args): args = List.from_maybe_starargs(args) position_and_angle = _get_gradient_position_and_angle(args) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to linear-gradient function') color_stops = __color_stops(False, *color_stops) args = [ position(position_and_angle) if position_and_angle is not None else None, ] args.extend(_render_standard_color_stops(color_stops)) to__s = 'linear-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' ret = String.unquoted(to__s) def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + to__s) ret.to__moz = to__moz def to__pie(): return String.unquoted('-pie-' + to__s) ret.to__pie = to__pie def to__ms(): return String.unquoted('-ms-' + to__s) ret.to__ms = to__ms def to__o(): return String.unquoted('-o-' + to__s) ret.to__o = to__o def to__webkit(): return String.unquoted('-webkit-' + to__s) ret.to__webkit = to__webkit def to__owg(): args = [ 'linear', position(position_and_angle or None), opposite_position(position_and_angle or None), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return linear_svg_gradient(color_stops, position_and_angle or 'top') ret.to__svg = to__svg return ret @ns.declare def radial_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args center = None if isinstance(args[-1], (String, Number)): center = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) cx, cy = grad_point(center) r = __grad_end_position(True, color_stops) svg = __radial_svg(color_stops, cx, cy, r) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline) @ns.declare def linear_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args start = None if isinstance(args[-1], (String, Number)): start = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) x1, y1 = grad_point(start) x2, y2 = grad_point(opposite_position(start)) svg = _linear_svg(color_stops, x1, y1, x2, y2) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline) def __color_stops_svg(color_stops): ret = ''.join('' % (to_str(s), c) for s, c in color_stops) return ret def __svg_template(gradient): ret = '\ \ %s\ \ ' % gradient return ret def _linear_svg(color_stops, x1, y1, x2, y2): gradient = '%s' % ( to_str(Number(x1)), to_str(Number(y1)), to_str(Number(x2)), to_str(Number(y2)), __color_stops_svg(color_stops) ) return __svg_template(gradient) def __radial_svg(color_stops, cx, cy, r): gradient = '%s' % ( to_str(Number(cx)), to_str(Number(cy)), to_str(Number(r)), __color_stops_svg(color_stops) ) return __svg_template(gradient) pyScss-1.4.0/scss/extension/compass/helpers.py000066400000000000000000000464721420542636400214730ustar00rootroot00000000000000"""Miscellaneous helper functions ported from Compass. See: http://compass-style.org/reference/compass/helpers/ This collection is not necessarily complete or up-to-date. """ from __future__ import absolute_import from __future__ import unicode_literals import logging import math import os.path import six from . import CompassExtension from scss import config from scss.types import Boolean, Function, List, Null, Number, String, Url from scss.util import to_str, getmtime, make_data_url import re log = logging.getLogger(__name__) ns = CompassExtension.namespace FONT_TYPES = { 'woff': 'woff', 'otf': 'opentype', 'opentype': 'opentype', 'ttf': 'truetype', 'truetype': 'truetype', 'svg': 'svg', 'eot': 'embedded-opentype' } def add_cache_buster(url, mtime): fragment = url.split('#') query = fragment[0].split('?') if len(query) > 1 and query[1] != '': cb = '&_=%s' % (mtime) url = '?'.join(query) + cb else: cb = '?_=%s' % (mtime) url = query[0] + cb if len(fragment) > 1: url += '#' + fragment[1] return url # ------------------------------------------------------------------------------ # Data manipulation @ns.declare def blank(*objs): """Returns true when the object is false, an empty string, or an empty list""" for o in objs: if isinstance(o, Boolean): is_blank = not o elif isinstance(o, String): is_blank = not len(o.value.strip()) elif isinstance(o, List): is_blank = all(blank(el) for el in o) else: is_blank = False if not is_blank: return Boolean(False) return Boolean(True) @ns.declare def compact(*args): """Returns a new list after removing any non-true values""" use_comma = True if len(args) == 1 and isinstance(args[0], List): use_comma = args[0].use_comma args = args[0] return List( [arg for arg in args if arg], use_comma=use_comma, ) @ns.declare def reject(lst, *values): """Removes the given values from the list""" lst = List.from_maybe(lst) values = frozenset(List.from_maybe_starargs(values)) ret = [] for item in lst: if item not in values: ret.append(item) return List(ret, use_comma=lst.use_comma) @ns.declare def first_value_of(*args): if len(args) == 1 and isinstance(args[0], String): first = args[0].value.split()[0] return type(args[0])(first) args = List.from_maybe_starargs(args) if len(args): return args[0] else: return Null() @ns.declare_alias('-compass-list') def dash_compass_list(*args): return List.from_maybe_starargs(args) @ns.declare_alias('-compass-space-list') def dash_compass_space_list(*lst): """ If the argument is a list, it will return a new list that is space delimited Otherwise it returns a new, single element, space-delimited list. """ ret = dash_compass_list(*lst) ret.value.pop('_', None) return ret @ns.declare_alias('-compass-slice') def dash_compass_slice(lst, start_index, end_index=None): start_index = Number(start_index).value end_index = Number(end_index).value if end_index is not None else None ret = {} lst = List(lst) if end_index: # This function has an inclusive end, but Python slicing is exclusive end_index += 1 ret = lst.value[start_index:end_index] return List(ret, use_comma=lst.use_comma) # ------------------------------------------------------------------------------ # Property prefixing @ns.declare def prefixed(prefix, *args): to_fnct_str = 'to_' + to_str(prefix).replace('-', '_') for arg in List.from_maybe_starargs(args): if hasattr(arg, to_fnct_str): return Boolean(True) return Boolean(False) @ns.declare def prefix(prefix, *args): to_fnct_str = 'to_' + to_str(prefix).replace('-', '_') args = list(args) for i, arg in enumerate(args): if isinstance(arg, List): _value = [] for iarg in arg: to_fnct = getattr(iarg, to_fnct_str, None) if to_fnct: _value.append(to_fnct()) else: _value.append(iarg) args[i] = List(_value) else: to_fnct = getattr(arg, to_fnct_str, None) if to_fnct: args[i] = to_fnct() return List.maybe_new(args, use_comma=True) @ns.declare_alias('-moz') def dash_moz(*args): return prefix('_moz', *args) @ns.declare_alias('-svg') def dash_svg(*args): return prefix('_svg', *args) @ns.declare_alias('-css2') def dash_css2(*args): return prefix('_css2', *args) @ns.declare_alias('-pie') def dash_pie(*args): return prefix('_pie', *args) @ns.declare_alias('-webkit') def dash_webkit(*args): return prefix('_webkit', *args) @ns.declare_alias('-owg') def dash_owg(*args): return prefix('_owg', *args) @ns.declare_alias('-khtml') def dash_khtml(*args): return prefix('_khtml', *args) @ns.declare_alias('-ms') def dash_ms(*args): return prefix('_ms', *args) @ns.declare_alias('-o') def dash_o(*args): return prefix('_o', *args) # ------------------------------------------------------------------------------ # Selector generation # selector-append is a Sass function @ns.declare_alias('selector-append') @ns.declare def append_selector(selector, to_append): if isinstance(selector, List): lst = selector.value else: lst = String.unquoted(selector).value.split(',') to_append = String.unquoted(to_append).value.strip() ret = sorted(set(s.strip() + to_append for s in lst if s.strip())) ret = dict(enumerate(ret)) ret['_'] = ',' return ret _elements_of_type_block = 'address, article, aside, blockquote, center, dd, details, dir, div, dl, dt, fieldset, figcaption, figure, footer, form, frameset, h1, h2, h3, h4, h5, h6, header, hgroup, hr, isindex, menu, nav, noframes, noscript, ol, p, pre, section, summary, ul' _elements_of_type_inline = 'a, abbr, acronym, audio, b, basefont, bdo, big, br, canvas, cite, code, command, datalist, dfn, em, embed, font, i, img, input, kbd, keygen, label, mark, meter, output, progress, q, rp, rt, ruby, s, samp, select, small, span, strike, strong, sub, sup, textarea, time, tt, u, var, video, wbr' _elements_of_type_table = 'table' _elements_of_type_list_item = 'li' _elements_of_type_table_row_group = 'tbody' _elements_of_type_table_header_group = 'thead' _elements_of_type_table_footer_group = 'tfoot' _elements_of_type_table_row = 'tr' _elements_of_type_table_cel = 'td, th' _elements_of_type_html5_block = 'article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary' _elements_of_type_html5_inline = 'audio, canvas, command, datalist, embed, keygen, mark, meter, output, progress, rp, rt, ruby, time, video, wbr' _elements_of_type_html5 = 'article, aside, audio, canvas, command, datalist, details, embed, figcaption, figure, footer, header, hgroup, keygen, mark, menu, meter, nav, output, progress, rp, rt, ruby, section, summary, time, video, wbr' _elements_of_type = { 'block': sorted(_elements_of_type_block.replace(' ', '').split(',')), 'inline': sorted(_elements_of_type_inline.replace(' ', '').split(',')), 'table': sorted(_elements_of_type_table.replace(' ', '').split(',')), 'list-item': sorted(_elements_of_type_list_item.replace(' ', '').split(',')), 'table-row-group': sorted(_elements_of_type_table_row_group.replace(' ', '').split(',')), 'table-header-group': sorted(_elements_of_type_table_header_group.replace(' ', '').split(',')), 'table-footer-group': sorted(_elements_of_type_table_footer_group.replace(' ', '').split(',')), 'table-row': sorted(_elements_of_type_table_footer_group.replace(' ', '').split(',')), 'table-cell': sorted(_elements_of_type_table_footer_group.replace(' ', '').split(',')), 'html5-block': sorted(_elements_of_type_html5_block.replace(' ', '').split(',')), 'html5-inline': sorted(_elements_of_type_html5_inline.replace(' ', '').split(',')), 'html5': sorted(_elements_of_type_html5.replace(' ', '').split(',')), } @ns.declare def elements_of_type(display): d = String.unquoted(display) ret = _elements_of_type.get(d.value, None) if ret is None: raise Exception("Elements of type '%s' not found!" % d.value) return List(map(String, ret), use_comma=True) @ns.declare def enumerate_(prefix, frm, through, separator='-'): separator = String.unquoted(separator).value try: frm = int(getattr(frm, 'value', frm)) except ValueError: frm = 1 try: through = int(getattr(through, 'value', through)) except ValueError: through = frm if frm > through: # DEVIATION: allow reversed enumerations (and ranges as range() uses enumerate, like '@for .. from .. through') frm, through = through, frm rev = reversed else: rev = lambda x: x ret = [] for i in rev(range(frm, through + 1)): if prefix and prefix.value: ret.append(String.unquoted(prefix.value + separator + six.text_type(i))) else: ret.append(Number(i)) return List(ret, use_comma=True) @ns.declare_alias('headings') @ns.declare def headers(frm=None, to=None): if frm and to is None: if isinstance(frm, String) and frm.value.lower() == 'all': frm = 1 to = 6 else: try: to = int(getattr(frm, 'value', frm)) except ValueError: to = 6 frm = 1 else: try: frm = 1 if frm is None else int(getattr(frm, 'value', frm)) except ValueError: frm = 1 try: to = 6 if to is None else int(getattr(to, 'value', to)) except ValueError: to = 6 ret = [String.unquoted('h' + six.text_type(i)) for i in range(frm, to + 1)] return List(ret, use_comma=True) @ns.declare def nest(*arguments): if isinstance(arguments[0], List): lst = arguments[0] elif isinstance(arguments[0], String): lst = arguments[0].value.split(',') else: raise TypeError("Expected list or string, got %r" % (arguments[0],)) ret = [] for s in lst: if isinstance(s, String): s = s.value elif isinstance(s, six.string_types): s = s else: raise TypeError("Expected string, got %r" % (s,)) s = s.strip() if not s: continue ret.append(s) for arg in arguments[1:]: if isinstance(arg, List): lst = arg elif isinstance(arg, String): lst = arg.value.split(',') else: raise TypeError("Expected list or string, got %r" % (arg,)) new_ret = [] for s in lst: if isinstance(s, String): s = s.value elif isinstance(s, six.string_types): s = s else: raise TypeError("Expected string, got %r" % (s,)) s = s.strip() if not s: continue for r in ret: if '&' in s: new_ret.append(s.replace('&', r)) else: if not r or r[-1] in ('.', ':', '#'): new_ret.append(r + s) else: new_ret.append(r + ' ' + s) ret = new_ret ret = [String.unquoted(s) for s in sorted(set(ret))] return List(ret, use_comma=True) # This isn't actually from Compass, but it's just a shortcut for enumerate(). # DEVIATION: allow reversed ranges (range() uses enumerate() which allows reversed values, like '@for .. from .. through') @ns.declare def range_(frm, through=None): if through is None: through = frm frm = 1 return enumerate_(None, frm, through) # ------------------------------------------------------------------------------ # Working with CSS constants OPPOSITE_POSITIONS = { 'top': String.unquoted('bottom'), 'bottom': String.unquoted('top'), 'left': String.unquoted('right'), 'right': String.unquoted('left'), 'center': String.unquoted('center'), } DEFAULT_POSITION = [String.unquoted('center'), String.unquoted('top')] def _position(opposite, positions): if positions is None: positions = DEFAULT_POSITION else: positions = List.from_maybe(positions) ret = [] for pos in positions: if isinstance(pos, (String, six.string_types)): pos_value = getattr(pos, 'value', pos) if pos_value in OPPOSITE_POSITIONS: if opposite: ret.append(OPPOSITE_POSITIONS[pos_value]) else: ret.append(pos) continue elif pos_value == 'to': # Gradient syntax keyword; leave alone ret.append(pos) continue elif isinstance(pos, Number): if pos.is_simple_unit('%'): if opposite: ret.append(Number(100 - pos.value, '%')) else: ret.append(pos) continue elif pos.is_simple_unit('deg'): # TODO support other angle types? if opposite: ret.append(Number((pos.value + 180) % 360, 'deg')) else: ret.append(pos) continue if opposite: log.warn("Can't find opposite for position %r" % (pos,)) ret.append(pos) return List(ret, use_comma=False).maybe() @ns.declare def position(p): return _position(False, p) @ns.declare def opposite_position(p): return _position(True, p) # ------------------------------------------------------------------------------ # Math @ns.declare def pi(): return Number(math.pi) @ns.declare def e(): return Number(math.e) @ns.declare def log_(number, base=None): if not isinstance(number, Number): raise TypeError("Expected number, got %r" % (number,)) elif not number.is_unitless: raise ValueError("Expected unitless number, got %r" % (number,)) if base is None: pass elif not isinstance(base, Number): raise TypeError("Expected number, got %r" % (base,)) elif not base.is_unitless: raise ValueError("Expected unitless number, got %r" % (base,)) if base is None: ret = math.log(number.value) else: ret = math.log(number.value, base.value) return Number(ret) @ns.declare def pow(number, exponent): return number ** exponent ns.set_function('sqrt', 1, Number.wrap_python_function(math.sqrt)) ns.set_function('sin', 1, Number.wrap_python_function(math.sin)) ns.set_function('cos', 1, Number.wrap_python_function(math.cos)) ns.set_function('tan', 1, Number.wrap_python_function(math.tan)) # ------------------------------------------------------------------------------ # Fonts def _fonts_root(): return config.STATIC_ROOT if config.FONTS_ROOT is None else config.FONTS_ROOT def _font_url(path, only_path=False, cache_buster=True, inline=False): filepath = String.unquoted(path).value file = None FONTS_ROOT = _fonts_root() if callable(FONTS_ROOT): try: _file, _storage = list(FONTS_ROOT(filepath))[0] except IndexError: filetime = None else: filetime = getmtime(_file, _storage) if filetime is None: filetime = 'NA' elif inline: file = _storage.open(_file) else: _path = os.path.join(FONTS_ROOT, filepath.strip('/')) filetime = getmtime(_path) if filetime is None: filetime = 'NA' elif inline: file = open(_path, 'rb') BASE_URL = config.FONTS_URL or config.STATIC_URL if file and inline: font_type = None if re.match(r'^([^?]+)[.](.*)([?].*)?$', path.value): font_type = String.unquoted(re.match(r'^([^?]+)[.](.*)([?].*)?$', path.value).groups()[1]).value try: mime = FONT_TYPES[font_type] except KeyError: raise Exception('Could not determine font type for "%s"' % path.value) mime = FONT_TYPES.get(font_type) if font_type == 'woff': mime = 'application/font-woff' elif font_type == 'eot': mime = 'application/vnd.ms-fontobject' url = make_data_url( (mime if '/' in mime else 'font/%s' % mime), file.read()) file.close() else: url = '%s/%s' % (BASE_URL.rstrip('/'), filepath.lstrip('/')) if cache_buster and filetime != 'NA': url = add_cache_buster(url, filetime) if only_path: return String.unquoted(url) else: return Url.unquoted(url) def _font_files(args, inline): if args == (): return String.unquoted("") fonts = [] args_len = len(args) skip_next = False for index, arg in enumerate(args): if not skip_next: font_type = args[index + 1] if args_len > (index + 1) else None if font_type and font_type.value in FONT_TYPES: skip_next = True else: if re.match(r'^([^?]+)[.](.*)([?].*)?$', arg.value): font_type = String.unquoted(re.match(r'^([^?]+)[.](.*)([?].*)?$', arg.value).groups()[1]) if font_type.value in FONT_TYPES: fonts.append(List([ _font_url(arg, inline=inline), Function(FONT_TYPES[font_type.value], 'format'), ], use_comma=False)) else: raise Exception('Could not determine font type for "%s"' % arg.value) else: skip_next = False return List(fonts, separator=',') @ns.declare def font_url(path, only_path=False, cache_buster=True): """ Generates a path to an asset found relative to the project's font directory. Passing a true value as the second argument will cause the only the path to be returned instead of a `url()` function """ return _font_url(path, only_path, cache_buster, False) @ns.declare def font_files(*args): return _font_files(args, inline=False) @ns.declare def inline_font_files(*args): return _font_files(args, inline=True) # ------------------------------------------------------------------------------ # External stylesheets @ns.declare def stylesheet_url(path, only_path=False, cache_buster=True): """ Generates a path to an asset found relative to the project's css directory. Passing a true value as the second argument will cause the only the path to be returned instead of a `url()` function """ filepath = String.unquoted(path).value if callable(config.STATIC_ROOT): try: _file, _storage = list(config.STATIC_ROOT(filepath))[0] except IndexError: filetime = None else: filetime = getmtime(_file, _storage) if filetime is None: filetime = 'NA' else: _path = os.path.join(config.STATIC_ROOT, filepath.strip('/')) filetime = getmtime(_path) if filetime is None: filetime = 'NA' BASE_URL = config.STATIC_URL url = '%s%s' % (BASE_URL, filepath) if cache_buster: url = add_cache_buster(url, filetime) if only_path: return String.unquoted(url) else: return Url.unquoted(url) pyScss-1.4.0/scss/extension/compass/images.py000066400000000000000000000246621420542636400212730ustar00rootroot00000000000000"""Image utilities ported from Compass.""" from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import logging import mimetypes import os.path import six from six.moves import xrange from . import CompassExtension from .helpers import add_cache_buster from scss import config from scss.errors import SassMissingDependency from scss.types import Color, List, Number, String, Url from scss.util import getmtime, make_data_url, make_filename_hash from scss.extension import Cache try: from PIL import Image except ImportError: try: import Image except: Image = None log = logging.getLogger(__name__) ns = CompassExtension.namespace def _images_root(): return config.STATIC_ROOT if config.IMAGES_ROOT is None else config.IMAGES_ROOT def _assets_root(): return config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets') def _get_cache(prefix): return Cache((config.CACHE_ROOT or _assets_root(), prefix)) def _image_url(path, only_path=False, cache_buster=True, dst_color=None, src_color=None, inline=False, mime_type=None, spacing=None, collapse_x=None, collapse_y=None): """ src_color - a list of or a single color to be replaced by each corresponding dst_color colors spacing - spaces to be added to the image collapse_x, collapse_y - collapsable (layered) image of the given size (x, y) """ if inline or dst_color or spacing: if not Image: raise SassMissingDependency('PIL', 'image manipulation') filepath = String.unquoted(path).value fileext = os.path.splitext(filepath)[1].lstrip('.').lower() if mime_type: mime_type = String.unquoted(mime_type).value if not mime_type: mime_type = mimetypes.guess_type(filepath)[0] if not mime_type: mime_type = 'image/%s' % fileext path = None IMAGES_ROOT = _images_root() if callable(IMAGES_ROOT): try: _file, _storage = list(IMAGES_ROOT(filepath))[0] except IndexError: filetime = None else: filetime = getmtime(_file, _storage) if filetime is None: filetime = 'NA' elif inline or dst_color or spacing: path = _storage.open(_file) else: _path = os.path.join(IMAGES_ROOT.rstrip(os.sep), filepath.strip('\\/')) filetime = getmtime(_path) if filetime is None: filetime = 'NA' elif inline or dst_color or spacing: path = open(_path, 'rb') BASE_URL = config.IMAGES_URL or config.STATIC_URL if path: dst_colors = [list(Color(v).value[:3]) for v in List.from_maybe(dst_color) if v] src_color = Color.from_name('black') if src_color is None else src_color src_colors = [tuple(Color(v).value[:3]) for v in List.from_maybe(src_color)] len_colors = max(len(dst_colors), len(src_colors)) dst_colors = (dst_colors * len_colors)[:len_colors] src_colors = (src_colors * len_colors)[:len_colors] spacing = Number(0) if spacing is None else spacing spacing = [int(Number(v).value) for v in List.from_maybe(spacing)] spacing = (spacing * 4)[:4] file_name, file_ext = os.path.splitext(os.path.normpath(filepath).replace(os.sep, '_')) key = (filetime, src_color, dst_color, spacing) asset_file = file_name + '-' + make_filename_hash(key) + file_ext ASSETS_ROOT = _assets_root() asset_path = os.path.join(ASSETS_ROOT, asset_file) if os.path.exists(asset_path): filepath = asset_file BASE_URL = config.ASSETS_URL if inline: path = open(asset_path, 'rb') url = make_data_url(mime_type, path.read()) else: url = '%s%s' % (BASE_URL, filepath) if cache_buster: filetime = getmtime(asset_path) url = add_cache_buster(url, filetime) else: simply_process = False image = None if fileext in ('cur',): simply_process = True else: try: image = Image.open(path) except IOError: if not collapse_x and not collapse_y and not dst_colors: simply_process = True if simply_process: if inline: url = make_data_url(mime_type, path.read()) else: url = '%s%s' % (BASE_URL, filepath) if cache_buster: filetime = getmtime(asset_path) url = add_cache_buster(url, filetime) else: width, height = collapse_x or image.size[0], collapse_y or image.size[1] new_image = Image.new( mode='RGBA', size=(width + spacing[1] + spacing[3], height + spacing[0] + spacing[2]), color=(0, 0, 0, 0) ) for i, dst_color in enumerate(dst_colors): src_color = src_colors[i] pixdata = image.load() for _y in xrange(image.size[1]): for _x in xrange(image.size[0]): pixel = pixdata[_x, _y] if pixel[:3] == src_color: pixdata[_x, _y] = tuple([int(c) for c in dst_color] + [pixel[3] if len(pixel) == 4 else 255]) iwidth, iheight = image.size if iwidth != width or iheight != height: cy = 0 while cy < iheight: cx = 0 while cx < iwidth: cropped_image = image.crop((cx, cy, cx + width, cy + height)) new_image.paste(cropped_image, (int(spacing[3]), int(spacing[0])), cropped_image) cx += width cy += height else: new_image.paste(image, (int(spacing[3]), int(spacing[0]))) if not inline: try: new_image.save(asset_path) filepath = asset_file BASE_URL = config.ASSETS_URL if cache_buster: filetime = getmtime(asset_path) except IOError: log.exception("Error while saving image") inline = True # Retry inline version url = os.path.join(config.ASSETS_URL.rstrip(os.sep), asset_file.lstrip(os.sep)) if cache_buster: url = add_cache_buster(url, filetime) if inline: output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() url = make_data_url(mime_type, contents) else: url = os.path.join(BASE_URL.rstrip('/'), filepath.lstrip('\\/')) if cache_buster and filetime != 'NA': url = add_cache_buster(url, filetime) if not os.sep == '/': url = url.replace(os.sep, '/') if only_path: return String.unquoted(url) else: return Url.unquoted(url) @ns.declare def inline_image(image, mime_type=None, dst_color=None, src_color=None, spacing=None, collapse_x=None, collapse_y=None): """ Embeds the contents of a file directly inside your stylesheet, eliminating the need for another HTTP request. For small files such images or fonts, this can be a performance benefit at the cost of a larger generated CSS file. """ return _image_url(image, False, False, dst_color, src_color, True, mime_type, spacing, collapse_x, collapse_y) @ns.declare def image_url(path, only_path=False, cache_buster=True, dst_color=None, src_color=None, spacing=None, collapse_x=None, collapse_y=None): """ Generates a path to an asset found relative to the project's images directory. Passing a true value as the second argument will cause the only the path to be returned instead of a `url()` function """ return _image_url(path, only_path, cache_buster, dst_color, src_color, False, None, spacing, collapse_x, collapse_y) @ns.declare def image_width(image): """ Returns the width of the image found at the path supplied by `image` relative to your project's images directory. """ if not Image: raise SassMissingDependency('PIL', 'image manipulation') image_size_cache = _get_cache('image_size_cache') filepath = String.unquoted(image).value path = None try: width = image_size_cache[filepath][0] except KeyError: width = 0 IMAGES_ROOT = _images_root() if callable(IMAGES_ROOT): try: _file, _storage = list(IMAGES_ROOT(filepath))[0] except IndexError: pass else: path = _storage.open(_file) else: _path = os.path.join(IMAGES_ROOT, filepath.strip(os.sep)) if os.path.exists(_path): path = open(_path, 'rb') if path: image = Image.open(path) size = image.size width = size[0] image_size_cache[filepath] = size return Number(width, 'px') @ns.declare def image_height(image): """ Returns the height of the image found at the path supplied by `image` relative to your project's images directory. """ image_size_cache = _get_cache('image_size_cache') if not Image: raise SassMissingDependency('PIL', 'image manipulation') filepath = String.unquoted(image).value path = None try: height = image_size_cache[filepath][1] except KeyError: height = 0 IMAGES_ROOT = _images_root() if callable(IMAGES_ROOT): try: _file, _storage = list(IMAGES_ROOT(filepath))[0] except IndexError: pass else: path = _storage.open(_file) else: _path = os.path.join(IMAGES_ROOT, filepath.strip(os.sep)) if os.path.exists(_path): path = open(_path, 'rb') if path: image = Image.open(path) size = image.size height = size[1] image_size_cache[filepath] = size return Number(height, 'px') pyScss-1.4.0/scss/extension/compass/layouts.py000066400000000000000000000340741420542636400215240ustar00rootroot00000000000000"""Functions used for generating packed CSS sprite maps. These are ported from the Binary Tree Bin Packing Algorithm: http://codeincomplete.com/posts/2011/5/7/bin_packing/ """ from __future__ import absolute_import from __future__ import unicode_literals # Copyright (c) 2011, 2012, 2013 Jake Gordon and contributors # Copyright (c) 2013 German M. Bravo # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. class LayoutNode(object): def __init__(self, x, y, w, h, down=None, right=None, used=False): self.x = x self.y = y self.w = w self.h = h self.down = down self.right = right self.used = used self.width = 0 self.height = 0 @property def area(self): return self.width * self.height def __repr__(self): return '<%s (%s, %s) [%sx%s]>' % (self.__class__.__name__, self.x, self.y, self.w, self.h) class SpritesLayout(object): def __init__(self, blocks, padding=None, margin=None, ppadding=None, pmargin=None): self.num_blocks = len(blocks) if margin is None: margin = [[0] * 4] * self.num_blocks elif not isinstance(margin, (tuple, list)): margin = [[margin] * 4] * self.num_blocks elif not isinstance(margin[0], (tuple, list)): margin = [margin] * self.num_blocks if padding is None: padding = [[0] * 4] * self.num_blocks elif not isinstance(padding, (tuple, list)): padding = [[padding] * 4] * self.num_blocks elif not isinstance(padding[0], (tuple, list)): padding = [padding] * self.num_blocks if pmargin is None: pmargin = [[0.0] * 4] * self.num_blocks elif not isinstance(pmargin, (tuple, list)): pmargin = [[pmargin] * 4] * self.num_blocks elif not isinstance(pmargin[0], (tuple, list)): pmargin = [pmargin] * self.num_blocks if ppadding is None: ppadding = [[0.0] * 4] * self.num_blocks elif not isinstance(ppadding, (tuple, list)): ppadding = [[ppadding] * 4] * self.num_blocks elif not isinstance(ppadding[0], (tuple, list)): ppadding = [ppadding] * self.num_blocks self.blocks = tuple(( b[0] + padding[i][3] + padding[i][1] + margin[i][3] + margin[i][1] + int(round(b[0] * (ppadding[i][3] + ppadding[i][1] + pmargin[i][3] + pmargin[i][1]))), b[1] + padding[i][0] + padding[i][2] + margin[i][0] + margin[i][2] + int(round(b[1] * (ppadding[i][0] + ppadding[i][2] + pmargin[i][0] + pmargin[i][2]))), b[0], b[1], i ) for i, b in enumerate(blocks)) self.margin = margin self.padding = padding self.pmargin = pmargin self.ppadding = ppadding class PackedSpritesLayout(SpritesLayout): @staticmethod def MAXSIDE(a, b): """maxside: Sort pack by maximum sides""" return cmp(max(b[0], b[1]), max(a[0], a[1])) or cmp(min(b[0], b[1]), min(a[0], a[1])) or cmp(b[1], a[1]) or cmp(b[0], a[0]) @staticmethod def WIDTH(a, b): """width: Sort pack by width""" return cmp(b[0], a[0]) or cmp(b[1], a[1]) @staticmethod def HEIGHT(a, b): """height: Sort pack by height""" return cmp(b[1], a[1]) or cmp(b[0], a[0]) @staticmethod def AREA(a, b): """area: Sort pack by area""" return cmp(b[0] * b[1], a[0] * a[1]) or cmp(b[1], a[1]) or cmp(b[0], a[0]) def __init__(self, blocks, padding=None, margin=None, ppadding=None, pmargin=None, methods=None): super(PackedSpritesLayout, self).__init__(blocks, padding, margin, ppadding, pmargin) ratio = 0 if methods is None: methods = (self.MAXSIDE, self.WIDTH, self.HEIGHT, self.AREA) for method in methods: sorted_blocks = sorted( self.blocks, cmp=method, ) root = LayoutNode( x=0, y=0, w=sorted_blocks[0][0] if sorted_blocks else 0, h=sorted_blocks[0][1] if sorted_blocks else 0 ) area = 0 nodes = [None] * self.num_blocks for block in sorted_blocks: w, h, width, height, i = block node = self._findNode(root, w, h) if node: node = self._splitNode(node, w, h) else: root = self._growNode(root, w, h) node = self._findNode(root, w, h) if node: node = self._splitNode(node, w, h) else: node = None nodes[i] = node node.width = width node.height = height area += node.area this_ratio = area / float(root.w * root.h) # print method.__doc__, "%g%%" % (this_ratio * 100) if ratio < this_ratio: self.root = root self.nodes = nodes self.method = method ratio = this_ratio if ratio > 0.96: break # print self.method.__doc__, "%g%%" % (ratio * 100) def __iter__(self): for i, node in enumerate(self.nodes): margin, padding = self.margin[i], self.padding[i] pmargin, ppadding = self.pmargin[i], self.ppadding[i] cssw = node.width + padding[3] + padding[1] + int(round(node.width * (ppadding[3] + ppadding[1]))) # image width plus padding cssh = node.height + padding[0] + padding[2] + int(round(node.height * (ppadding[0] + ppadding[2]))) # image height plus padding cssx = node.x + margin[3] + int(round(node.width * pmargin[3])) cssy = node.y + margin[0] + int(round(node.height * pmargin[0])) x = cssx + padding[3] + int(round(node.width * ppadding[3])) y = cssy + padding[0] + int(round(node.height * ppadding[0])) yield x, y, node.width, node.height, cssx, cssy, cssw, cssh @property def width(self): return self.root.w @property def height(self): return self.root.h def _findNode(self, root, w, h): if root.used: return self._findNode(root.right, w, h) or self._findNode(root.down, w, h) elif w <= root.w and h <= root.h: return root else: return None def _splitNode(self, node, w, h): node.used = True node.down = LayoutNode( x=node.x, y=node.y + h, w=node.w, h=node.h - h ) node.right = LayoutNode( x=node.x + w, y=node.y, w=node.w - w, h=h ) return node def _growNode(self, root, w, h): canGrowDown = w <= root.w canGrowRight = h <= root.h shouldGrowRight = canGrowRight and (root.h >= root.w + w) # attempt to keep square-ish by growing right when height is much greater than width shouldGrowDown = canGrowDown and (root.w >= root.h + h) # attempt to keep square-ish by growing down when width is much greater than height if shouldGrowRight: return self._growRight(root, w, h) elif shouldGrowDown: return self._growDown(root, w, h) elif canGrowRight: return self._growRight(root, w, h) elif canGrowDown: return self._growDown(root, w, h) else: # need to ensure sensible root starting size to avoid this happening assert False, "Blocks must be properly sorted!" def _growRight(self, root, w, h): root = LayoutNode( used=True, x=0, y=0, w=root.w + w, h=root.h, down=root, right=LayoutNode( x=root.w, y=0, w=w, h=root.h ) ) return root def _growDown(self, root, w, h): root = LayoutNode( used=True, x=0, y=0, w=root.w, h=root.h + h, down=LayoutNode( x=0, y=root.h, w=root.w, h=h ), right=root ) return root class HorizontalSpritesLayout(SpritesLayout): def __init__(self, blocks, padding=None, margin=None, ppadding=None, pmargin=None, position=None): super(HorizontalSpritesLayout, self).__init__(blocks, padding, margin, ppadding, pmargin) self.width = sum(block[0] for block in self.blocks) self.height = max(block[1] for block in self.blocks) if position is None: position = [0.0] * self.num_blocks elif not isinstance(position, (tuple, list)): position = [position] * self.num_blocks self.position = position def __iter__(self): cx = 0 for i, block in enumerate(self.blocks): w, h, width, height, i = block margin, padding = self.margin[i], self.padding[i] pmargin, ppadding = self.pmargin[i], self.ppadding[i] position = self.position[i] cssw = width + padding[3] + padding[1] + int(round(width * (ppadding[3] + ppadding[1]))) # image width plus padding cssh = height + padding[0] + padding[2] + int(round(height * (ppadding[0] + ppadding[2]))) # image height plus padding cssx = cx + margin[3] + int(round(width * pmargin[3])) # anchored at x cssy = int(round((self.height - cssh) * position)) # centered vertically x = cssx + padding[3] + int(round(width * ppadding[3])) # image drawn offset to account for padding y = cssy + padding[0] + int(round(height * ppadding[0])) # image drawn offset to account for padding yield x, y, width, height, cssx, cssy, cssw, cssh cx += cssw + margin[3] + margin[1] + int(round(width * (pmargin[3] + pmargin[1]))) class VerticalSpritesLayout(SpritesLayout): def __init__(self, blocks, padding=None, margin=None, ppadding=None, pmargin=None, position=None): super(VerticalSpritesLayout, self).__init__(blocks, padding, margin, ppadding, pmargin) self.width = max(block[0] for block in self.blocks) self.height = sum(block[1] for block in self.blocks) if position is None: position = [0.0] * self.num_blocks elif not isinstance(position, (tuple, list)): position = [position] * self.num_blocks self.position = position def __iter__(self): cy = 0 for i, block in enumerate(self.blocks): w, h, width, height, i = block margin, padding = self.margin[i], self.padding[i] pmargin, ppadding = self.pmargin[i], self.ppadding[i] position = self.position[i] cssw = width + padding[3] + padding[1] + int(round(width * (ppadding[3] + ppadding[1]))) # image width plus padding cssh = height + padding[0] + padding[2] + int(round(height * (ppadding[0] + ppadding[2]))) # image height plus padding cssx = int(round((self.width - cssw) * position)) # centered horizontally cssy = cy + margin[0] + int(round(height * pmargin[0])) # anchored at y x = cssx + padding[3] + int(round(width * ppadding[3])) # image drawn offset to account for padding y = cssy + padding[0] + int(round(height * ppadding[0])) # image drawn offset to account for padding yield x, y, width, height, cssx, cssy, cssw, cssh cy += cssh + margin[0] + margin[2] + int(round(height * (pmargin[0] + pmargin[2]))) class DiagonalSpritesLayout(SpritesLayout): def __init__(self, blocks, padding=None, margin=None, ppadding=None, pmargin=None): super(DiagonalSpritesLayout, self).__init__(blocks, padding, margin, ppadding, pmargin) self.width = sum(block[0] for block in self.blocks) self.height = sum(block[1] for block in self.blocks) def __iter__(self): cx, cy = 0, 0 for i, block in enumerate(self.blocks): w, h, width, height, i = block margin, padding = self.margin[i], self.padding[i] pmargin, ppadding = self.pmargin[i], self.ppadding[i] cssw = width + padding[3] + padding[1] + int(round(width * (ppadding[3] + ppadding[1]))) # image width plus padding cssh = height + padding[0] + padding[2] + int(round(height * (ppadding[0] + ppadding[2]))) # image height plus padding cssx = cx + margin[3] + int(round(width * pmargin[3])) # anchored at x cssy = cy + margin[0] + int(round(height * pmargin[0])) # anchored at y x = cssx + padding[3] + int(round(width * ppadding[3])) # image drawn offset to account for padding y = cssy + padding[0] + int(round(height * ppadding[0])) # image drawn offset to account for padding yield x, y, width, height, cssx, cssy, cssw, cssh cx += cssw + margin[3] + margin[1] + int(round(width * (pmargin[3] + pmargin[1]))) cy += cssh + margin[0] + margin[2] + int(round(height * (pmargin[0] + pmargin[2]))) pyScss-1.4.0/scss/extension/compass/sprites.py000066400000000000000000000536261420542636400215210ustar00rootroot00000000000000"""Functions used for generating CSS sprites. These are ported from the Compass sprite library: http://compass-style.org/reference/compass/utilities/sprites/ """ from __future__ import absolute_import from __future__ import unicode_literals import six import glob import logging import os.path import tempfile import time import sys try: import cPickle as pickle except ImportError: import pickle try: from PIL import Image except ImportError: try: import Image except: Image = None from six.moves import xrange from . import CompassExtension from .layouts import PackedSpritesLayout, HorizontalSpritesLayout, VerticalSpritesLayout, DiagonalSpritesLayout from scss import config from scss.errors import SassMissingDependency from scss.types import Color, List, Number, String, Boolean from scss.util import escape, getmtime, make_data_url, make_filename_hash from scss.extension import Cache log = logging.getLogger(__name__) ns = CompassExtension.namespace MAX_SPRITE_MAPS = 4096 KEEP_SPRITE_MAPS = int(MAX_SPRITE_MAPS * 0.8) def _assets_root(): return config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets') def _get_cache(prefix): return Cache((config.CACHE_ROOT or _assets_root(), prefix)) # ------------------------------------------------------------------------------ # Compass-like functionality for sprites and images def alpha_composite(im1, im2, offset=None, box=None, opacity=1): im1size = im1.size im2size = im2.size if offset is None: offset = (0, 0) if box is None: box = (0, 0) + im2size o1x, o1y = offset o2x, o2y, o2w, o2h = box width = o2w - o2x height = o2h - o2y im1_data = im1.load() im2_data = im2.load() for y in xrange(height): for x in xrange(width): pos1 = o1x + x, o1y + y if pos1[0] >= im1size[0] or pos1[1] >= im1size[1]: continue pos2 = o2x + x, o2y + y if pos2[0] >= im2size[0] or pos2[1] >= im2size[1]: continue dr, dg, db, da = im1_data[pos1] sr, sg, sb, sa = im2_data[pos2] da /= 255.0 sa /= 255.0 sa *= opacity ida = da * (1 - sa) oa = (sa + ida) if oa: pixel = ( int(round((sr * sa + dr * ida)) / oa), int(round((sg * sa + dg * ida)) / oa), int(round((sb * sa + db * ida)) / oa), int(round(255 * oa)) ) else: pixel = (0, 0, 0, 0) im1_data[pos1] = pixel return im1 @ns.declare def sprite_map(g, **kwargs): """ Generates a sprite map from the files matching the glob pattern. Uses the keyword-style arguments passed in to control the placement. $direction - Sprite map layout. Can be `vertical` (default), `horizontal`, `diagonal` or `smart`. $position - For `horizontal` and `vertical` directions, the position of the sprite. (defaults to `0`) $-position - Position of a given sprite. $padding, $spacing - Adds paddings to sprites (top, right, bottom, left). (defaults to `0, 0, 0, 0`) $-padding, $-spacing - Padding for a given sprite. $dst-color - Together with `$src-color`, forms a map of source colors to be converted to destiny colors (same index of `$src-color` changed to `$dst-color`). $-dst-color - Destiny colors for a given sprite. (defaults to `$dst-color`) $src-color - Selects source colors to be converted to the corresponding destiny colors. (defaults to `black`) $-dst-color - Source colors for a given sprite. (defaults to `$src-color`) $collapse - Collapses every image in the sprite map to a fixed size (`x` and `y`). $collapse-x - Collapses a size for `x`. $collapse-y - Collapses a size for `y`. """ if not Image: raise SassMissingDependency('PIL', 'image manipulation') sprite_maps = _get_cache('sprite_maps') now_time = time.time() globs = String(g, quotes=None).value globs = sorted(g.strip() for g in globs.split(',')) _k_ = ','.join(globs) files = None rfiles = None tfiles = None map_name = None if _k_ in sprite_maps: sprite_maps[_k_]['*'] = now_time else: files = [] rfiles = [] tfiles = [] for _glob in globs: if '..' not in _glob: # Protect against going to prohibited places... if callable(config.STATIC_ROOT): _glob_path = _glob _rfiles = _files = sorted(config.STATIC_ROOT(_glob)) else: _glob_path = os.path.join(config.STATIC_ROOT, _glob) _files = glob.glob(_glob_path) _files = sorted((f, None) for f in _files) _rfiles = [(rf[len(config.STATIC_ROOT):], s) for rf, s in _files] if _files: files.extend(_files) rfiles.extend(_rfiles) base_name = os.path.normpath(os.path.dirname(_glob)).replace('\\', '_').replace('/', '_') _map_name, _, _map_type = base_name.partition('.') if _map_type: _map_type += '-' if not map_name: map_name = _map_name tfiles.extend([_map_type] * len(_files)) else: glob_path = _glob_path if files is not None: if not files: log.error("Nothing found at '%s'", glob_path) return String.unquoted('') key = [f for (f, s) in files] + [repr(kwargs), config.ASSETS_URL] key = map_name + '-' + make_filename_hash(key) asset_file = key + '.png' ASSETS_ROOT = _assets_root() asset_path = os.path.join(ASSETS_ROOT, asset_file) cache_path = os.path.join(config.CACHE_ROOT or ASSETS_ROOT, asset_file + '.cache') inline = Boolean(kwargs.get('inline', False)) sprite_map = None asset = None file_asset = None inline_asset = None if os.path.exists(asset_path) or inline: try: save_time, file_asset, inline_asset, sprite_map, sizes = pickle.load(open(cache_path)) if file_asset: sprite_maps[file_asset.render()] = sprite_map if inline_asset: sprite_maps[inline_asset.render()] = sprite_map if inline: asset = inline_asset else: asset = file_asset except: pass if sprite_map: for file_, storage in files: _time = getmtime(file_, storage) if save_time < _time: if _time > now_time: log.warning("File '%s' has a date in the future (cache ignored)" % file_) sprite_map = None # Invalidate cached sprite map break if sprite_map is None or asset is None: cache_buster = Boolean(kwargs.get('cache_buster', True)) direction = String.unquoted(kwargs.get('direction', config.SPRTE_MAP_DIRECTION)).value repeat = String.unquoted(kwargs.get('repeat', 'no-repeat')).value collapse = kwargs.get('collapse', Number(0)) if isinstance(collapse, List): collapse_x = int(Number(collapse[0]).value) collapse_y = int(Number(collapse[-1]).value) else: collapse_x = collapse_y = int(Number(collapse).value) if 'collapse_x' in kwargs: collapse_x = int(Number(kwargs['collapse_x']).value) if 'collapse_y' in kwargs: collapse_y = int(Number(kwargs['collapse_y']).value) position = Number(kwargs.get('position', 0)) if not position.is_simple_unit('%') and position.value > 1: position = position.value / 100.0 else: position = position.value if position < 0: position = 0.0 elif position > 1: position = 1.0 padding = kwargs.get('padding', kwargs.get('spacing', Number(0))) padding = [int(Number(v).value) for v in List.from_maybe(padding)] padding = (padding * 4)[:4] dst_colors = kwargs.get('dst_color') dst_colors = [list(Color(v).value[:3]) for v in List.from_maybe(dst_colors) if v] src_colors = kwargs.get('src_color', Color.from_name('black')) src_colors = [tuple(Color(v).value[:3]) for v in List.from_maybe(src_colors)] len_colors = max(len(dst_colors), len(src_colors)) dst_colors = (dst_colors * len_colors)[:len_colors] src_colors = (src_colors * len_colors)[:len_colors] def images(f=lambda x: x): for file_, storage in f(files): if storage is not None: _file = storage.open(file_) else: _file = file_ _image = Image.open(_file) yield _image names = tuple(os.path.splitext(os.path.basename(file_))[0] for file_, storage in files) tnames = tuple(tfiles[i] + n for i, n in enumerate(names)) has_dst_colors = False all_dst_colors = [] all_src_colors = [] all_positions = [] all_paddings = [] for name in names: name = name.replace('-', '_') _position = kwargs.get(name + '_position') if _position is None: _position = position else: _position = Number(_position) if not _position.is_simple_unit('%') and _position.value > 1: _position = _position.value / 100.0 else: _position = _position.value if _position < 0: _position = 0.0 elif _position > 1: _position = 1.0 all_positions.append(_position) _padding = kwargs.get(name + '_padding', kwargs.get(name + '_spacing')) if _padding is None: _padding = padding else: _padding = [int(Number(v).value) for v in List.from_maybe(_padding)] _padding = (_padding * 4)[:4] all_paddings.append(_padding) _dst_colors = kwargs.get(name + '_dst_color') if _dst_colors is None: _dst_colors = dst_colors if dst_colors: has_dst_colors = True else: has_dst_colors = True _dst_colors = [list(Color(v).value[:3]) for v in List.from_maybe(_dst_colors) if v] _src_colors = kwargs.get(name + '_src_color', Color.from_name('black')) if _src_colors is None: _src_colors = src_colors else: _src_colors = [tuple(Color(v).value[:3]) for v in List.from_maybe(_src_colors)] _len_colors = max(len(_dst_colors), len(_src_colors)) _dst_colors = (_dst_colors * _len_colors)[:_len_colors] _src_colors = (_src_colors * _len_colors)[:_len_colors] all_dst_colors.append(_dst_colors) all_src_colors.append(_src_colors) sizes = tuple((collapse_x or i.size[0], collapse_y or i.size[1]) for i in images()) if direction == 'horizontal': layout = HorizontalSpritesLayout(sizes, all_paddings, position=all_positions) elif direction == 'vertical': layout = VerticalSpritesLayout(sizes, all_paddings, position=all_positions) elif direction == 'diagonal': layout = DiagonalSpritesLayout(sizes, all_paddings) elif direction == 'smart': layout = PackedSpritesLayout(sizes, all_paddings) else: raise Exception("Invalid direction %r" % (direction,)) layout_positions = list(layout) new_image = Image.new( mode='RGBA', size=(layout.width, layout.height), color=(0, 0, 0, 0) ) useless_dst_color = has_dst_colors offsets_x = [] offsets_y = [] for i, image in enumerate(images()): x, y, width, height, cssx, cssy, cssw, cssh = layout_positions[i] iwidth, iheight = image.size if has_dst_colors: pixdata = image.load() for _y in xrange(iheight): for _x in xrange(iwidth): pixel = pixdata[_x, _y] a = pixel[3] if len(pixel) == 4 else 255 if a: rgb = pixel[:3] for j, dst_color in enumerate(all_dst_colors[i]): if rgb == all_src_colors[i][j]: new_color = tuple([int(c) for c in dst_color] + [a]) if pixel != new_color: pixdata[_x, _y] = new_color useless_dst_color = False break if iwidth != width or iheight != height: cy = 0 while cy < iheight: cx = 0 while cx < iwidth: new_image = alpha_composite(new_image, image, (x, y), (cx, cy, cx + width, cy + height)) cx += width cy += height else: new_image.paste(image, (x, y)) offsets_x.append(cssx) offsets_y.append(cssy) if useless_dst_color: log.warning("Useless use of $dst-color in sprite map for files at '%s' (never used for)" % glob_path) filetime = int(now_time) if not inline: try: new_image.save(asset_path) url = '%s%s' % (config.ASSETS_URL, asset_file) if cache_buster: url += '?_=%s' % filetime except IOError: log.exception("Error while saving image") inline = True if inline: output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() mime_type = 'image/png' url = make_data_url(mime_type, contents) url = 'url(%s)' % escape(url) if inline: asset = inline_asset = List([String.unquoted(url), String.unquoted(repeat)]) else: asset = file_asset = List([String.unquoted(url), String.unquoted(repeat)]) # Add the new object: sprite_map = dict(zip(tnames, zip(sizes, rfiles, offsets_x, offsets_y))) sprite_map['*'] = now_time sprite_map['*f*'] = asset_file sprite_map['*k*'] = key sprite_map['*n*'] = map_name sprite_map['*t*'] = filetime sizes = zip(files, sizes) cache_tmp = tempfile.NamedTemporaryFile(delete=False, dir=ASSETS_ROOT) pickle.dump((now_time, file_asset, inline_asset, sprite_map, sizes), cache_tmp) cache_tmp.close() if sys.platform == 'win32' and os.path.isfile(cache_path): # on windows, cannot rename a file to a path that matches # an existing file, we have to remove it first os.remove(cache_path) os.rename(cache_tmp.name, cache_path) # Use the sorted list to remove older elements (keep only 500 objects): if len(sprite_maps) > MAX_SPRITE_MAPS: for a in sorted(sprite_maps, key=lambda a: sprite_maps[a]['*'], reverse=True)[KEEP_SPRITE_MAPS:]: del sprite_maps[a] log.warning("Exceeded maximum number of sprite maps (%s)" % MAX_SPRITE_MAPS) sprite_maps[asset.render()] = sprite_map image_size_cache = _get_cache('image_size_cache') for file_, size in sizes: image_size_cache[file_] = size # TODO this sometimes returns an empty list, or is never assigned to return asset @ns.declare def sprite_map_name(map): """ Returns the name of a sprite map The name is derived from the folder than contains the sprites. """ map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) if sprite_map: return String.unquoted(sprite_map['*n*']) return String.unquoted('') @ns.declare def sprite_file(map, sprite): """ Returns the relative path (from the images directory) to the original file used when construction the sprite. This is suitable for passing to the image_width and image_height helpers. """ map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) sprite_name = String.unquoted(sprite).value sprite = sprite_map and sprite_map.get(sprite_name) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) elif not sprite: log.error("No sprite found: %s in %s", sprite_name, sprite_map['*n*'], extra={'stack': True}) if sprite: return String(sprite[1][0]) return String.unquoted('') @ns.declare_alias('sprite-names') @ns.declare def sprites(map, remove_suffix=False): map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map, {}) return List([String.unquoted(s) for s in sorted(set(s.rsplit('-', 1)[0] if remove_suffix else s for s in sprite_map if not s.startswith('*')))]) @ns.declare def sprite_classes(map): return sprites(map, True) @ns.declare def sprite(map, sprite, offset_x=None, offset_y=None, cache_buster=True): """ Returns the image and background position for use in a single shorthand property """ map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) sprite_name = String.unquoted(sprite).value sprite = sprite_map and sprite_map.get(sprite_name) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) elif not sprite: log.error("No sprite found: %s in %s", sprite_name, sprite_map['*n*'], extra={'stack': True}) if sprite: url = '%s%s' % (config.ASSETS_URL, sprite_map['*f*']) if cache_buster: url += '?_=%s' % sprite_map['*t*'] x = Number(offset_x or 0, 'px') y = Number(offset_y or 0, 'px') if not x.value or (x.value <= -1 or x.value >= 1) and not x.is_simple_unit('%'): x -= Number(sprite[2], 'px') if not y.value or (y.value <= -1 or y.value >= 1) and not y.is_simple_unit('%'): y -= Number(sprite[3], 'px') url = "url(%s)" % escape(url) return List([String.unquoted(url), x, y]) return List([Number(0), Number(0)]) @ns.declare def sprite_url(map, cache_buster=True): """ Returns a url to the sprite image. """ map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) if sprite_map: url = '%s%s' % (config.ASSETS_URL, sprite_map['*f*']) if cache_buster: url += '?_=%s' % sprite_map['*t*'] url = "url(%s)" % escape(url) return String.unquoted(url) return String.unquoted('') @ns.declare def has_sprite(map, sprite): map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) sprite_name = String.unquoted(sprite).value sprite = sprite_map and sprite_map.get(sprite_name) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) return Boolean(bool(sprite)) @ns.declare def sprite_position(map, sprite, offset_x=None, offset_y=None): """ Returns the position for the original image in the sprite. This is suitable for use as a value to background-position. """ map = map.render() sprite_maps = _get_cache('sprite_maps') sprite_map = sprite_maps.get(map) sprite_name = String.unquoted(sprite).value sprite = sprite_map and sprite_map.get(sprite_name) if not sprite_map: log.error("No sprite map found: %s", map, extra={'stack': True}) elif not sprite: log.error("No sprite found: %s in %s", sprite_name, sprite_map['*n*'], extra={'stack': True}) if sprite: x = None if offset_x is not None and not isinstance(offset_x, Number): x = offset_x if not x or x.value not in ('left', 'right', 'center'): if x: offset_x = None x = Number(offset_x or 0, 'px') if not x.value or (x.value <= -1 or x.value >= 1) and not x.is_simple_unit('%'): x -= Number(sprite[2], 'px') y = None if offset_y is not None and not isinstance(offset_y, Number): y = offset_y if not y or y.value not in ('top', 'bottom', 'center'): if y: offset_y = None y = Number(offset_y or 0, 'px') if not y.value or (y.value <= -1 or y.value >= 1) and not y.is_simple_unit('%'): y -= Number(sprite[3], 'px') return List([x, y]) return List([Number(0), Number(0)]) pyScss-1.4.0/scss/extension/core.py000066400000000000000000000611741420542636400173100ustar00rootroot00000000000000"""Extension for built-in Sass functionality.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals from itertools import product import math import os.path from pathlib import PurePosixPath from six.moves import xrange from scss.extension import Extension from scss.namespace import Namespace from scss.source import SourceFile from scss.types import ( Arglist, Boolean, Color, List, Null, Number, String, Map, expect_type) class CoreExtension(Extension): name = 'core' namespace = Namespace() def handle_import(self, name, compilation, rule): """Implementation of the core Sass import mechanism, which just looks for files on disk. """ # TODO this is all not terribly well-specified by Sass. at worst, # it's unclear how far "upwards" we should be allowed to go. but i'm # also a little fuzzy on e.g. how relative imports work from within a # file that's not actually in the search path. # TODO i think with the new origin semantics, i've made it possible to # import relative to the current file even if the current file isn't # anywhere in the search path. is that right? path = PurePosixPath(name) search_exts = list(compilation.compiler.dynamic_extensions) if path.suffix and path.suffix in search_exts: basename = path.stem else: basename = path.name relative_to = path.parent search_path = [] # tuple of (origin, start_from) if relative_to.is_absolute(): relative_to = PurePosixPath(*relative_to.parts[1:]) elif rule.source_file.origin: # Search relative to the current file first, only if not doing an # absolute import search_path.append(( rule.source_file.origin, rule.source_file.relpath.parent / relative_to, )) search_path.extend( (origin, relative_to) for origin in compilation.compiler.search_path ) for prefix, suffix in product(('_', ''), search_exts): filename = prefix + basename + suffix for origin, relative_to in search_path: relpath = relative_to / filename # Lexically (ignoring symlinks!) eliminate .. from the part # of the path that exists within Sass-space. pathlib # deliberately doesn't do this, but os.path does. relpath = PurePosixPath(os.path.normpath(str(relpath))) if rule.source_file.key == (origin, relpath): # Avoid self-import # TODO is this what ruby does? continue path = origin / relpath if not path.exists(): continue # All good! # TODO if this file has already been imported, we'll do the # source preparation twice. make it lazy. return SourceFile.read(origin, relpath) # Alias to make the below declarations less noisy ns = CoreExtension.namespace # ------------------------------------------------------------------------------ # Color creation def _interpret_percentage(n, relto=1., clamp=True): expect_type(n, Number, unit='%') if n.is_unitless: ret = n.value / relto else: ret = n.value / 100 if clamp: if ret < 0: return 0 elif ret > 1: return 1 return ret @ns.declare def rgba(r, g, b, a): r = _interpret_percentage(r, relto=255) g = _interpret_percentage(g, relto=255) b = _interpret_percentage(b, relto=255) a = _interpret_percentage(a, relto=1) return Color.from_rgb(r, g, b, a) @ns.declare def rgb(r, g, b, type='rgb'): return rgba(r, g, b, Number(1.0)) @ns.declare def rgba_(color, a=None): if a is None: alpha = 1 else: alpha = _interpret_percentage(a) return Color.from_rgb(*color.rgba[:3], alpha=alpha) @ns.declare def rgb_(color): return rgba_(color, a=Number(1)) @ns.declare def hsla(h, s, l, a): return Color.from_hsl( h.value / 360 % 1, # Ruby sass treats plain numbers for saturation and lightness as though # they were percentages, just without the % _interpret_percentage(s, relto=100), _interpret_percentage(l, relto=100), alpha=a.value, ) @ns.declare def hsl(h, s, l): return hsla(h, s, l, Number(1)) @ns.declare def hsla_(color, a=None): return rgba_(color, a) @ns.declare def hsl_(color): return rgba_(color, a=Number(1)) @ns.declare def mix(color1, color2, weight=Number(50, "%")): """ Mixes together two colors. Specifically, takes the average of each of the RGB components, optionally weighted by the given percentage. The opacity of the colors is also considered when weighting the components. Specifically, takes the average of each of the RGB components, optionally weighted by the given percentage. The opacity of the colors is also considered when weighting the components. The weight specifies the amount of the first color that should be included in the returned color. 50%, means that half the first color and half the second color should be used. 25% means that a quarter of the first color and three quarters of the second color should be used. For example: mix(#f00, #00f) => #7f007f mix(#f00, #00f, 25%) => #3f00bf mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75) """ # This algorithm factors in both the user-provided weight # and the difference between the alpha values of the two colors # to decide how to perform the weighted average of the two RGB values. # # It works by first normalizing both parameters to be within [-1, 1], # where 1 indicates "only use color1", -1 indicates "only use color 0", # and all values in between indicated a proportionately weighted average. # # Once we have the normalized variables w and a, # we apply the formula (w + a)/(1 + w*a) # to get the combined weight (in [-1, 1]) of color1. # This formula has two especially nice properties: # # * When either w or a are -1 or 1, the combined weight is also that # number (cases where w * a == -1 are undefined, and handled as a # special case). # # * When a is 0, the combined weight is w, and vice versa # # Finally, the weight of color1 is renormalized to be within [0, 1] # and the weight of color2 is given by 1 minus the weight of color1. # # Algorithm from the Sass project: http://sass-lang.com/ p = _interpret_percentage(weight) # Scale weight to [-1, 1] w = p * 2 - 1 # Compute difference in alpha channels a = color1.alpha - color2.alpha # Weight of first color if w * a == -1: # Avoid zero-div case scaled_weight1 = w else: scaled_weight1 = (w + a) / (1 + w * a) # Unscale back to [0, 1] and get the weight of the other color w1 = (scaled_weight1 + 1) / 2 w2 = 1 - w1 # Do the scaling. Note that alpha isn't scaled by alpha, as that wouldn't # make much sense; it uses the original untwiddled weight, p. channels = [ ch1 * w1 + ch2 * w2 for (ch1, ch2) in zip(color1.rgba[:3], color2.rgba[:3])] alpha = color1.alpha * p + color2.alpha * (1 - p) return Color.from_rgb(*channels, alpha=alpha) # ------------------------------------------------------------------------------ # Color inspection @ns.declare def red(color): r, g, b, a = color.rgba return Number(r * 255) @ns.declare def green(color): r, g, b, a = color.rgba return Number(g * 255) @ns.declare def blue(color): r, g, b, a = color.rgba return Number(b * 255) @ns.declare_alias('opacity') @ns.declare def alpha(color): return Number(color.alpha) @ns.declare def hue(color): h, s, l = color.hsl return Number(h * 360, "deg") @ns.declare def saturation(color): h, s, l = color.hsl return Number(s * 100, "%") @ns.declare def lightness(color): h, s, l = color.hsl return Number(l * 100, "%") @ns.declare def ie_hex_str(color): c = Color(color).value return String("#{3:02X}{0:02X}{1:02X}{2:02X}".format( int(round(c[0])), int(round(c[1])), int(round(c[2])), int(round(c[3] * 255)), )) # ------------------------------------------------------------------------------ # Color modification @ns.declare_alias('fade-in') @ns.declare_alias('fadein') @ns.declare def opacify(color, amount): r, g, b, a = color.rgba if amount.is_simple_unit('%'): amt = amount.value / 100 else: amt = amount.value return Color.from_rgb( r, g, b, alpha=a + amt) @ns.declare_alias('fade-out') @ns.declare_alias('fadeout') @ns.declare def transparentize(color, amount): r, g, b, a = color.rgba if amount.is_simple_unit('%'): amt = amount.value / 100 else: amt = amount.value return Color.from_rgb( r, g, b, alpha=a - amt) @ns.declare def lighten(color, amount): return adjust_color(color, lightness=amount) @ns.declare def darken(color, amount): return adjust_color(color, lightness=-amount) @ns.declare def saturate(color, amount): return adjust_color(color, saturation=amount) @ns.declare def desaturate(color, amount): return adjust_color(color, saturation=-amount) @ns.declare def greyscale(color): h, s, l = color.hsl return Color.from_hsl(h, 0, l, alpha=color.alpha) @ns.declare def grayscale(color): if isinstance(color, Number): # grayscale(n) and grayscale(n%) are CSS3 filters and should be left # intact, but only when using the "a" spelling return String.unquoted("grayscale(%s)" % (color.render(),)) else: return greyscale(color) @ns.declare_alias('spin') @ns.declare def adjust_hue(color, degrees): h, s, l = color.hsl delta = degrees.value / 360 return Color.from_hsl((h + delta) % 1, s, l, alpha=color.alpha) @ns.declare def complement(color): h, s, l = color.hsl return Color.from_hsl((h + 0.5) % 1, s, l, alpha=color.alpha) @ns.declare def invert(color): """Returns the inverse (negative) of a color. The red, green, and blue values are inverted, while the opacity is left alone. """ if isinstance(color, Number): # invert(n) and invert(n%) are CSS3 filters and should be left # intact return String.unquoted("invert(%s)" % (color.render(),)) expect_type(color, Color) r, g, b, a = color.rgba return Color.from_rgb(1 - r, 1 - g, 1 - b, alpha=a) @ns.declare def adjust_lightness(color, amount): return adjust_color(color, lightness=amount) @ns.declare def adjust_saturation(color, amount): return adjust_color(color, saturation=amount) @ns.declare def scale_lightness(color, amount): return scale_color(color, lightness=amount) @ns.declare def scale_saturation(color, amount): return scale_color(color, saturation=amount) @ns.declare def adjust_color( color, red=None, green=None, blue=None, hue=None, saturation=None, lightness=None, alpha=None): do_rgb = red or green or blue do_hsl = hue or saturation or lightness if do_rgb and do_hsl: raise ValueError( "Can't adjust both RGB and HSL channels at the same time") zero = Number(0) a = color.alpha + (alpha or zero).value if do_rgb: r, g, b = color.rgba[:3] channels = [ current + (adjustment or zero).value / 255 for (current, adjustment) in zip(color.rgba, (red, green, blue))] return Color.from_rgb(*channels, alpha=a) else: h, s, l = color.hsl h = (h + (hue or zero).value / 360) % 1 s += _interpret_percentage(saturation or zero, relto=100, clamp=False) l += _interpret_percentage(lightness or zero, relto=100, clamp=False) return Color.from_hsl(h, s, l, a) def _scale_channel(channel, scaleby): if scaleby is None: return channel expect_type(scaleby, Number) if not scaleby.is_simple_unit('%'): raise ValueError("Expected percentage, got %r" % (scaleby,)) factor = scaleby.value / 100 if factor > 0: # Add x% of the remaining range, up to 1 return channel + (1 - channel) * factor else: # Subtract x% of the existing channel. We add here because the factor # is already negative return channel * (1 + factor) @ns.declare def scale_color( color, red=None, green=None, blue=None, saturation=None, lightness=None, alpha=None): do_rgb = red or green or blue do_hsl = saturation or lightness if do_rgb and do_hsl: raise ValueError( "Can't scale both RGB and HSL channels at the same time") scaled_alpha = _scale_channel(color.alpha, alpha) if do_rgb: channels = [ _scale_channel(channel, scaleby) for channel, scaleby in zip(color.rgba, (red, green, blue))] return Color.from_rgb(*channels, alpha=scaled_alpha) else: channels = [ _scale_channel(channel, scaleby) for channel, scaleby in zip(color.hsl, (None, saturation, lightness))] return Color.from_hsl(*channels, alpha=scaled_alpha) @ns.declare def change_color( color, red=None, green=None, blue=None, hue=None, saturation=None, lightness=None, alpha=None): do_rgb = red or green or blue do_hsl = hue or saturation or lightness if do_rgb and do_hsl: raise ValueError( "Can't change both RGB and HSL channels at the same time") if alpha is None: alpha = color.alpha else: alpha = alpha.value if do_rgb: channels = list(color.rgba[:3]) if red: channels[0] = _interpret_percentage(red, relto=255) if green: channels[1] = _interpret_percentage(green, relto=255) if blue: channels[2] = _interpret_percentage(blue, relto=255) return Color.from_rgb(*channels, alpha=alpha) else: channels = list(color.hsl) if hue: expect_type(hue, Number, unit=None) channels[0] = (hue.value / 360) % 1 # Ruby sass treats plain numbers for saturation and lightness as though # they were percentages, just without the % if saturation: channels[1] = _interpret_percentage(saturation, relto=100) if lightness: channels[2] = _interpret_percentage(lightness, relto=100) return Color.from_hsl(*channels, alpha=alpha) # ------------------------------------------------------------------------------ # String functions @ns.declare_alias('e') @ns.declare_alias('escape') @ns.declare def unquote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, String): return String(arg.value, quotes=None) else: return String(arg.render(), quotes=None) @ns.declare def quote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, String): return String(arg.value, quotes='"') else: return String(arg.render(), quotes='"') @ns.declare def str_length(string): expect_type(string, String) # nb: can't use `len(string)`, because that gives the Sass list length, # which is 1 return Number(len(string.value)) # TODO this and several others should probably also require integers # TODO and assert that the indexes are valid @ns.declare def str_insert(string, insert, index): expect_type(string, String) expect_type(insert, String) expect_type(index, Number, unit=None) py_index = index.to_python_index(len(string.value), check_bounds=False) return String( string.value[:py_index] + insert.value + string.value[py_index:], quotes=string.quotes) @ns.declare def str_index(string, substring): expect_type(string, String) expect_type(substring, String) # 1-based indexing, with 0 for failure return Number(string.value.find(substring.value) + 1) @ns.declare def str_slice(string, start_at, end_at=None): expect_type(string, String) expect_type(start_at, Number, unit=None) if int(start_at) == 0: py_start_at = 0 else: py_start_at = start_at.to_python_index(len(string.value)) if end_at is None or int(end_at) > len(string.value): py_end_at = None else: expect_type(end_at, Number, unit=None) # Endpoint is inclusive, unlike Python py_end_at = end_at.to_python_index(len(string.value)) + 1 return String( string.value[py_start_at:py_end_at], quotes=string.quotes) @ns.declare def to_upper_case(string): expect_type(string, String) return String(string.value.upper(), quotes=string.quotes) @ns.declare def to_lower_case(string): expect_type(string, String) return String(string.value.lower(), quotes=string.quotes) # ------------------------------------------------------------------------------ # Number functions @ns.declare def percentage(value): expect_type(value, Number, unit=None) return value * Number(100, unit='%') ns.set_function('abs', 1, Number.wrap_python_function(abs)) ns.set_function('round', 1, Number.wrap_python_function(round)) ns.set_function('ceil', 1, Number.wrap_python_function(math.ceil)) ns.set_function('floor', 1, Number.wrap_python_function(math.floor)) # ------------------------------------------------------------------------------ # List functions # TODO get the compass bit outta here @ns.declare_alias('-compass-list-size') @ns.declare def length(*lst): if len(lst) == 1 and isinstance(lst[0], (list, tuple, List)): lst = lst[0] return Number(len(lst)) @ns.declare def set_nth(list, n, value): expect_type(n, Number, unit=None) py_n = n.to_python_index(len(list)) return List( tuple(list[:py_n]) + (value,) + tuple(list[py_n + 1:]), use_comma=list.use_comma) # TODO get the compass bit outta here @ns.declare_alias('-compass-nth') @ns.declare def nth(lst, n): """Return the nth item in the list.""" expect_type(n, (String, Number), unit=None) if isinstance(n, String): if n.value.lower() == 'first': i = 0 elif n.value.lower() == 'last': i = -1 else: raise ValueError("Invalid index %r" % (n,)) else: # DEVIATION: nth treats lists as circular lists i = n.to_python_index(len(lst), circular=True) return lst[i] @ns.declare def join(lst1, lst2, separator=String.unquoted('auto')): expect_type(separator, String) ret = [] ret.extend(List.from_maybe(lst1)) ret.extend(List.from_maybe(lst2)) if separator.value == 'comma': use_comma = True elif separator.value == 'space': use_comma = False elif separator.value == 'auto': # The Sass docs are slightly misleading here, but the algorithm is: use # the delimiter from the first list that has at least 2 items, or # default to spaces. if len(lst1) > 1: use_comma = lst1.use_comma elif len(lst2) > 1: use_comma = lst2.use_comma else: use_comma = False else: raise ValueError("separator for join() must be comma, space, or auto") return List(ret, use_comma=use_comma) @ns.declare def min_(*lst): if len(lst) == 1 and isinstance(lst[0], (list, tuple, List)): lst = lst[0] return min(lst) @ns.declare def max_(*lst): if len(lst) == 1 and isinstance(lst[0], (list, tuple, List)): lst = lst[0] return max(lst) @ns.declare def append(lst, val, separator=String.unquoted('auto')): expect_type(separator, String) ret = [] ret.extend(List.from_maybe(lst)) ret.append(val) separator = separator.value if separator == 'comma': use_comma = True elif separator == 'space': use_comma = False elif separator == 'auto': if len(lst) < 2: use_comma = False else: use_comma = lst.use_comma else: raise ValueError('Separator must be auto, comma, or space') return List(ret, use_comma=use_comma) @ns.declare def index(lst, val): for i in xrange(len(lst)): if lst.value[i] == val: return Number(i + 1) return Boolean(False) @ns.declare def zip_(*lists): return List( [List(zipped) for zipped in zip(*lists)], use_comma=True) # TODO need a way to use "list" as the arg name without shadowing the builtin @ns.declare def list_separator(list): if list.use_comma: return String.unquoted('comma') else: return String.unquoted('space') # ------------------------------------------------------------------------------ # Map functions @ns.declare def map_get(map, key): return map.to_dict().get(key, Null()) @ns.declare def map_merge(*maps): key_order = [] index = {} for map in maps: for key, value in map.to_pairs(): if key not in index: key_order.append(key) index[key] = value pairs = [(key, index[key]) for key in key_order] return Map(pairs, index=index) @ns.declare def map_keys(map): return List( [k for (k, v) in map.to_pairs()], use_comma=True) @ns.declare def map_values(map): return List( [v for (k, v) in map.to_pairs()], use_comma=True) @ns.declare def map_has_key(map, key): return Boolean(key in map.to_dict()) # DEVIATIONS: these do not exist in ruby sass @ns.declare def map_get3(map, key, default): return map.to_dict().get(key, default) @ns.declare def map_get_nested3(map, keys, default=Null()): for key in keys: map = map.to_dict().get(key, None) if map is None: return default return map @ns.declare def map_merge_deep(*maps): pairs = [] keys = set() for map in maps: for key, value in map.to_pairs(): keys.add(key) for key in keys: values = [map.to_dict().get(key, None) for map in maps] values = [v for v in values if v is not None] if all(isinstance(v, Map) for v in values): pairs.append((key, map_merge_deep(*values))) else: pairs.append((key, values[-1])) return Map(pairs) @ns.declare def keywords(value): """Extract named arguments, as a map, from an argument list.""" expect_type(value, Arglist) return value.extract_keywords() # ------------------------------------------------------------------------------ # Introspection functions # TODO feature-exists @ns.declare_internal def variable_exists(namespace, name): expect_type(name, String) try: namespace.variable('$' + name.value) except KeyError: return Boolean(False) else: return Boolean(True) @ns.declare_internal def global_variable_exists(namespace, name): expect_type(name, String) # TODO this is... imperfect and invasive, but should be a good # approximation scope = namespace._variables while len(scope.maps) > 1: scope = scope.maps[-1] try: scope['$' + name.value] except KeyError: return Boolean(False) else: return Boolean(True) @ns.declare_internal def function_exists(namespace, name): expect_type(name, String) # TODO invasive, but there's no other way to ask for this at the moment for fname, arity in namespace._functions.keys(): if name.value == fname: return Boolean(True) return Boolean(False) @ns.declare_internal def mixin_exists(namespace, name): expect_type(name, String) # TODO invasive, but there's no other way to ask for this at the moment for fname, arity in namespace._mixins.keys(): if name.value == fname: return Boolean(True) return Boolean(False) @ns.declare def inspect(value): return String.unquoted(value.render()) @ns.declare def type_of(obj): # -> bool, number, string, color, list return String(obj.sass_type_name) @ns.declare def unit(number): # -> px, em, cm, etc. numer = '*'.join(sorted(number.unit_numer)) denom = '*'.join(sorted(number.unit_denom)) if denom: ret = numer + '/' + denom else: ret = numer return String.unquoted(ret) @ns.declare def unitless(value): if not isinstance(value, Number): raise TypeError("Expected number, got %r" % (value,)) return Boolean(value.is_unitless) @ns.declare def comparable(number1, number2): left = number1.to_base_units() right = number2.to_base_units() return Boolean( left.unit_numer == right.unit_numer and left.unit_denom == right.unit_denom) # TODO call pyScss-1.4.0/scss/extension/extra.py000066400000000000000000000401201420542636400174670ustar00rootroot00000000000000"""Functions new to the pyScss library.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import logging import os.path import random import six from six.moves import xrange from scss import config from scss.errors import SassMissingDependency from scss.extension import Extension from scss.namespace import Namespace from scss.types import Color, Number, String, List from scss.util import escape, make_data_url, make_filename_hash try: from PIL import Image, ImageDraw except ImportError: try: import Image import ImageDraw except ImportError: Image = None ImageDraw = None log = logging.getLogger(__name__) class ExtraExtension(Extension): """Extra functions unique to the pyScss library.""" name = 'extra' namespace = Namespace() # Alias to make the below declarations less noisy ns = ExtraExtension.namespace # ------------------------------------------------------------------------------ # Image stuff def _image_noise(pixdata, size, density=None, intensity=None, color=None, opacity=None, monochrome=None, background=None): if not density: density = [0.8] elif not isinstance(density, (tuple, list)): density = [density] if not intensity: intensity = [0.5] elif not isinstance(intensity, (tuple, list)): intensity = [intensity] if not color: color = [(0, 0, 0, 0)] elif not isinstance(color, (tuple, list)) or not isinstance(color[0], (tuple, list)): color = [color] if not opacity: opacity = [0.2] elif not isinstance(opacity, (tuple, list)): opacity = [opacity] if not monochrome: monochrome = [False] elif not isinstance(monochrome, (tuple, list)): monochrome = [monochrome] pixels = {} if background: for y in xrange(size): for x in xrange(size): ca = float(background[3]) pixels[(x, y)] = (background[0] * ca, background[1] * ca, background[2] * ca, ca) loops = max(map(len, (density, intensity, color, opacity, monochrome))) for l in range(loops): _density = density[l % len(density)] _intensity = intensity[l % len(intensity)] _color = color[l % len(color)] _opacity = opacity[l % len(opacity)] _monochrome = monochrome[l % len(monochrome)] _intensity = 1 - _intensity if _intensity < 0.5: cx = 255 * _intensity cm = cx else: cx = 255 * (1 - _intensity) cm = 255 * _intensity xa = int(cm - cx) xb = int(cm + cx) if xa > 0: xa &= 255 else: xa = 0 if xb > 0: xb &= 255 else: xb = 0 r, g, b, a = _color for i in xrange(int(round(_density * size ** 2))): x = random.randint(1, size) y = random.randint(1, size) cc = random.randint(xa, xb) cr = (cc) * (1 - a) + a * r cg = (cc if _monochrome else random.randint(xa, xb)) * (1 - a) + a * g cb = (cc if _monochrome else random.randint(xa, xb)) * (1 - a) + a * b ca = random.random() * _opacity ica = 1 - ca pos = (x - 1, y - 1) dst = pixels.get(pos, (0, 0, 0, 0)) src = (cr * ca, cg * ca, cb * ca, ca) pixels[pos] = (src[0] + dst[0] * ica, src[1] + dst[1] * ica, src[2] + dst[2] * ica, src[3] + dst[3] * ica) for pos, col in pixels.items(): ca = col[3] if ca: pixdata[pos] = tuple(int(round(c)) for c in (col[0] / ca, col[1] / ca, col[2] / ca, ca * 255)) def _image_brushed(pixdata, size, density=None, intensity=None, color=None, opacity=None, monochrome=None, direction=None, spread=None, background=None): if not density: density = [0.8] elif not isinstance(density, (tuple, list)): density = [density] if not intensity: intensity = [0.5] elif not isinstance(intensity, (tuple, list)): intensity = [intensity] if not color: color = [(0, 0, 0, 0)] elif not isinstance(color, (tuple, list)) or not isinstance(color[0], (tuple, list)): color = [color] if not opacity: opacity = [0.2] elif not isinstance(opacity, (tuple, list)): opacity = [opacity] if not monochrome: monochrome = [False] elif not isinstance(monochrome, (tuple, list)): monochrome = [monochrome] if not direction: direction = [0] elif not isinstance(direction, (tuple, list)): direction = [direction] if not spread: spread = [0] elif not isinstance(spread, (tuple, list)): spread = [spread] def ppgen(d): if d is None: return d = d % 4 if d == 0: pp = lambda x, y, o: ((x - o) % size, y) elif d == 1: pp = lambda x, y, o: ((x - o) % size, (y + x - o) % size) elif d == 2: pp = lambda x, y, o: (y, (x - o) % size) else: pp = lambda x, y, o: ((x - o) % size, (y - x - o) % size) return pp pixels = {} if background: for y in xrange(size): for x in xrange(size): ca = float(background[3]) pixels[(x, y)] = (background[0] * ca, background[1] * ca, background[2] * ca, ca) loops = max(map(len, (density, intensity, color, opacity, monochrome, direction, spread))) for l in range(loops): _density = density[l % len(density)] _intensity = intensity[l % len(intensity)] _color = color[l % len(color)] _opacity = opacity[l % len(opacity)] _monochrome = monochrome[l % len(monochrome)] _direction = direction[l % len(direction)] _spread = spread[l % len(spread)] _intensity = 1 - _intensity if _intensity < 0.5: cx = 255 * _intensity cm = cx else: cx = 255 * (1 - _intensity) cm = 255 * _intensity xa = int(cm - cx) xb = int(cm + cx) if xa > 0: xa &= 255 else: xa = 0 if xb > 0: xb &= 255 else: xb = 0 r, g, b, a = _color pp = ppgen(_direction) if pp: for y in xrange(size): if _spread and (y + (l % 2)) % _spread: continue o = random.randint(1, size) cc = random.randint(xa, xb) cr = (cc) * (1 - a) + a * r cg = (cc if _monochrome else random.randint(xa, xb)) * (1 - a) + a * g cb = (cc if _monochrome else random.randint(xa, xb)) * (1 - a) + a * b da = random.randint(0, 255) * _opacity ip = round((size / 2.0 * _density) / int(1 / _density)) iq = round((size / 2.0 * (1 - _density)) / int(1 / _density)) if ip: i = da / ip aa = 0 else: i = 0 aa = da d = 0 p = ip for x in xrange(size): if d == 0: if p > 0: p -= 1 aa += i else: d = 1 q = iq elif d == 1: if q > 0: q -= 1 else: d = 2 p = ip elif d == 2: if p > 0: p -= 1 aa -= i else: d = 3 q = iq elif d == 3: if q > 0: q -= 1 else: d = 0 p = ip if aa > 0: ca = aa / 255.0 else: ca = 0.0 ica = 1 - ca pos = pp(x, y, o) dst = pixels.get(pos, (0, 0, 0, 0)) src = (cr * ca, cg * ca, cb * ca, ca) pixels[pos] = (src[0] + dst[0] * ica, src[1] + dst[1] * ica, src[2] + dst[2] * ica, src[3] + dst[3] * ica) for pos, col in pixels.items(): ca = col[3] if ca: pixdata[pos] = tuple(int(round(c)) for c in (col[0] / ca, col[1] / ca, col[2] / ca, ca * 255)) @ns.declare def background_noise(density=None, opacity=None, size=None, monochrome=False, intensity=(), color=None, background=None, inline=False): if not Image: raise SassMissingDependency('PIL', 'image manipulation') density = [Number(v).value for v in List.from_maybe(density)] intensity = [Number(v).value for v in List.from_maybe(intensity)] color = [Color(v).value for v in List.from_maybe(color) if v] opacity = [Number(v).value for v in List.from_maybe(opacity)] size = int(Number(size).value) if size else 0 if size < 1 or size > 512: size = 200 monochrome = bool(monochrome) background = Color(background).value if background else None new_image = Image.new( mode='RGBA', size=(size, size) ) pixdata = new_image.load() _image_noise(pixdata, size, density, intensity, color, opacity, monochrome) if not inline: key = (size, density, intensity, color, opacity, monochrome) asset_file = 'noise-%s%sx%s' % ('mono-' if monochrome else '', size, size) # asset_file += '-[%s][%s]' % ('-'.join(to_str(s).replace('.', '_') for s in density or []), '-'.join(to_str(s).replace('.', '_') for s in opacity or [])) asset_file += '-' + make_filename_hash(key) asset_file += '.png' asset_path = os.path.join(config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets'), asset_file) try: new_image.save(asset_path) except IOError: log.exception("Error while saving image") inline = True # Retry inline version url = '%s%s' % (config.ASSETS_URL, asset_file) if inline: output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() url = make_data_url('image/png', contents) inline = 'url("%s")' % escape(url) return String.unquoted(inline) @ns.declare def background_brushed(density=None, intensity=None, color=None, opacity=None, size=None, monochrome=False, direction=(), spread=(), background=None, inline=False): if not Image: raise SassMissingDependency('PIL', 'image manipulation') density = [Number(v).value for v in List.from_maybe(density)] intensity = [Number(v).value for v in List.from_maybe(intensity)] color = [Color(v).value for v in List.from_maybe(color) if v] opacity = [Number(v).value for v in List.from_maybe(opacity)] size = int(Number(size).value) if size else -1 if size < 0 or size > 512: size = 200 monochrome = bool(monochrome) direction = [Number(v).value for v in List.from_maybe(direction)] spread = [Number(v).value for v in List.from_maybe(spread)] background = Color(background).value if background else None new_image = Image.new( mode='RGBA', size=(size, size) ) pixdata = new_image.load() _image_brushed(pixdata, size, density, intensity, color, opacity, monochrome, direction, spread, background) if not inline: key = (size, density, intensity, color, opacity, monochrome, direction, spread, background) asset_file = 'brushed-%s%sx%s' % ('mono-' if monochrome else '', size, size) # asset_file += '-[%s][%s][%s]' % ('-'.join(to_str(s).replace('.', '_') for s in density or []), '-'.join(to_str(s).replace('.', '_') for s in opacity or []), '-'.join(to_str(s).replace('.', '_') for s in direction or [])) asset_file += '-' + make_filename_hash(key) asset_file += '.png' asset_path = os.path.join(config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets'), asset_file) try: new_image.save(asset_path) except IOError: log.exception("Error while saving image") inline = True # Retry inline version url = '%s%s' % (config.ASSETS_URL, asset_file) if inline: output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() url = make_data_url('image/png', contents) inline = 'url("%s")' % escape(url) return String.unquoted(inline) @ns.declare def grid_image(left_gutter, width, right_gutter, height, columns=1, grid_color=None, baseline_color=None, background_color=None, inline=False): if not Image: raise SassMissingDependency('PIL', 'image manipulation') if grid_color is None: grid_color = (120, 170, 250, 15) else: c = Color(grid_color).value grid_color = (c[0], c[1], c[2], int(c[3] * 255.0)) if baseline_color is None: baseline_color = (120, 170, 250, 30) else: c = Color(baseline_color).value baseline_color = (c[0], c[1], c[2], int(c[3] * 255.0)) if background_color is None: background_color = (0, 0, 0, 0) else: c = Color(background_color).value background_color = (c[0], c[1], c[2], int(c[3] * 255.0)) _height = int(height) if height >= 1 else int(height * 1000.0) _width = int(width) if width >= 1 else int(width * 1000.0) _left_gutter = int(left_gutter) if left_gutter >= 1 else int(left_gutter * 1000.0) _right_gutter = int(right_gutter) if right_gutter >= 1 else int(right_gutter * 1000.0) if _height <= 0 or _width <= 0 or _left_gutter <= 0 or _right_gutter <= 0: raise ValueError _full_width = (_left_gutter + _width + _right_gutter) new_image = Image.new( mode='RGBA', size=(_full_width * int(columns), _height), color=background_color ) draw = ImageDraw.Draw(new_image) for i in range(int(columns)): draw.rectangle((i * _full_width + _left_gutter, 0, i * _full_width + _left_gutter + _width - 1, _height - 1), fill=grid_color) if _height > 1: draw.rectangle((0, _height - 1, _full_width * int(columns) - 1, _height - 1), fill=baseline_color) if not inline: grid_name = 'grid_' if left_gutter: grid_name += str(int(left_gutter)) + '+' grid_name += str(int(width)) if right_gutter: grid_name += '+' + str(int(right_gutter)) if height and height > 1: grid_name += 'x' + str(int(height)) key = (columns, grid_color, baseline_color, background_color) key = grid_name + '-' + make_filename_hash(key) asset_file = key + '.png' asset_path = os.path.join(config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets'), asset_file) try: new_image.save(asset_path) except IOError: log.exception("Error while saving image") inline = True # Retry inline version url = '%s%s' % (config.ASSETS_URL, asset_file) if inline: output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() url = make_data_url('image/png', contents) inline = 'url("%s")' % escape(url) return String.unquoted(inline) @ns.declare def image_color(color, width=1, height=1): if not Image: raise SassMissingDependency('PIL', 'image manipulation') w = int(Number(width).value) h = int(Number(height).value) if w <= 0 or h <= 0: raise ValueError new_image = Image.new( mode='RGB' if color.alpha == 1 else 'RGBA', size=(w, h), color=color.rgba255, ) output = six.BytesIO() new_image.save(output, format='PNG') contents = output.getvalue() output.close() url = make_data_url('image/png', contents) inline = 'url("%s")' % escape(url) return String.unquoted(inline) pyScss-1.4.0/scss/extension/fonts.py000066400000000000000000000414311420542636400175030ustar00rootroot00000000000000"""Functions used for generating custom fonts from SVG files.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import re import errno import glob import logging import os import time import tempfile import subprocess import warnings import six try: import cPickle as pickle except ImportError: import pickle try: import fontforge except: fontforge = None from scss import config from scss.errors import SassMissingDependency from scss.extension import Extension from scss.namespace import Namespace from scss.types import Boolean, List, String, Url from scss.util import getmtime, make_data_url, make_filename_hash from scss.extension import Cache log = logging.getLogger(__name__) TTFAUTOHINT_EXECUTABLE = 'ttfautohint' TTF2EOT_EXECUTABLE = 'ttf2eot' MAX_FONT_SHEETS = 4096 KEEP_FONT_SHEETS = int(MAX_FONT_SHEETS * 0.8) FONT_TYPES = ('eot', 'woff', 'ttf', 'svg') # eot should be first for IE support FONT_MIME_TYPES = { 'ttf': 'application/x-font-ttf', 'svg': 'image/svg+xml', 'woff': 'application/x-font-woff', 'eot': 'application/vnd.ms-fontobject', } FONT_FORMATS = { 'ttf': "format('truetype')", 'svg': "format('svg')", 'woff': "format('woff')", 'eot': "format('embedded-opentype')", } GLYPH_WIDTH_RE = re.compile(r'width="(\d+(\.\d+)?)') GLYPH_HEIGHT_RE = re.compile(r'height="(\d+(\.\d+)?)') GLYPH_HEIGHT = 512 GLYPH_ASCENT = 448 GLYPH_DESCENT = GLYPH_HEIGHT - GLYPH_ASCENT GLYPH_WIDTH = GLYPH_HEIGHT # Offset to work around Chrome Windows bug GLYPH_START = 0xf100 class FontsExtension(Extension): """Functions for creating and manipulating fonts.""" name = 'fonts' namespace = Namespace() # Alias to make the below declarations less noisy ns = FontsExtension.namespace def _assets_root(): return config.ASSETS_ROOT or os.path.join(config.STATIC_ROOT, 'assets') def _get_cache(prefix): return Cache((config.CACHE_ROOT or _assets_root(), prefix)) def ttfautohint(ttf): try: proc = subprocess.Popen( [TTFAUTOHINT_EXECUTABLE, '--hinting-limit=200', '--hinting-range-max=50', '--symbol'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, ) except OSError as e: if e.errno in (errno.EACCES, errno.ENOENT): warnings.warn('Could not autohint ttf font: The executable %s could not be run: %s' % (TTFAUTOHINT_EXECUTABLE, e)) return None else: raise e output, output_err = proc.communicate(ttf) if proc.returncode != 0: warnings.warn("Could not autohint ttf font: Unknown error!") return None return output def ttf2eot(ttf): try: proc = subprocess.Popen( [TTF2EOT_EXECUTABLE], stdin=subprocess.PIPE, stdout=subprocess.PIPE, ) except OSError as e: if e.errno in (errno.EACCES, errno.ENOENT): warnings.warn('Could not generate eot font: The executable %s could not be run: %s' % (TTF2EOT_EXECUTABLE, e)) return None else: raise e output, output_err = proc.communicate(ttf) if proc.returncode != 0: warnings.warn("Could not generate eot font: Unknown error!") return None return output @ns.declare def font_sheet(g, **kwargs): if not fontforge: raise SassMissingDependency('fontforge', 'font manipulation') font_sheets = _get_cache('font_sheets') now_time = time.time() globs = String(g, quotes=None).value globs = sorted(g.strip() for g in globs.split(',')) _k_ = ','.join(globs) files = None rfiles = None tfiles = None base_name = None glob_path = None glyph_name = None if _k_ in font_sheets: font_sheets[_k_]['*'] = now_time else: files = [] rfiles = [] tfiles = [] for _glob in globs: if '..' not in _glob: # Protect against going to prohibited places... if callable(config.STATIC_ROOT): _glob_path = _glob _rfiles = _files = sorted(config.STATIC_ROOT(_glob)) else: _glob_path = os.path.join(config.STATIC_ROOT, _glob) _files = glob.glob(_glob_path) _files = sorted((f, None) for f in _files) _rfiles = [(rf[len(config.STATIC_ROOT):], s) for rf, s in _files] if _files: files.extend(_files) rfiles.extend(_rfiles) base_name = os.path.basename(os.path.dirname(_glob)) _glyph_name, _, _glyph_type = base_name.partition('.') if _glyph_type: _glyph_type += '-' if not glyph_name: glyph_name = _glyph_name tfiles.extend([_glyph_type] * len(_files)) else: glob_path = _glob_path if files is not None: if not files: log.error("Nothing found at '%s'", glob_path) return String.unquoted('') key = [f for (f, s) in files] + [repr(kwargs), config.ASSETS_URL] key = glyph_name + '-' + make_filename_hash(key) asset_files = { 'eot': key + '.eot', 'woff': key + '.woff', 'ttf': key + '.ttf', 'svg': key + '.svg', } ASSETS_ROOT = _assets_root() asset_paths = dict((type_, os.path.join(ASSETS_ROOT, asset_file)) for type_, asset_file in asset_files.items()) cache_path = os.path.join(config.CACHE_ROOT or ASSETS_ROOT, key + '.cache') inline = Boolean(kwargs.get('inline', False)) font_sheet = None asset = None file_assets = {} inline_assets = {} if all(os.path.exists(asset_path) for asset_path in asset_paths.values()) or inline: try: save_time, file_assets, inline_assets, font_sheet, codepoints = pickle.load(open(cache_path)) if file_assets: file_asset = List([file_asset for file_asset in file_assets.values()], separator=",") font_sheets[file_asset.render()] = font_sheet if inline_assets: inline_asset = List([inline_asset for inline_asset in inline_assets.values()], separator=",") font_sheets[inline_asset.render()] = font_sheet if inline: asset = inline_asset else: asset = file_asset except: pass if font_sheet: for file_, storage in files: _time = getmtime(file_, storage) if save_time < _time: if _time > now_time: log.warning("File '%s' has a date in the future (cache ignored)" % file_) font_sheet = None # Invalidate cached custom font break if font_sheet is None or asset is None: cache_buster = Boolean(kwargs.get('cache_buster', True)) autowidth = Boolean(kwargs.get('autowidth', False)) autohint = Boolean(kwargs.get('autohint', True)) font = fontforge.font() font.encoding = 'UnicodeFull' font.design_size = 16 font.em = GLYPH_HEIGHT font.ascent = GLYPH_ASCENT font.descent = GLYPH_DESCENT font.fontname = glyph_name font.familyname = glyph_name font.fullname = glyph_name def glyphs(f=lambda x: x): for file_, storage in f(files): if storage is not None: _file = storage.open(file_) else: _file = open(file_) svgtext = _file.read() svgtext = svgtext.replace('', '') svgtext = svgtext.replace('', '') svgtext = svgtext.replace('', '') m = GLYPH_WIDTH_RE.search(svgtext) if m: width = float(m.group(1)) else: width = None m = GLYPH_HEIGHT_RE.search(svgtext) if m: height = float(m.group(1)) else: height = None _glyph = tempfile.NamedTemporaryFile(delete=False, suffix=".svg", mode='w') _glyph.file.write(svgtext) _glyph.file.close() yield _glyph.name, width, height names = tuple(os.path.splitext(os.path.basename(file_))[0] for file_, storage in files) tnames = tuple(tfiles[i] + n for i, n in enumerate(names)) codepoints = [] for i, (glyph_filename, glyph_width, glyph_height) in enumerate(glyphs()): if glyph_height and glyph_height != GLYPH_HEIGHT: warnings.warn("Glyphs should be %spx-high" % GLYPH_HEIGHT) codepoint = i + GLYPH_START name = names[i] codepoints.append(codepoint) glyph = font.createChar(codepoint, name) glyph.importOutlines(glyph_filename) os.unlink(glyph_filename) glyph.width = glyph_width or GLYPH_WIDTH if autowidth: # Autowidth removes side bearings glyph.left_side_bearing = glyph.right_side_bearing = 0 glyph.round() filetime = int(now_time) # Generate font files if not inline: urls = {} for type_ in reversed(FONT_TYPES): asset_path = asset_paths[type_] try: if type_ == 'eot': ttf_path = asset_paths['ttf'] with open(ttf_path, 'rb') as ttf_fh: contents = ttf2eot(ttf_fh.read()) if contents is not None: with open(asset_path, 'wb') as asset_fh: asset_fh.write(contents) else: font.generate(asset_path) if type_ == 'ttf': contents = None if autohint: with open(asset_path, 'rb') as asset_fh: contents = ttfautohint(asset_fh.read()) if contents is not None: with open(asset_path, 'wb') as asset_fh: asset_fh.write(contents) asset_file = asset_files[type_] url = '%s%s' % (config.ASSETS_URL, asset_file) params = [] if not urls: params.append('#iefix') if cache_buster: params.append('v=%s' % filetime) if type_ == 'svg': params.append('#' + glyph_name) if params: url += '?' + '&'.join(params) urls[type_] = url except IOError: inline = False if inline: urls = {} for type_ in reversed(FONT_TYPES): contents = None if type_ == 'eot': ttf_path = asset_paths['ttf'] with open(ttf_path, 'rb') as ttf_fh: contents = ttf2eot(ttf_fh.read()) if contents is None: continue else: _tmp = tempfile.NamedTemporaryFile(delete=False, suffix='.' + type_) _tmp.file.close() font.generate(_tmp.name) with open(_tmp.name, 'rb') as asset_fh: if autohint: if type_ == 'ttf': _contents = asset_fh.read() contents = ttfautohint(_contents) if contents is None: contents = _contents os.unlink(_tmp.name) mime_type = FONT_MIME_TYPES[type_] url = make_data_url(mime_type, contents) urls[type_] = url assets = {} for type_, url in urls.items(): format_ = FONT_FORMATS[type_] if inline: assets[type_] = inline_assets[type_] = List([Url.unquoted(url), String.unquoted(format_)]) else: assets[type_] = file_assets[type_] = List([Url.unquoted(url), String.unquoted(format_)]) asset = List([assets[type_] for type_ in FONT_TYPES if type_ in assets], separator=",") # Add the new object: font_sheet = dict(zip(tnames, zip(rfiles, codepoints))) font_sheet['*'] = now_time font_sheet['*f*'] = asset_files font_sheet['*k*'] = key font_sheet['*n*'] = glyph_name font_sheet['*t*'] = filetime codepoints = zip(files, codepoints) cache_tmp = tempfile.NamedTemporaryFile(delete=False, dir=ASSETS_ROOT) pickle.dump((now_time, file_assets, inline_assets, font_sheet, codepoints), cache_tmp) cache_tmp.close() os.rename(cache_tmp.name, cache_path) # Use the sorted list to remove older elements (keep only 500 objects): if len(font_sheets) > MAX_FONT_SHEETS: for a in sorted(font_sheets, key=lambda a: font_sheets[a]['*'], reverse=True)[KEEP_FONT_SHEETS:]: del font_sheets[a] log.warning("Exceeded maximum number of font sheets (%s)" % MAX_FONT_SHEETS) font_sheets[asset.render()] = font_sheet font_sheet_cache = _get_cache('font_sheet_cache') for file_, codepoint in codepoints: font_sheet_cache[file_] = codepoint # TODO this sometimes returns an empty list, or is never assigned to return asset @ns.declare_alias('glyph-names') @ns.declare def glyphs(sheet, remove_suffix=False): sheet = sheet.render() font_sheets = _get_cache('font_sheets') font_sheet = font_sheets.get(sheet, {}) return List([String.unquoted(f) for f in sorted(set(f.rsplit('-', 1)[0] if remove_suffix else f for f in font_sheet if not f.startswith('*')))]) @ns.declare def glyph_classes(sheet): return glyphs(sheet, True) @ns.declare def font_url(sheet, type_, only_path=False, cache_buster=True): font_sheets = _get_cache('font_sheets') font_sheet = font_sheets.get(sheet.render()) type_ = String.unquoted(type_).render() if font_sheet: asset_files = font_sheet['*f*'] asset_file = asset_files.get(type_) if asset_file: url = '%s%s' % (config.ASSETS_URL, asset_file) params = [] # if type_ == 'eot': # params.append('#iefix') if cache_buster: params.append('v=%s' % font_sheet['*t*']) if type_ == 'svg': params.append('#' + font_sheet['*n*']) if params: url += '?' + '&'.join(params) if only_path: return String.unquoted(url) else: return Url.unquoted(url) return String.unquoted('') @ns.declare def font_format(type_): type_ = type_.render() if type_ in FONT_FORMATS: return String.unquoted(FONT_FORMATS[type_]) return String.unquoted('') @ns.declare def has_glyph(sheet, glyph): sheet = sheet.render() font_sheets = _get_cache('font_sheets') font_sheet = font_sheets.get(sheet) glyph_name = String.unquoted(glyph).value glyph = font_sheet and font_sheet.get(glyph_name) if not font_sheet: log.error("No font sheet found: %s", sheet, extra={'stack': True}) return Boolean(bool(glyph)) @ns.declare def glyph_code(sheet, glyph): sheet = sheet.render() font_sheets = _get_cache('font_sheets') font_sheet = font_sheets.get(sheet) glyph_name = String.unquoted(glyph).value glyph = font_sheet and font_sheet.get(glyph_name) if not font_sheet: log.error("No font sheet found: %s", sheet, extra={'stack': True}) elif not glyph: log.error("No glyph found: %s in %s", glyph_name, font_sheet['*n*'], extra={'stack': True}) return String(six.unichr(glyph[1])) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/grammar/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0015407�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/grammar/__init__.py���������������������������������������������������������������0000664�0000000�0000000�00000000445�14205426364�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Grammar and parser plumbing for Sass. Much of this is generated or compiled in some fashion. """ from .scanner import NoMoreTokens from .scanner import Parser from .scanner import Scanner from .scanner import locate_blocks __all__ = ('NoMoreTokens', 'Parser', 'Scanner', 'locate_blocks') ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/grammar/expression.g��������������������������������������������������������������0000664�0000000�0000000�00000042737�14205426364�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Grammar for parsing Sass expressions.""" # This is a GENERATED FILE -- DO NOT EDIT DIRECTLY! # Edit scss/grammar/expression.g, then run: # # python2 yapps2.py scss/grammar/expression.g from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division import operator import re from scss.ast import Parentheses from scss.ast import UnaryOp from scss.ast import BinaryOp from scss.ast import AnyOp from scss.ast import AllOp from scss.ast import NotOp from scss.ast import CallOp from scss.ast import Interpolation from scss.ast import Literal from scss.ast import Variable from scss.ast import ListLiteral from scss.ast import MapLiteral from scss.ast import ArgspecLiteral from scss.ast import FunctionLiteral from scss.ast import AlphaFunctionLiteral from scss.ast import TernaryOp from scss.cssdefs import unescape from scss.types import Color from scss.types import Function from scss.types import Number from scss.types import String from scss.types import Url from scss.grammar import Parser from scss.grammar import Scanner %% parser SassExpression: # These need to go before the ignore, so they match first, and we don't # lose spaces inside a string or other interpolation! # Don't allow quotes or # unless they're escaped (or the # is alone) token SINGLE_STRING_GUTS: '([^\'\\\\#]|[\\\\].|#(?![{]))*' token DOUBLE_STRING_GUTS: "([^\"\\\\#]|[\\\\].|#(?![{]))*" token INTERP_ANYTHING: "([^#]|#(?![{]))*" token INTERP_NO_VARS: "([^#$]|#(?![{]))*" token INTERP_NO_PARENS: "([^#()]|#(?![{]))*" # This is a stupid lookahead used for diverting url(#{...}) to its own # branch; otherwise it would collide with the atom rule. token INTERP_START_URL_HACK: "(?=[#][{])" token INTERP_START: "#[{]" token SPACE: "[ \r\t\n]+" # Now we can list the ignore token and everything else. ignore: "[ \r\t\n]+" token LPAR: "\\(|\\[" token RPAR: "\\)|\\]" token END: "$" token MUL: "[*]" token DIV: "/" token MOD: "(?<=\s)%" token ADD: "[+]" token SUB: "-\s" token SIGN: "-(?![a-zA-Z_])" token AND: "(?=" token LT: "<" token GT: ">" token DOTDOTDOT: '[.]{3}' token SINGLE_QUOTE: "'" token DOUBLE_QUOTE: '"' # Must appear before BAREWORD, so url(foo) parses as a URL # http://dev.w3.org/csswg/css-syntax-3/#consume-a-url-token0 # Bare URLs may not contain quotes, parentheses, unprintables, or space. # TODO reify escapes, for this and for strings # FIXME: Also, URLs may not contain $ as it breaks urls with variables? token BAREURL_HEAD_HACK: "((?:[\\\\].|[^#$'\"()\\x00-\\x08\\x0b\\x0e-\\x20\\x7f]|#(?![{]))+)(?=#[{]|\s*[)])" token BAREURL: "(?:[\\\\].|[^#$'\"()\\x00-\\x08\\x0b\\x0e-\\x20\\x7f]|#(?![{]))+" token UNITS: "(? 1 else v[0] }} # Expressions: rule expr_slst: or_expr {{ v = [or_expr] }} ( or_expr {{ v.append(or_expr) }} )* {{ return ListLiteral(v, comma=False) if len(v) > 1 else v[0] }} rule or_expr: and_expr {{ v = and_expr }} ( OR and_expr {{ v = AnyOp(v, and_expr) }} )* {{ return v }} rule and_expr: not_expr {{ v = not_expr }} ( AND not_expr {{ v = AllOp(v, not_expr) }} )* {{ return v }} rule not_expr: comparison {{ return comparison }} | NOT not_expr {{ return NotOp(not_expr) }} rule comparison: a_expr {{ v = a_expr }} ( LT a_expr {{ v = BinaryOp(operator.lt, v, a_expr) }} | GT a_expr {{ v = BinaryOp(operator.gt, v, a_expr) }} | LE a_expr {{ v = BinaryOp(operator.le, v, a_expr) }} | GE a_expr {{ v = BinaryOp(operator.ge, v, a_expr) }} | EQ a_expr {{ v = BinaryOp(operator.eq, v, a_expr) }} | NE a_expr {{ v = BinaryOp(operator.ne, v, a_expr) }} )* {{ return v }} rule a_expr: m_expr {{ v = m_expr }} ( ADD m_expr {{ v = BinaryOp(operator.add, v, m_expr) }} | SUB m_expr {{ v = BinaryOp(operator.sub, v, m_expr) }} )* {{ return v }} rule m_expr: u_expr {{ v = u_expr }} ( MUL u_expr {{ v = BinaryOp(operator.mul, v, u_expr) }} | DIV u_expr {{ v = BinaryOp(operator.truediv, v, u_expr) }} | MOD u_expr {{ v = BinaryOp(operator.mod, v, u_expr) }} )* {{ return v }} rule u_expr: SIGN u_expr {{ return UnaryOp(operator.neg, u_expr) }} | ADD u_expr {{ return UnaryOp(operator.pos, u_expr) }} | atom {{ return atom }} rule atom: LPAR ( {{ v = ListLiteral([], comma=False) }} | expr_map_or_list {{ v = expr_map_or_list }} ) RPAR {{ return Parentheses(v) }} # Special functions. Note that these technically overlap with the # regular function rule, which makes this not quite LL -- but they're # different tokens so yapps can't tell, and it resolves the conflict by # picking the first one. # TODO Ruby sass somehow allows a full expression in here too | URL_FUNCTION LPAR interpolated_url RPAR {{ return interpolated_url }} # alpha() is a built-in Sass function, but it's also part of the old IE # filter syntax, where it appears as alpha(opacity=NN). Since = isn't # normally valid Sass, we have to special-case it here | ALPHA_FUNCTION LPAR ( OPACITY "=" atom RPAR {{ return AlphaFunctionLiteral(atom) }} | argspec RPAR {{ return CallOp("alpha", argspec) }} ) # This is a ternary operator, disguised as a function | IF_FUNCTION LPAR expr_lst RPAR {{ return TernaryOp(expr_lst) }} | LITERAL_FUNCTION LPAR interpolated_function RPAR {{ return Interpolation.maybe(interpolated_function, type=Function, function_name=LITERAL_FUNCTION) }} | FNCT LPAR argspec RPAR {{ return CallOp(FNCT, argspec) }} | BANG_IMPORTANT {{ return Literal(String.unquoted("!important", literal=True)) }} | interpolated_bareword {{ return Interpolation.maybe(interpolated_bareword) }} | NUM {{ UNITS = None }} [ UNITS ] {{ return Literal(Number(float(NUM), unit=UNITS)) }} | interpolated_string {{ return interpolated_string }} | COLOR {{ return Literal(Color.from_hex(COLOR, literal=True)) }} | VAR {{ return Variable(VAR) }} # ------------------------------------------------------------------------- # Interpolation, which is a right mess, because it depends very heavily on # context -- what other characters are allowed, and when do we stop? # Thankfully these rules all look pretty similar: there's a delimiter, a # literal, and some number of interpolations and trailing literals. rule interpolation: INTERP_START expr_lst INTERP_END {{ return expr_lst }} rule interpolated_url: # Note: This rule DOES NOT include the url(...) delimiters. # Parsing a URL is finnicky: it can wrap an expression like any other # function call, OR it can wrap a literal URL (like regular ol' CSS # syntax) but possibly with Sass interpolations. # The string forms of url(), of course, are just special cases of # expressions. # The exact rules aren't documented, but after some experimentation, I # think Sass assumes a literal if it sees either #{} or the end of the # call before it sees a space, and an expression otherwise. # Translating that into LL is tricky. We can't look for # interpolations, because interpolations are also expressions, and # left-factoring this would be a nightmare. So instead the first rule # has some wacky lookahead tokens; see below. interpolated_bare_url {{ return Interpolation.maybe(interpolated_bare_url, type=Url, quotes=None) }} | expr_lst {{ return FunctionLiteral(expr_lst, "url") }} rule interpolated_bare_url: ( # This token is identical to BASEURL, except that it ends with a # lookahead asserting that the next thing is either an # interpolation, OR optional whitespace and a closing paren. BAREURL_HEAD_HACK {{ parts = [BAREURL_HEAD_HACK] }} # And this token merely checks that an interpolation comes next -- # because if it does, we want the grammar to come down THIS path # rather than going down expr_lst and into atom (which also looks # for INTERP_START). | INTERP_START_URL_HACK {{ parts = [''] }} ) ( interpolation {{ parts.append(interpolation) }} ( BAREURL {{ parts.append(BAREURL) }} | SPACE {{ return parts }} | {{ parts.append('') }} ) )* {{ return parts }} rule interpolated_string: interpolated_string_single {{ return Interpolation.maybe(interpolated_string_single, quotes="'") }} | interpolated_string_double {{ return Interpolation.maybe(interpolated_string_double, quotes='"') }} rule interpolated_string_single: SINGLE_QUOTE SINGLE_STRING_GUTS {{ parts = [unescape(SINGLE_STRING_GUTS)] }} ( interpolation {{ parts.append(interpolation) }} SINGLE_STRING_GUTS {{ parts.append(unescape(SINGLE_STRING_GUTS)) }} )* SINGLE_QUOTE {{ return parts }} rule interpolated_string_double: DOUBLE_QUOTE DOUBLE_STRING_GUTS {{ parts = [unescape(DOUBLE_STRING_GUTS)] }} ( interpolation {{ parts.append(interpolation) }} DOUBLE_STRING_GUTS {{ parts.append(unescape(DOUBLE_STRING_GUTS)) }} )* DOUBLE_QUOTE {{ return parts }} rule interpolated_bareword: # This one is slightly fiddly because it can't be /completely/ empty, # and any space between tokens ends the bareword (via early return). # TODO yapps2 is spitting out warnings for the BAREWORD shenanigans, # because it's technically ambiguous with a spaced list of barewords -- # but SPACE will match first in practice and yapps2 doesn't know that ( BAREWORD {{ parts = [BAREWORD] }} [ SPACE {{ return parts }} ] | interpolation {{ parts = ['', interpolation] }} ( BAREWORD {{ parts.append(BAREWORD) }} | SPACE {{ return parts }} | {{ parts.append('') }} ) ) ( interpolation {{ parts.append(interpolation) }} ( BAREWORD {{ parts.append(BAREWORD) }} | SPACE {{ return parts }} | {{ parts.append('') }} ) )* {{ return parts }} rule interpolated_function: # Completely arbitrary text, but with balanced parentheses. interpolated_function_parens {{ parts = interpolated_function_parens }} ( interpolation {{ parts.append(interpolation) }} interpolated_function_parens {{ parts.extend(interpolated_function_parens) }} )* {{ return parts }} rule interpolated_function_parens: INTERP_NO_PARENS {{ parts = [INTERP_NO_PARENS] }} ( LPAR interpolated_function {{ parts = parts[:-1] + [parts[-1] + LPAR + interpolated_function[0]] + interpolated_function[1:] }} RPAR INTERP_NO_PARENS {{ parts[-1] += RPAR + INTERP_NO_PARENS }} )* {{ return parts }} rule goal_interpolated_literal: # This isn't part of the grammar, but rather a separate goal, used for # text that might contain interpolations but should not be parsed # outside of them -- e.g., selector strings. INTERP_ANYTHING {{ parts = [INTERP_ANYTHING] }} ( interpolation {{ parts.append(interpolation) }} INTERP_ANYTHING {{ parts.append(INTERP_ANYTHING) }} )* END {{ return Interpolation.maybe(parts) }} rule goal_interpolated_literal_with_vars: # Another goal used for literal text that might contain interpolations # OR variables. Created for the header of @media blocks. INTERP_NO_VARS {{ parts = [INTERP_NO_VARS] }} ( ( interpolation {{ parts.append(interpolation) }} | VAR {{ parts.append(Variable(VAR)) }} ) INTERP_NO_VARS {{ parts.append(INTERP_NO_VARS) }} )* END {{ return Interpolation.maybe(parts) }} %% ���������������������������������pyScss-1.4.0/scss/grammar/expression.py�������������������������������������������������������������0000664�0000000�0000000�00000072233�14205426364�0020167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Grammar for parsing Sass expressions.""" # This is a GENERATED FILE -- DO NOT EDIT DIRECTLY! # Edit scss/grammar/expression.g, then run: # # python2 yapps2.py scss/grammar/expression.g from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division import operator import re from scss.ast import Parentheses from scss.ast import UnaryOp from scss.ast import BinaryOp from scss.ast import AnyOp from scss.ast import AllOp from scss.ast import NotOp from scss.ast import CallOp from scss.ast import Interpolation from scss.ast import Literal from scss.ast import Variable from scss.ast import ListLiteral from scss.ast import MapLiteral from scss.ast import ArgspecLiteral from scss.ast import FunctionLiteral from scss.ast import AlphaFunctionLiteral from scss.ast import TernaryOp from scss.cssdefs import unescape from scss.types import Color from scss.types import Function from scss.types import Number from scss.types import String from scss.types import Url from scss.grammar import Parser from scss.grammar import Scanner class SassExpressionScanner(Scanner): patterns = None _patterns = [ ('"="', '='), ('":"', ':'), ('","', ','), ('SINGLE_STRING_GUTS', "([^'\\\\#]|[\\\\].|#(?![{]))*"), ('DOUBLE_STRING_GUTS', '([^"\\\\#]|[\\\\].|#(?![{]))*'), ('INTERP_ANYTHING', '([^#]|#(?![{]))*'), ('INTERP_NO_VARS', '([^#$]|#(?![{]))*'), ('INTERP_NO_PARENS', '([^#()]|#(?![{]))*'), ('INTERP_START_URL_HACK', '(?=[#][{])'), ('INTERP_START', '#[{]'), ('SPACE', '[ \r\t\n]+'), ('[ \r\t\n]+', '[ \r\t\n]+'), ('LPAR', '\\(|\\['), ('RPAR', '\\)|\\]'), ('END', '$'), ('MUL', '[*]'), ('DIV', '/'), ('MOD', '(?<=\\s)%'), ('ADD', '[+]'), ('SUB', '-\\s'), ('SIGN', '-(?![a-zA-Z_])'), ('AND', '(?='), ('LT', '<'), ('GT', '>'), ('DOTDOTDOT', '[.]{3}'), ('SINGLE_QUOTE', "'"), ('DOUBLE_QUOTE', '"'), ('BAREURL_HEAD_HACK', '((?:[\\\\].|[^#$\'"()\\x00-\\x08\\x0b\\x0e-\\x20\\x7f]|#(?![{]))+)(?=#[{]|\\s*[)])'), ('BAREURL', '(?:[\\\\].|[^#$\'"()\\x00-\\x08\\x0b\\x0e-\\x20\\x7f]|#(?![{]))+'), ('UNITS', '(? 1 else v[0] def expr_slst(self): or_expr = self.or_expr() v = [or_expr] while self._peek(self.expr_slst_rsts) not in self.expr_slst_chks: or_expr = self.or_expr() v.append(or_expr) return ListLiteral(v, comma=False) if len(v) > 1 else v[0] def or_expr(self): and_expr = self.and_expr() v = and_expr while self._peek(self.or_expr_rsts) == 'OR': OR = self._scan('OR') and_expr = self.and_expr() v = AnyOp(v, and_expr) return v def and_expr(self): not_expr = self.not_expr() v = not_expr while self._peek(self.and_expr_rsts) == 'AND': AND = self._scan('AND') not_expr = self.not_expr() v = AllOp(v, not_expr) return v def not_expr(self): _token_ = self._peek(self.argspec_item_chks) if _token_ != 'NOT': comparison = self.comparison() return comparison else: # == 'NOT' NOT = self._scan('NOT') not_expr = self.not_expr() return NotOp(not_expr) def comparison(self): a_expr = self.a_expr() v = a_expr while self._peek(self.comparison_rsts) in self.comparison_chks: _token_ = self._peek(self.comparison_chks) if _token_ == 'LT': LT = self._scan('LT') a_expr = self.a_expr() v = BinaryOp(operator.lt, v, a_expr) elif _token_ == 'GT': GT = self._scan('GT') a_expr = self.a_expr() v = BinaryOp(operator.gt, v, a_expr) elif _token_ == 'LE': LE = self._scan('LE') a_expr = self.a_expr() v = BinaryOp(operator.le, v, a_expr) elif _token_ == 'GE': GE = self._scan('GE') a_expr = self.a_expr() v = BinaryOp(operator.ge, v, a_expr) elif _token_ == 'EQ': EQ = self._scan('EQ') a_expr = self.a_expr() v = BinaryOp(operator.eq, v, a_expr) else: # == 'NE' NE = self._scan('NE') a_expr = self.a_expr() v = BinaryOp(operator.ne, v, a_expr) return v def a_expr(self): m_expr = self.m_expr() v = m_expr while self._peek(self.a_expr_rsts) in self.a_expr_chks: _token_ = self._peek(self.a_expr_chks) if _token_ == 'ADD': ADD = self._scan('ADD') m_expr = self.m_expr() v = BinaryOp(operator.add, v, m_expr) else: # == 'SUB' SUB = self._scan('SUB') m_expr = self.m_expr() v = BinaryOp(operator.sub, v, m_expr) return v def m_expr(self): u_expr = self.u_expr() v = u_expr while self._peek(self.m_expr_rsts) in self.m_expr_chks: _token_ = self._peek(self.m_expr_chks) if _token_ == 'MUL': MUL = self._scan('MUL') u_expr = self.u_expr() v = BinaryOp(operator.mul, v, u_expr) elif _token_ == 'DIV': DIV = self._scan('DIV') u_expr = self.u_expr() v = BinaryOp(operator.truediv, v, u_expr) else: # == 'MOD' MOD = self._scan('MOD') u_expr = self.u_expr() v = BinaryOp(operator.mod, v, u_expr) return v def u_expr(self): _token_ = self._peek(self.u_expr_rsts) if _token_ == 'SIGN': SIGN = self._scan('SIGN') u_expr = self.u_expr() return UnaryOp(operator.neg, u_expr) elif _token_ == 'ADD': ADD = self._scan('ADD') u_expr = self.u_expr() return UnaryOp(operator.pos, u_expr) else: # in self.u_expr_chks atom = self.atom() return atom def atom(self): _token_ = self._peek(self.u_expr_chks) if _token_ == 'LPAR': LPAR = self._scan('LPAR') _token_ = self._peek(self.atom_rsts) if _token_ == 'RPAR': v = ListLiteral([], comma=False) else: # in self.argspec_item_chks expr_map_or_list = self.expr_map_or_list() v = expr_map_or_list RPAR = self._scan('RPAR') return Parentheses(v) elif _token_ == 'URL_FUNCTION': URL_FUNCTION = self._scan('URL_FUNCTION') LPAR = self._scan('LPAR') interpolated_url = self.interpolated_url() RPAR = self._scan('RPAR') return interpolated_url elif _token_ == 'ALPHA_FUNCTION': ALPHA_FUNCTION = self._scan('ALPHA_FUNCTION') LPAR = self._scan('LPAR') _token_ = self._peek(self.atom_rsts_) if _token_ == 'OPACITY': OPACITY = self._scan('OPACITY') self._scan('"="') atom = self.atom() RPAR = self._scan('RPAR') return AlphaFunctionLiteral(atom) else: # in self.atom_chks argspec = self.argspec() RPAR = self._scan('RPAR') return CallOp("alpha", argspec) elif _token_ == 'IF_FUNCTION': IF_FUNCTION = self._scan('IF_FUNCTION') LPAR = self._scan('LPAR') expr_lst = self.expr_lst() RPAR = self._scan('RPAR') return TernaryOp(expr_lst) elif _token_ == 'LITERAL_FUNCTION': LITERAL_FUNCTION = self._scan('LITERAL_FUNCTION') LPAR = self._scan('LPAR') interpolated_function = self.interpolated_function() RPAR = self._scan('RPAR') return Interpolation.maybe(interpolated_function, type=Function, function_name=LITERAL_FUNCTION) elif _token_ == 'FNCT': FNCT = self._scan('FNCT') LPAR = self._scan('LPAR') argspec = self.argspec() RPAR = self._scan('RPAR') return CallOp(FNCT, argspec) elif _token_ == 'BANG_IMPORTANT': BANG_IMPORTANT = self._scan('BANG_IMPORTANT') return Literal(String.unquoted("!important", literal=True)) elif _token_ in self.atom_chks_: interpolated_bareword = self.interpolated_bareword() return Interpolation.maybe(interpolated_bareword) elif _token_ == 'NUM': NUM = self._scan('NUM') UNITS = None if self._peek(self.atom_rsts__) == 'UNITS': UNITS = self._scan('UNITS') return Literal(Number(float(NUM), unit=UNITS)) elif _token_ not in self.atom_chks__: interpolated_string = self.interpolated_string() return interpolated_string elif _token_ == 'COLOR': COLOR = self._scan('COLOR') return Literal(Color.from_hex(COLOR, literal=True)) else: # == 'VAR' VAR = self._scan('VAR') return Variable(VAR) def interpolation(self): INTERP_START = self._scan('INTERP_START') expr_lst = self.expr_lst() INTERP_END = self._scan('INTERP_END') return expr_lst def interpolated_url(self): _token_ = self._peek(self.interpolated_url_rsts) if _token_ in self.interpolated_url_chks: interpolated_bare_url = self.interpolated_bare_url() return Interpolation.maybe(interpolated_bare_url, type=Url, quotes=None) else: # in self.argspec_item_chks expr_lst = self.expr_lst() return FunctionLiteral(expr_lst, "url") def interpolated_bare_url(self): _token_ = self._peek(self.interpolated_url_chks) if _token_ == 'BAREURL_HEAD_HACK': BAREURL_HEAD_HACK = self._scan('BAREURL_HEAD_HACK') parts = [BAREURL_HEAD_HACK] else: # == 'INTERP_START_URL_HACK' INTERP_START_URL_HACK = self._scan('INTERP_START_URL_HACK') parts = [''] while self._peek(self.interpolated_bare_url_rsts) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) _token_ = self._peek(self.interpolated_bare_url_rsts_) if _token_ == 'BAREURL': BAREURL = self._scan('BAREURL') parts.append(BAREURL) elif _token_ == 'SPACE': SPACE = self._scan('SPACE') return parts else: # in self.interpolated_bare_url_rsts parts.append('') return parts def interpolated_string(self): _token_ = self._peek(self.interpolated_string_rsts) if _token_ == 'SINGLE_QUOTE': interpolated_string_single = self.interpolated_string_single() return Interpolation.maybe(interpolated_string_single, quotes="'") else: # == 'DOUBLE_QUOTE' interpolated_string_double = self.interpolated_string_double() return Interpolation.maybe(interpolated_string_double, quotes='"') def interpolated_string_single(self): SINGLE_QUOTE = self._scan('SINGLE_QUOTE') SINGLE_STRING_GUTS = self._scan('SINGLE_STRING_GUTS') parts = [unescape(SINGLE_STRING_GUTS)] while self._peek(self.interpolated_string_single_rsts) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) SINGLE_STRING_GUTS = self._scan('SINGLE_STRING_GUTS') parts.append(unescape(SINGLE_STRING_GUTS)) SINGLE_QUOTE = self._scan('SINGLE_QUOTE') return parts def interpolated_string_double(self): DOUBLE_QUOTE = self._scan('DOUBLE_QUOTE') DOUBLE_STRING_GUTS = self._scan('DOUBLE_STRING_GUTS') parts = [unescape(DOUBLE_STRING_GUTS)] while self._peek(self.interpolated_string_double_rsts) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) DOUBLE_STRING_GUTS = self._scan('DOUBLE_STRING_GUTS') parts.append(unescape(DOUBLE_STRING_GUTS)) DOUBLE_QUOTE = self._scan('DOUBLE_QUOTE') return parts def interpolated_bareword(self): _token_ = self._peek(self.atom_chks_) if _token_ == 'BAREWORD': BAREWORD = self._scan('BAREWORD') parts = [BAREWORD] if self._peek(self.interpolated_bareword_rsts) == 'SPACE': SPACE = self._scan('SPACE') return parts else: # == 'INTERP_START' interpolation = self.interpolation() parts = ['', interpolation] _token_ = self._peek(self.interpolated_bareword_rsts_) if _token_ == 'BAREWORD': BAREWORD = self._scan('BAREWORD') parts.append(BAREWORD) elif _token_ == 'SPACE': SPACE = self._scan('SPACE') return parts elif 1: parts.append('') while self._peek(self.interpolated_bareword_rsts__) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) _token_ = self._peek(self.interpolated_bareword_rsts_) if _token_ == 'BAREWORD': BAREWORD = self._scan('BAREWORD') parts.append(BAREWORD) elif _token_ == 'SPACE': SPACE = self._scan('SPACE') return parts elif 1: parts.append('') return parts def interpolated_function(self): interpolated_function_parens = self.interpolated_function_parens() parts = interpolated_function_parens while self._peek(self.interpolated_bare_url_rsts) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) interpolated_function_parens = self.interpolated_function_parens() parts.extend(interpolated_function_parens) return parts def interpolated_function_parens(self): INTERP_NO_PARENS = self._scan('INTERP_NO_PARENS') parts = [INTERP_NO_PARENS] while self._peek(self.interpolated_function_parens_rsts) == 'LPAR': LPAR = self._scan('LPAR') interpolated_function = self.interpolated_function() parts = parts[:-1] + [parts[-1] + LPAR + interpolated_function[0]] + interpolated_function[1:] RPAR = self._scan('RPAR') INTERP_NO_PARENS = self._scan('INTERP_NO_PARENS') parts[-1] += RPAR + INTERP_NO_PARENS return parts def goal_interpolated_literal(self): INTERP_ANYTHING = self._scan('INTERP_ANYTHING') parts = [INTERP_ANYTHING] while self._peek(self.goal_interpolated_literal_rsts) == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) INTERP_ANYTHING = self._scan('INTERP_ANYTHING') parts.append(INTERP_ANYTHING) END = self._scan('END') return Interpolation.maybe(parts) def goal_interpolated_literal_with_vars(self): INTERP_NO_VARS = self._scan('INTERP_NO_VARS') parts = [INTERP_NO_VARS] while self._peek(self.goal_interpolated_literal_with_vars_rsts) != 'END': _token_ = self._peek(self.goal_interpolated_literal_with_vars_rsts_) if _token_ == 'INTERP_START': interpolation = self.interpolation() parts.append(interpolation) else: # == 'VAR' VAR = self._scan('VAR') parts.append(Variable(VAR)) INTERP_NO_VARS = self._scan('INTERP_NO_VARS') parts.append(INTERP_NO_VARS) END = self._scan('END') return Interpolation.maybe(parts) atom_chks_ = frozenset(['BAREWORD', 'INTERP_START']) expr_map_or_list_rsts__ = frozenset(['LPAR', 'RPAR', 'BANG_IMPORTANT', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'DOUBLE_QUOTE', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'IF_FUNCTION', 'SINGLE_QUOTE', '","']) u_expr_chks = frozenset(['LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'VAR', 'NUM', 'FNCT', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'SINGLE_QUOTE']) m_expr_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'MUL', 'INTERP_END', 'BANG_IMPORTANT', 'DIV', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SIGN', 'BAREWORD', 'GE', 'FNCT', 'VAR', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'MOD', 'OR', '","']) interpolated_bare_url_rsts_ = frozenset(['RPAR', 'INTERP_START', 'BAREURL', 'SPACE']) argspec_items_rsts = frozenset(['RPAR', 'END', '","']) expr_slst_chks = frozenset(['INTERP_END', 'RPAR', 'END', '":"', '","']) expr_lst_rsts = frozenset(['INTERP_END', 'RPAR', 'END', '","']) goal_interpolated_literal_rsts = frozenset(['END', 'INTERP_START']) expr_map_or_list_rsts = frozenset(['RPAR', '":"', '","']) goal_interpolated_literal_with_vars_rsts = frozenset(['VAR', 'END', 'INTERP_START']) argspec_item_chks = frozenset(['LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'IF_FUNCTION', 'SINGLE_QUOTE']) a_expr_chks = frozenset(['ADD', 'SUB']) interpolated_function_parens_rsts = frozenset(['LPAR', 'RPAR', 'INTERP_START']) expr_slst_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'ALPHA_FUNCTION', 'RPAR', 'INTERP_END', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', '":"', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'NOT', 'SINGLE_QUOTE', '","']) interpolated_bareword_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'MUL', 'INTERP_END', 'BANG_IMPORTANT', 'DIV', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SPACE', 'SIGN', 'BAREWORD', 'GE', 'FNCT', 'VAR', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'MOD', 'OR', '","']) atom_rsts__ = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'VAR', 'MUL', 'INTERP_END', 'BANG_IMPORTANT', 'DIV', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SIGN', 'BAREWORD', 'GE', 'FNCT', 'UNITS', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'MOD', 'OR', '","']) or_expr_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'ALPHA_FUNCTION', 'RPAR', 'INTERP_END', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', '":"', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'OR', 'NOT', 'SINGLE_QUOTE', '","']) argspec_chks_ = frozenset(['END', 'RPAR']) interpolated_string_single_rsts = frozenset(['SINGLE_QUOTE', 'INTERP_START']) interpolated_bareword_rsts_ = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'MUL', 'DIV', 'BANG_IMPORTANT', 'INTERP_END', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'BAREWORD', 'IF_FUNCTION', 'GT', 'END', 'SPACE', 'SIGN', 'LITERAL_FUNCTION', 'GE', 'FNCT', 'VAR', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'MOD', 'OR', '","']) and_expr_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'ALPHA_FUNCTION', 'RPAR', 'INTERP_END', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', '":"', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'AND', 'SINGLE_QUOTE', 'NOT', 'OR', '","']) comparison_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'ALPHA_FUNCTION', 'RPAR', 'INTERP_END', 'BANG_IMPORTANT', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SIGN', 'BAREWORD', 'ADD', 'FNCT', 'VAR', 'EQ', 'AND', 'GE', 'SINGLE_QUOTE', 'NOT', 'OR', '","']) argspec_chks = frozenset(['DOTDOTDOT', 'SLURPYVAR']) atom_rsts_ = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'SLURPYVAR', 'ALPHA_FUNCTION', 'RPAR', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'OPACITY', 'DOTDOTDOT', 'NOT', 'SINGLE_QUOTE']) interpolated_string_double_rsts = frozenset(['DOUBLE_QUOTE', 'INTERP_START']) atom_chks__ = frozenset(['COLOR', 'VAR']) expr_map_or_list_rsts_ = frozenset(['RPAR', '","']) u_expr_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'SINGLE_QUOTE']) interpolated_url_chks = frozenset(['INTERP_START_URL_HACK', 'BAREURL_HEAD_HACK']) atom_chks = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'SLURPYVAR', 'ALPHA_FUNCTION', 'RPAR', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'DOTDOTDOT', 'NOT', 'SINGLE_QUOTE']) interpolated_url_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'SINGLE_QUOTE', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'INTERP_START_URL_HACK', 'IF_FUNCTION', 'BAREURL_HEAD_HACK']) comparison_chks = frozenset(['GT', 'GE', 'NE', 'LT', 'LE', 'EQ']) argspec_items_rsts_ = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'SLURPYVAR', 'ALPHA_FUNCTION', 'RPAR', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'DOTDOTDOT', 'NOT', 'SINGLE_QUOTE']) a_expr_rsts = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'INTERP_END', 'BANG_IMPORTANT', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SIGN', 'BAREWORD', 'GE', 'FNCT', 'VAR', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'OR', '","']) interpolated_string_rsts = frozenset(['DOUBLE_QUOTE', 'SINGLE_QUOTE']) interpolated_bareword_rsts__ = frozenset(['LPAR', 'DOUBLE_QUOTE', 'SUB', 'ALPHA_FUNCTION', 'RPAR', 'MUL', 'INTERP_END', 'BANG_IMPORTANT', 'DIV', 'LE', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NE', 'LT', 'NUM', '":"', 'LITERAL_FUNCTION', 'IF_FUNCTION', 'GT', 'END', 'SIGN', 'BAREWORD', 'GE', 'FNCT', 'VAR', 'EQ', 'AND', 'ADD', 'SINGLE_QUOTE', 'NOT', 'MOD', 'OR', '","']) m_expr_chks = frozenset(['MUL', 'DIV', 'MOD']) goal_interpolated_literal_with_vars_rsts_ = frozenset(['VAR', 'INTERP_START']) interpolated_bare_url_rsts = frozenset(['RPAR', 'INTERP_START']) argspec_items_chks = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'IF_FUNCTION', 'SINGLE_QUOTE']) argspec_rsts = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'SLURPYVAR', 'ALPHA_FUNCTION', 'RPAR', 'BANG_IMPORTANT', 'URL_FUNCTION', 'INTERP_START', 'COLOR', 'NUM', 'BAREWORD', 'IF_FUNCTION', 'END', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'FNCT', 'VAR', 'DOTDOTDOT', 'NOT', 'SINGLE_QUOTE']) atom_rsts = frozenset(['BANG_IMPORTANT', 'LPAR', 'DOUBLE_QUOTE', 'IF_FUNCTION', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'RPAR', 'SINGLE_QUOTE']) argspec_items_rsts__ = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'BANG_IMPORTANT', 'SLURPYVAR', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'DOTDOTDOT', 'INTERP_START', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'IF_FUNCTION', 'SINGLE_QUOTE']) argspec_rsts_ = frozenset(['KWVAR', 'LPAR', 'DOUBLE_QUOTE', 'IF_FUNCTION', 'END', 'URL_FUNCTION', 'BAREWORD', 'COLOR', 'ALPHA_FUNCTION', 'INTERP_START', 'BANG_IMPORTANT', 'SIGN', 'LITERAL_FUNCTION', 'ADD', 'NUM', 'VAR', 'FNCT', 'NOT', 'RPAR', 'SINGLE_QUOTE']) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/grammar/scanner.py����������������������������������������������������������������0000664�0000000�0000000�00000024641�14205426364�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Pure-Python scanner and parser, used if the C module is not available.""" from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from collections import deque import re from scss.errors import SassSyntaxError DEBUG = False try: from ._scanner import locate_blocks except ImportError: # Regex for finding a minimum set of characters that might affect where a # block starts or ends _blocks_re = re.compile(r'[{},;()\'"\n]|\\.', re.DOTALL) def locate_blocks(codestr): """ For processing CSS like strings. Either returns all selectors (that can be "smart" multi-lined, as long as it's joined by `,`, or enclosed in `(` and `)`) with its code block (the one between `{` and `}`, which can be nested), or the "lose" code (properties) that doesn't have any blocks. """ lineno = 1 par = 0 instr = None depth = 0 skip = False i = init = lose = 0 start = end = None lineno_stack = deque() for m in _blocks_re.finditer(codestr): i = m.start(0) c = codestr[i] if c == '\n': lineno += 1 if c == '\\': # Escape, also consumes the next character pass elif instr is not None: if c == instr: instr = None # A string ends (FIXME: needs to accept escaped characters) elif c in ('"', "'"): instr = c # A string starts elif c == '(': # parenthesis begins: par += 1 elif c == ')': # parenthesis ends: par -= 1 elif not par and not instr: if c == '{': # block begins: if depth == 0: if i > 0 and codestr[i - 1] == '#': # Do not process #{...} as blocks! skip = True else: lineno_stack.append(lineno) start = i if lose < init: _property = codestr[lose:init].strip() if _property: yield lineno, _property, None lose = init depth += 1 elif c == '}': # block ends: if depth <= 0: raise SyntaxError("Unexpected closing brace on line {0}".format(lineno)) else: depth -= 1 if depth == 0: if not skip: end = i _selectors = codestr[init:start].strip() _codestr = codestr[start + 1:end].strip() if _selectors: yield lineno_stack.pop(), _selectors, _codestr init = lose = end + 1 skip = False elif depth == 0: if c == ';': # End of property (or block): init = i if lose < init: _property = codestr[lose:init].strip() if _property: yield lineno, _property, None init = lose = i + 1 if depth > 0: if not skip: _selectors = codestr[init:start].strip() _codestr = codestr[start + 1:].strip() if _selectors: yield lineno, _selectors, _codestr if par: error = "Parentheses never closed" elif instr: error = "String literal never terminated" else: error = "Block never closed" # TODO should remember the line + position of the actual # problem, and show it in a SassError raise SyntaxError( "Couldn't parse block starting on line {0}: {1}" .format(lineno, error) ) losestr = codestr[lose:] for _property in losestr.split(';'): _property = _property.strip() lineno += _property.count('\n') if _property: yield lineno, _property, None ################################################################################ # Parser # NOTE: This class has no C equivalent class Parser(object): def __init__(self, scanner): self._scanner = scanner self._pos = 0 self._char_pos = 0 def reset(self, input): self._scanner.reset(input) self._pos = 0 self._char_pos = 0 def _peek(self, types): """ Returns the token type for lookahead; if there are any args then the list of args is the set of token types to allow """ tok = self._scanner.token(self._pos, types) return tok[2] def _scan(self, type): """ Returns the matched text, and moves to the next token """ tok = self._scanner.token(self._pos, frozenset([type])) self._char_pos = tok[0] if tok[2] != type: raise SyntaxError("SyntaxError[@ char %s: %s]" % (repr(tok[0]), "Trying to find " + type)) self._pos += 1 return tok[3] try: from ._scanner import NoMoreTokens except ImportError: class NoMoreTokens(Exception): """ Another exception object, for when we run out of tokens """ pass try: from ._scanner import Scanner except ImportError: class Scanner(object): def __init__(self, patterns, ignore, input=None): """ Patterns is [(terminal,regex)...] Ignore is [terminal,...]; Input is a string """ self.reset(input) self.ignore = ignore # The stored patterns are a pair (compiled regex,source # regex). If the patterns variable passed in to the # constructor is None, we assume that the class already has a # proper .patterns list constructed if patterns is not None: self.patterns = [] for k, r in patterns: self.patterns.append((k, re.compile(r))) def reset(self, input): self.tokens = [] self.restrictions = [] self.input = input self.pos = 0 def __repr__(self): """ Print the last 10 tokens that have been scanned in """ output = '' for t in self.tokens[-10:]: output = "%s\n (@%s) %s = %s" % (output, t[0], t[2], repr(t[3])) return output def _scan(self, restrict): """ Should scan another token and add it to the list, self.tokens, and add the restriction to self.restrictions """ # Keep looking for a token, ignoring any in self.ignore if DEBUG: print() print("Being asked to match with restriction:", repr(restrict)) token = None while True: best_pat = None # Search the patterns for a match, with earlier # tokens in the list having preference best_pat_len = 0 for tok, regex in self.patterns: if DEBUG: print("\tTrying %s: %s at pos %d -> %s" % (repr(tok), repr(regex.pattern), self.pos, repr(self.input))) # First check to see if we're restricting to this token if restrict and tok not in restrict and tok not in self.ignore: if DEBUG: print("\tSkipping %r!" % (tok,)) continue m = regex.match(self.input, self.pos) if m: # We got a match best_pat = tok best_pat_len = len(m.group(0)) if DEBUG: print("Match OK! %s: %s at pos %d" % (repr(tok), repr(regex.pattern), self.pos)) break # If we didn't find anything, raise an error if best_pat is None: raise SassSyntaxError(self.input, self.pos, restrict) # If we found something that isn't to be ignored, return it if best_pat in self.ignore: # This token should be ignored... self.pos += best_pat_len else: end_pos = self.pos + best_pat_len # Create a token with this data token = ( self.pos, end_pos, best_pat, self.input[self.pos:end_pos] ) break if token is not None: self.pos = token[1] # Only add this token if it's not in the list # (to prevent looping) if not self.tokens or token != self.tokens[-1]: self.tokens.append(token) self.restrictions.append(restrict) return 1 return 0 def token(self, i, restrict=None): """ Get the i'th token, and if i is one past the end, then scan for another token; restrict is a list of tokens that are allowed, or 0 for any token. """ tokens_len = len(self.tokens) if i == tokens_len: # We are at the end, get the next... tokens_len += self._scan(restrict) if i < tokens_len: if restrict and self.restrictions[i] and restrict > self.restrictions[i]: raise NotImplementedError("Unimplemented: restriction set changed") return self.tokens[i] raise NoMoreTokens def rewind(self, i): tokens_len = len(self.tokens) if i <= tokens_len: token = self.tokens[i] self.tokens = self.tokens[:i] self.restrictions = self.restrictions[:i] self.pos = token[0] �����������������������������������������������������������������������������������������������pyScss-1.4.0/scss/legacy.py�������������������������������������������������������������������������0000664�0000000�0000000�00000017020�14205426364�0015577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division import os from pathlib import Path from collections import namedtuple import six from scss.calculator import Calculator from scss.compiler import Compiler import scss.config as config from scss.extension.bootstrap import BootstrapExtension from scss.extension.core import CoreExtension from scss.extension.compass import CompassExtension from scss.extension.extra import ExtraExtension from scss.extension.fonts import FontsExtension from scss.namespace import Namespace from scss.scss_meta import ( BUILD_INFO, PROJECT, VERSION, REVISION, URL, AUTHOR, AUTHOR_EMAIL, LICENSE, ) from scss.source import SourceFile from scss.types import String _default_scss_vars = { '$BUILD-INFO': String.unquoted(BUILD_INFO), '$PROJECT': String.unquoted(PROJECT), '$VERSION': String.unquoted(VERSION), '$REVISION': String.unquoted(REVISION), '$URL': String.unquoted(URL), '$AUTHOR': String.unquoted(AUTHOR), '$AUTHOR-EMAIL': String.unquoted(AUTHOR_EMAIL), '$LICENSE': String.unquoted(LICENSE), # unsafe chars will be hidden as vars '$--doubleslash': String.unquoted('//'), '$--bigcopen': String.unquoted('/*'), '$--bigcclose': String.unquoted('*/'), '$--doubledot': String.unquoted(':'), '$--semicolon': String.unquoted(';'), '$--curlybracketopen': String.unquoted('{'), '$--curlybracketclosed': String.unquoted('}'), } SourceFileTuple = namedtuple('SourceFileTuple', ('parent_dir', 'filename')) # TODO using this should spew an actual deprecation warning class Scss(object): """Original programmatic interface to the compiler. This class is now DEPRECATED. See :mod:`scss.compiler` for the replacement. """ def __init__( self, scss_vars=None, scss_opts=None, scss_files=None, super_selector='', live_errors=False, library=None, func_registry=None, search_paths=None): self.super_selector = super_selector self._scss_vars = {} if scss_vars: calculator = Calculator() for var_name, value in scss_vars.items(): if isinstance(value, six.string_types): scss_value = calculator.evaluate_expression(value) if scss_value is None: # TODO warning? scss_value = String.unquoted(value) else: scss_value = value self._scss_vars[var_name] = scss_value self._scss_opts = scss_opts or {} self._scss_files = scss_files self._library = func_registry or library self._search_paths = search_paths # If true, swallow compile errors and embed them in the output instead self.live_errors = live_errors def compile( self, scss_string=None, scss_file=None, source_files=None, super_selector=None, filename=None, is_sass=None, line_numbers=True, import_static_css=False): """Compile Sass to CSS. Returns a single CSS string. This method is DEPRECATED; see :mod:`scss.compiler` instead. """ # Derive our root namespace self.scss_vars = _default_scss_vars.copy() if self._scss_vars is not None: self.scss_vars.update(self._scss_vars) root_namespace = Namespace( variables=self.scss_vars, functions=self._library, ) # Figure out search paths. Fall back from provided explicitly to # defined globally to just searching the current directory search_paths = ['.'] if self._search_paths is not None: assert not isinstance(self._search_paths, six.string_types), \ "`search_paths` should be an iterable, not a string" search_paths.extend(self._search_paths) else: if config.LOAD_PATHS: if isinstance(config.LOAD_PATHS, six.string_types): # Back-compat: allow comma-delimited search_paths.extend(config.LOAD_PATHS.split(',')) else: search_paths.extend(config.LOAD_PATHS) search_paths.extend(self._scss_opts.get('load_paths', [])) # Normalize a few old styles of options output_style = self._scss_opts.get('style', config.STYLE) if output_style is True: output_style = 'compressed' elif output_style is False: output_style = 'legacy' fixed_search_path = [] for path in search_paths: if isinstance(path, six.string_types): fixed_search_path.append(Path(path)) else: fixed_search_path.append(path) # Build the compiler compiler = Compiler( namespace=root_namespace, extensions=[ CoreExtension, ExtraExtension, FontsExtension, CompassExtension, BootstrapExtension, ], search_path=fixed_search_path, import_static_css=import_static_css, live_errors=self.live_errors, generate_source_map=self._scss_opts.get('debug_info', False), output_style=output_style, warn_unused_imports=self._scss_opts.get('warn_unused', False), ignore_parse_errors=config.DEBUG, loops_have_own_scopes=config.CONTROL_SCOPING, undefined_variables_fatal=config.FATAL_UNDEFINED, super_selector=super_selector or self.super_selector, ) # Gonna add the source files manually compilation = compiler.make_compilation() # Inject the files we know about # TODO how does this work with the expectation of absoluteness if source_files is not None: for source in source_files: compilation.add_source(source) elif scss_string is not None: source = SourceFile.from_string( scss_string, relpath=filename, is_sass=is_sass, ) compilation.add_source(source) elif scss_file is not None: # This is now the only way to allow forcibly overriding the # filename a source "thinks" it is with open(scss_file, 'rb') as f: source = SourceFile.from_file( f, relpath=filename or scss_file, is_sass=is_sass, ) compilation.add_source(source) # Plus the ones from the constructor if self._scss_files: for name, contents in list(self._scss_files.items()): source = SourceFile.from_string(contents, relpath=name) compilation.add_source(source) compiled = compiler.call_and_catch_errors(compilation.run) self.source_files = list(SourceFileTuple(*os.path.split(s.path)) for s in compilation.source_index.values()) return compiled # Old, old alias Compilation = compile def get_scss_constants(self): scss_vars = self.root_namespace.variables return dict( (k, v) for k, v in scss_vars.items() if k and (not k.startswith('$') or k[1].isupper()) ) def get_scss_vars(self): scss_vars = self.root_namespace.variables return dict( (k, v) for k, v in scss_vars.items() if k and not (not k.startswith('$') and k[1].isupper()) ) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/less2scss.py����������������������������������������������������������������������0000664�0000000�0000000�00000006643�14205426364�0016270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- """ Tool for converting Less files to Scss Usage: python -m scss.less2scss [file] """ # http://stackoverflow.com/questions/14970224/anyone-know-of-a-good-way-to-convert-from-less-to-sass from __future__ import unicode_literals, absolute_import, print_function import re import os import sys class Less2Scss(object): at_re = re.compile(r'@(?!(media|import|mixin|font-face)(\s|\())') mixin_re = re.compile(r'\.([\w\-]*)\s*\((.*)\)\s*\{') include_re = re.compile(r'(\s|^)\.([\w\-]*\(?.*\)?;)') functions_map = { 'spin': 'adjust-hue', } functions_re = re.compile(r'(%s)\(' % '|'.join(functions_map)) def convert(self, content): content = self.convertVariables(content) content = self.convertMixins(content) content = self.includeMixins(content) content = self.convertFunctions(content) return content def convertVariables(self, content): # Matches any @ that doesn't have 'media ' or 'import ' after it. content = self.at_re.sub('$', content) return content def convertMixins(self, content): content = self.mixin_re.sub('@mixin \1(\2) {', content) return content def includeMixins(self, content): content = self.mixin_re.sub('\1@include \2', content) return content def convertFunctions(self, content): content = self.functions_re.sub(lambda m: '%s(' % self.functions_map[m.group(0)], content) return content def less2scss(options, args): if not args: args = ['-'] less2scss = Less2Scss() for source_path in args: if source_path == '-': source = sys.stdin destiny = sys.stdout else: try: source = open(source_path) destiny_path, ext = os.path.splitext(source_path) destiny_path += '.scss' if not options.force and os.path.exists(destiny_path): raise IOError("File already exists: %s" % destiny_path) destiny = open(destiny_path, 'w') except Exception as e: error = "%s" % e if destiny_path in error: ignoring = "Ignoring" else: ignoring = "Ignoring %s" % destiny_path print("WARNING -- %s. %s" % (ignoring, error), file=sys.stderr) continue content = source.read() content = less2scss.convert(content) destiny.write(content) def main(): from optparse import OptionParser, SUPPRESS_HELP parser = OptionParser(usage="Usage: %prog [file]", description="Converts Less files to Scss.", add_help_option=False) parser.add_option("-f", "--force", action="store_true", dest="force", default=False, help="Forces overwriting output file if it already exists") parser.add_option("-?", action="help", help=SUPPRESS_HELP) parser.add_option("-h", "--help", action="help", help="Show this message and exit") parser.add_option("-v", "--version", action="store_true", help="Print version and exit") options, args = parser.parse_args() if options.version: from scss.tool import print_version print_version() else: less2scss(options, args) if __name__ == "__main__": main() ���������������������������������������������������������������������������������������������pyScss-1.4.0/scss/namespace.py����������������������������������������������������������������������0000664�0000000�0000000�00000020475�14205426364�0016277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Support for Sass's namespacing rules.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import inspect import logging import six from scss.types import Undefined from scss.types import Value log = logging.getLogger(__name__) def normalize_var(name): assert isinstance(name, six.string_types) return name.replace('_', '-') class Scope(object): """Implements Sass variable scoping. Similar to `ChainMap`, except that assigning a new value will replace an existing value, not mask it. """ def __init__(self, maps=()): maps = list(maps) self.maps = [dict()] + maps def __repr__(self): return "<%s(%s) at 0x%x>" % (type(self).__name__, ', '.join(repr(map) for map in self.maps), id(self)) def __getitem__(self, key): for map in self.maps: if key in map: return map[key] raise KeyError(key) def __setitem__(self, key, value): self.set(key, value) def __contains__(self, key): for map in self.maps: if key in map: return True return False def keys(self): # For mapping interface keys = set() for map in self.maps: keys.update(map.keys()) return list(keys) def set(self, key, value, force_local=False): if not force_local: for map in self.maps: if key in map: if isinstance(map[key], Undefined): break map[key] = value return self.maps[0][key] = value def new_child(self): return type(self)(self.maps) class VariableScope(Scope): pass class FunctionScope(Scope): def __repr__(self): return "<%s(%s) at 0x%x>" % (type(self).__name__, ', '.join('[%s]' % ', '.join('%s:%s' % (f, n) for f, n in sorted(map.keys())) for map in self.maps), id(self)) class MixinScope(Scope): def __repr__(self): return "<%s(%s) at 0x%x>" % (type(self).__name__, ', '.join('[%s]' % ', '.join('%s:%s' % (f, n) for f, n in sorted(map.keys())) for map in self.maps), id(self)) class ImportScope(Scope): pass class Namespace(object): """...""" _mutable = True def __init__(self, variables=None, functions=None, mixins=None, mutable=True): self._mutable = mutable if variables is None: self._variables = VariableScope() else: # TODO parse into sass values once that's a thing, or require them # all to be self._variables = VariableScope([variables]) if functions is None: self._functions = FunctionScope() else: self._functions = FunctionScope([functions._functions]) self._mixins = MixinScope() self._imports = ImportScope() def _assert_mutable(self): if not self._mutable: raise AttributeError("This Namespace instance is immutable") @classmethod def derive_from(cls, *others): self = cls() if len(others) == 1: self._variables = others[0]._variables.new_child() self._functions = others[0]._functions.new_child() self._mixins = others[0]._mixins.new_child() self._imports = others[0]._imports.new_child() else: # Note that this will create a 2-dimensional scope where each of # these scopes is checked first in order. TODO is this right? self._variables = VariableScope(other._variables for other in others) self._functions = FunctionScope(other._functions for other in others) self._mixins = MixinScope(other._mixins for other in others) self._imports = ImportScope(other._imports for other in others) return self def derive(self): """Return a new child namespace. All existing variables are still readable and writeable, but any new variables will only exist within a new scope. """ return type(self).derive_from(self) def declare(self, function): """Insert a Python function into this Namespace, detecting its name and argument count automatically. """ self._auto_register_function(function, function.__name__) return function def declare_alias(self, name): """Insert a Python function into this Namespace with an explicitly-given name, but detect its argument count automatically. """ def decorator(f): self._auto_register_function(f, name) return f return decorator def declare_internal(self, function): """Like declare(), but the registered function will also receive the current namespace as its first argument. Useful for functions that inspect the state of the compilation, like ``variable-exists()``. Probably not so useful for anything else. """ function._pyscss_needs_namespace = True self._auto_register_function(function, function.__name__, 1) return function def _auto_register_function(self, function, name, ignore_args=0): name = name.replace('_', '-').rstrip('-') try: argspec = inspect.getfullargspec(function) varkw = argspec.varkw except AttributeError: # In python 2.7, getfulargspec does not exist. # Let's use getargspec as fallback. argspec = inspect.getargspec(function) varkw = argspec.keywords if argspec.varargs or varkw: # Accepts some arbitrary number of arguments arities = [None] else: # Accepts a fixed range of arguments if argspec.defaults: num_optional = len(argspec.defaults) else: num_optional = 0 num_args = len(argspec.args) - ignore_args arities = range(num_args - num_optional, num_args + 1) for arity in arities: self.set_function(name, arity, function) @property def variables(self): return dict((k, self._variables[k]) for k in self._variables.keys()) def variable(self, name, throw=False): name = normalize_var(name) return self._variables[name] def set_variable(self, name, value, local_only=False): self._assert_mutable() name = normalize_var(name) if not isinstance(value, Value): raise TypeError("Expected a Sass type, while setting %s got %r" % (name, value,)) self._variables.set(name, value, force_local=local_only) def has_import(self, source): return source.path in self._imports def add_import(self, source, parent_rule): self._assert_mutable() self._imports[source.path] = [ 0, parent_rule.source_file.path, parent_rule.file_and_line, ] def use_import(self, import_key): self._assert_mutable() if import_key and import_key in self._imports: imports = self._imports[import_key] imports[0] += 1 self.use_import(imports[1]) def unused_imports(self): unused = [] for import_key in self._imports.keys(): imports = self._imports[import_key] if not imports[0]: unused.append((import_key[0], imports[2])) return unused def _get_callable(self, chainmap, name, arity): name = normalize_var(name) if arity is not None: # With explicit arity, try the particular arity before falling back # to the general case (None) try: return chainmap[name, arity] except KeyError: pass return chainmap[name, None] def _set_callable(self, chainmap, name, arity, cb): name = normalize_var(name) chainmap[name, arity] = cb def mixin(self, name, arity): return self._get_callable(self._mixins, name, arity) def set_mixin(self, name, arity, cb): self._assert_mutable() self._set_callable(self._mixins, name, arity, cb) def function(self, name, arity): return self._get_callable(self._functions, name, arity) def set_function(self, name, arity, cb): self._assert_mutable() self._set_callable(self._functions, name, arity, cb) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/rule.py���������������������������������������������������������������������������0000664�0000000�0000000�00000026537�14205426364�0015317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import logging import re from scss.namespace import Namespace log = logging.getLogger(__name__) SORTED_SELECTORS = False sort = sorted if SORTED_SELECTORS else lambda it: it def extend_unique(seq, more): """Return a new sequence containing the items in `seq` plus any items in `more` that aren't already in `seq`, preserving the order of both. """ seen = set(seq) new = [] for item in more: if item not in seen: seen.add(item) new.append(item) return seq + type(seq)(new) class SassRule(object): """At its heart, a CSS rule: combination of a selector and zero or more properties. But this is Sass, so it also tracks some Sass-flavored metadata, like `@extend` rules and `@media` nesting. """ def __init__( self, source_file, import_key=None, unparsed_contents=None, num_header_lines=0, options=None, legacy_compiler_options=None, properties=None, namespace=None, lineno=0, extends_selectors=frozenset(), ancestry=None, nested=0, from_source_file=None, from_lineno=0): self.from_source_file = from_source_file self.from_lineno = from_lineno self.source_file = source_file self.import_key = import_key self.lineno = lineno self.num_header_lines = num_header_lines self.unparsed_contents = unparsed_contents self.legacy_compiler_options = legacy_compiler_options or {} self.options = options or {} self.extends_selectors = extends_selectors if namespace is None: assert False self.namespace = Namespace() else: self.namespace = namespace if properties is None: self.properties = [] else: self.properties = properties if ancestry is None: self.ancestry = RuleAncestry() else: self.ancestry = ancestry self.nested = nested self.descendants = 0 def __repr__(self): # TODO probably want to encode this with string_escape on python 2, and # similar elsewhere, especially since this file has unicode_literals return "" % ( self.ancestry, len(self.properties), ) @property def selectors(self): # TEMPORARY if self.ancestry.headers and self.ancestry.headers[-1].is_selector: return self.ancestry.headers[-1].selectors else: return () @property def file_and_line(self): """Return the filename and line number where this rule originally appears, in the form "foo.scss:3". Used for error messages. """ ret = "%s:%d" % (self.source_file.path, self.lineno) if self.from_source_file: ret += " (%s:%d)" % (self.from_source_file.path, self.from_lineno) return ret @property def is_empty(self): """Return whether this rule is considered "empty" -- i.e., has no contents that should end up in the final CSS. """ if self.properties: # Rules containing CSS properties are never empty return False if not self.descendants: for header in self.ancestry.headers: if header.is_atrule and header.directive != '@media': # At-rules should always be preserved, UNLESS they are @media # blocks, which are known to be noise if they don't have any # contents of their own return False return True @property def is_pure_placeholder(self): selectors = self.selectors if not selectors: return False for s in selectors: if not s.has_placeholder: return False return True def copy(self): return type(self)( source_file=self.source_file, lineno=self.lineno, from_source_file=self.from_source_file, from_lineno=self.from_lineno, unparsed_contents=self.unparsed_contents, legacy_compiler_options=self.legacy_compiler_options, options=self.options, #properties=list(self.properties), properties=self.properties, extends_selectors=self.extends_selectors, #ancestry=list(self.ancestry), ancestry=self.ancestry, namespace=self.namespace.derive(), nested=self.nested, ) class RuleAncestry(object): def __init__(self, headers=()): self.headers = tuple(headers) def __repr__(self): return "<%s %r>" % (type(self).__name__, self.headers) def __len__(self): return len(self.headers) def with_nested_selectors(self, c_selectors): if self.headers and self.headers[-1].is_selector: # Need to merge with parent selectors p_selectors = self.headers[-1].selectors new_selectors = [] for p_selector in p_selectors: for c_selector in c_selectors: new_selectors.append(c_selector.with_parent(p_selector)) # Replace the last header with the new merged selectors new_headers = self.headers[:-1] + (BlockSelectorHeader(new_selectors),) return RuleAncestry(new_headers) else: # Whoops, no parent selectors. Just need to double-check that # there are no uses of `&`. for c_selector in c_selectors: if c_selector.has_parent_reference: raise ValueError("Can't use parent selector '&' in top-level rules") # Add the children as a new header new_headers = self.headers + (BlockSelectorHeader(c_selectors),) return RuleAncestry(new_headers) def with_more_selectors(self, selectors): """Return a new ancestry that also matches the given selectors. No nesting is done. """ if self.headers and self.headers[-1].is_selector: new_selectors = extend_unique( self.headers[-1].selectors, selectors) new_headers = self.headers[:-1] + ( BlockSelectorHeader(new_selectors),) return RuleAncestry(new_headers) else: new_headers = self.headers + (BlockSelectorHeader(selectors),) return RuleAncestry(new_headers) class BlockHeader(object): """...""" # TODO doc me depending on how UnparsedBlock is handled... is_atrule = False is_scope = False is_selector = False @classmethod def parse(cls, prop, has_contents=False): num_lines = prop.count('\n') prop = prop.strip() # Simple pre-processing if prop.startswith('+') and not has_contents: # Expand '+' at the beginning of a rule as @include. But not if # there's a block, because that's probably a CSS selector. # DEVIATION: this is some semi hybrid of Sass and xCSS syntax prop = '@include ' + prop[1:] try: if '(' not in prop or prop.index(':') < prop.index('('): prop = prop.replace(':', '(', 1) if '(' in prop: prop += ')' except ValueError: pass elif prop.startswith('='): # Expand '=' at the beginning of a rule as @mixin prop = '@mixin ' + prop[1:] elif prop.startswith('@prototype '): # Remove '@prototype ' # TODO what is @prototype?? prop = prop[11:] # Minor parsing if prop.startswith('@'): # This pattern MUST NOT BE ABLE TO FAIL! # This is slightly more lax than the CSS syntax technically allows, # e.g. identifiers aren't supposed to begin with three hyphens. # But we don't care, and will just spit it back out anyway. m = re.match( '@(else if|[-_a-zA-Z0-9\U00000080-\U0010FFFF]*)\\b', prop, re.I) directive = m.group(0).lower() argument = prop[len(directive):].strip() if not argument: argument = None return BlockAtRuleHeader(directive, argument, num_lines) elif prop.split(None, 1)[0].endswith(':'): # Syntax is ": [prop]" -- if the optional prop exists, it # becomes the first rule with no suffix scope, unscoped_value = prop.split(':', 1) scope = scope.rstrip() unscoped_value = unscoped_value.lstrip() return BlockScopeHeader(scope, unscoped_value, num_lines) else: return BlockSelectorHeader(prop, num_lines) class BlockAtRuleHeader(BlockHeader): is_atrule = True def __init__(self, directive, argument, num_lines=0): self.directive = directive self.argument = argument self.num_lines = num_lines def __repr__(self): return "<%s %r %r>" % (type(self).__name__, self.directive, self.argument) def render(self): if self.argument: return "%s %s" % (self.directive, self.argument) else: return self.directive class BlockSelectorHeader(BlockHeader): is_selector = True def __init__(self, selectors, num_lines=0): self.selectors = tuple(selectors) self.num_lines = num_lines def __repr__(self): return "<%s %r>" % (type(self).__name__, self.selectors) def render(self, sep=', ', super_selector=''): return sep.join(sort( super_selector + s.render() for s in self.selectors if not s.has_placeholder)) class BlockScopeHeader(BlockHeader): is_scope = True def __init__(self, scope, unscoped_value, num_lines=0): self.scope = scope if unscoped_value: self.unscoped_value = unscoped_value else: self.unscoped_value = None self.num_lines = num_lines class UnparsedBlock(object): """A Sass block whose contents have not yet been parsed. At the top level, CSS (and Sass) documents consist of a sequence of blocks. A block may be a ruleset: selector { block; block; block... } Or it may be an @-rule: @rule arguments { block; block; block... } Or it may be only a single property declaration: property: value pyScss's first parsing pass breaks the document into these blocks, and each block becomes an instance of this class. """ def __init__(self, parent_rule, lineno, prop, unparsed_contents): self.parent_rule = parent_rule self.header = BlockHeader.parse(prop, has_contents=bool(unparsed_contents)) # Basic properties self.lineno = ( parent_rule.lineno - parent_rule.num_header_lines + lineno - 1) self.prop = prop self.unparsed_contents = unparsed_contents @property def directive(self): return self.header.directive @property def argument(self): return self.header.argument ### What kind of thing is this? @property def is_atrule(self): return self.header.is_atrule @property def is_scope(self): return self.header.is_scope �����������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/scss_meta.py����������������������������������������������������������������������0000664�0000000�0000000�00000004220�14205426364�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#-*- coding: utf-8 -*- """ pyScss, a Scss compiler for Python @author German M. Bravo (Kronuz) @version 1.4.0 @see https://github.com/Kronuz/pyScss @copyright (c) 2012-2013 German M. Bravo (Kronuz) @license MIT License http://www.opensource.org/licenses/mit-license.php pyScss compiles Scss, a superset of CSS that is more powerful, elegant and easier to maintain than plain-vanilla CSS. The library acts as a CSS source code preprocesor which allows you to use variables, nested rules, mixins, andhave inheritance of rules, all with a CSS-compatible syntax which the preprocessor then compiles to standard CSS. Scss, as an extension of CSS, helps keep large stylesheets well-organized. It borrows concepts and functionality from projects such as OOCSS and other similar frameworks like as Sass. It's build on top of the original PHP xCSS codebase structure but it's been completely rewritten, many bugs have been fixed and it has been extensively extended to support almost the full range of Sass' Scss syntax and functionality. Bits of code in pyScss come from various projects: Compass: (c) 2009 Christopher M. Eppstein http://compass-style.org/ Sass: (c) 2006-2009 Hampton Catlin and Nathan Weizenbaum http://sass-lang.com/ xCSS: (c) 2010 Anton Pawlik http://xcss.antpaw.org/docs/ This file defines Meta data, according to PEP314 (http://www.python.org/dev/peps/pep-0314/) which is common to both pyScss and setup.py distutils. We create this here so this information can be compatible with BOTH Python 2.x and Python 3.x so setup.py can use it when building pyScss for both Py3.x and Py2.x """ from __future__ import unicode_literals import sys VERSION_INFO = (1, 4, 0) DATE_INFO = (2022, 2, 23) # YEAR, MONTH, DAY VERSION = '.'.join(str(i) for i in VERSION_INFO) REVISION = '%04d%02d%02d' % DATE_INFO BUILD_INFO = "pyScss v" + VERSION + " (" + REVISION + ")" AUTHOR = "German M. Bravo (Kronuz)" AUTHOR_EMAIL = 'german.mb@gmail.com' URL = 'http://github.com/Kronuz/pyScss' DOWNLOAD_URL = 'http://github.com/Kronuz/pyScss/tarball/v' + VERSION LICENSE = "MIT" PROJECT = "pyScss" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/selector.py�����������������������������������������������������������������������0000664�0000000�0000000�00000055616�14205426364�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from __future__ import print_function import re from warnings import warn from scss.cssdefs import CSS2_PSEUDO_ELEMENTS # Super dumb little selector parser. # Yes, yes, this is a regex tokenizer. The actual meaning of the # selector doesn't matter; the parts are just important for matching up # during @extend. # Selectors have three levels: simple, combinator, comma-delimited. # Each combinator can only appear once as a delimiter between simple # selectors, so it can be thought of as a prefix. # So this: # a.b + c, d#e # parses into two Selectors with these structures: # [[' ', 'a', '.b'], ['+', 'c']] # [[' ', 'd', '#e']] # Note that the first simple selector has an implied descendant # combinator -- i.e., it is a descendant of the root element. # TODO `*html` is incorrectly parsed as a single selector # TODO this oughta be touched up for css4 selectors SELECTOR_TOKENIZER = re.compile(r''' # Colons introduce pseudo-selectors, sometimes with parens # TODO doesn't handle quoted ) [:]+ [-\w]+ (?: [(] .+? [)] )? # These guys are combinators -- note that a single space counts too | \s* [ +>~,] \s* # Square brackets are attribute tests # TODO: this doesn't handle ] within a string | \[ .+? \] # Dot and pound start class/id selectors. Percent starts a Sass # extend-target faux selector. | [.#%] [-\w]+ # Percentages are used for @keyframes | [-.\d]+ [%] # Plain identifiers, or single asterisks, are element names | [-\w]+ | [*] # & is the sass replacement token | [&] # And as a last-ditch effort, just eat up to whitespace | (\S+) ''', re.VERBOSE | re.MULTILINE) # Set of starting squiggles that are known to mean "this is a general # commutative token", i.e., not an element BODY_TOKEN_SIGILS = frozenset('#.[:%') def _is_combinator_subset_of(specific, general, is_first=True): """Return whether `specific` matches a non-strict subset of what `general` matches. """ if is_first and general == ' ': # First selector always has a space to mean "descendent of root", which # still holds if any other selector appears above it return True if specific == general: return True if specific == '>' and general == ' ': return True if specific == '+' and general == '~': return True return False class SimpleSelector(object): """A simple selector, by CSS 2.1 terminology: a combination of element name, class selectors, id selectors, and other criteria that all apply to a single element. Note that CSS 3 considers EACH of those parts to be a "simple selector", and calls a group of them a "sequence of simple selectors". That's a terrible class name, so we're going with 2.1 here. For lack of a better name, each of the individual parts is merely called a "token". Note that it's possible to have zero tokens. This isn't legal CSS, but it's perfectly legal Sass, since you might nest blocks like so: body > { div { ... } } """ def __init__(self, combinator, tokens): self.combinator = combinator # TODO enforce that only one element name (including *) appears in a # selector. only one pseudo, too. # TODO remove duplicates? self.tokens = tuple(tokens) def __repr__(self): return "<%s: %r>" % (type(self).__name__, self.render()) def __hash__(self): return hash((self.combinator, self.tokens)) def __eq__(self, other): if not isinstance(other, SimpleSelector): return NotImplemented return ( self.combinator == other.combinator and self.tokens == other.tokens) @property def has_parent_reference(self): return '&' in self.tokens or 'self' in self.tokens @property def has_placeholder(self): for token in self.tokens: if token.startswith('%'): return True return False def is_superset_of(self, other, soft_combinator=False): """Return True iff this selector matches the same elements as `other`, and perhaps others. That is, ``.foo`` is a superset of ``.foo.bar``, because the latter is more specific. Set `soft_combinator` true to ignore the specific case of this selector having a descendent combinator and `other` having anything else. This is for superset checking for ``@extend``, where a space combinator really means "none". """ # Combinators must match, OR be compatible -- space is a superset of >, # ~ is a superset of + if soft_combinator and self.combinator == ' ': combinator_superset = True else: combinator_superset = ( self.combinator == other.combinator or (self.combinator == ' ' and other.combinator == '>') or (self.combinator == '~' and other.combinator == '+')) return ( combinator_superset and set(self.tokens) <= set(other.tokens)) def replace_parent(self, parent_simples): """If ``&`` (or the legacy xCSS equivalent ``self``) appears in this selector, replace it with the given iterable of parent selectors. Returns a tuple of simple selectors. """ assert parent_simples ancestors = parent_simples[:-1] parent = parent_simples[-1] did_replace = False new_tokens = [] for token in self.tokens: if not did_replace and token in ('&', 'self'): did_replace = True new_tokens.extend(parent.tokens) if token == 'self': warn(FutureWarning( "The xCSS 'self' selector is deprecated and will be " "removed in 2.0. Use & instead. ({0!r})" .format(self) )) else: new_tokens.append(token) if not did_replace: # This simple selector doesn't contain a parent reference so just # stick it on the end return parent_simples + (self,) # This simple selector was merged into the direct parent. merged_self = type(self)(parent.combinator, new_tokens) selector = ancestors + (merged_self,) # Our combinator goes on the first ancestor, i.e., substituting "foo # bar baz" into "+ &.quux" produces "+ foo bar baz.quux". This means a # potential conflict with the first ancestor's combinator! root = selector[0] if not _is_combinator_subset_of(self.combinator, root.combinator): raise ValueError( "Can't sub parent {0!r} into {1!r}: " "combinators {2!r} and {3!r} conflict!" .format( parent_simples, self, self.combinator, root.combinator)) root = type(self)(self.combinator, root.tokens) selector = (root,) + selector[1:] return tuple(selector) def merge_into(self, other): """Merge two simple selectors together. This is expected to be the selector being injected into `other` -- that is, `other` is the selector for a block using ``@extend``, and `self` is a selector being extended. Element tokens must come first, and pseudo-element tokens must come last, and there can only be one of each. The final selector thus looks something like:: [element] [misc self tokens] [misc other tokens] [pseudo-element] This method does not check for duplicate tokens; those are assumed to have been removed earlier, during the search for a hinge. """ # TODO it shouldn't be possible to merge two elements or two pseudo # elements, /but/ it shouldn't just be a fatal error here -- it # shouldn't even be considered a candidate for extending! # TODO this is slightly inconsistent with ruby, which treats a trailing # set of self tokens like ':before.foo' as a single unit to be stuck at # the end. but that's completely bogus anyway. element = [] middle = [] pseudo = [] for token in self.tokens + other.tokens: if token in CSS2_PSEUDO_ELEMENTS or token.startswith('::'): pseudo.append(token) elif token[0] in BODY_TOKEN_SIGILS: middle.append(token) else: element.append(token) new_tokens = element + middle + pseudo if self.combinator == ' ' or self.combinator == other.combinator: combinator = other.combinator elif other.combinator == ' ': combinator = self.combinator else: raise ValueError( "Don't know how to merge conflicting combinators: " "{0!r} and {1!r}" .format(self, other)) return type(self)(combinator, new_tokens) def difference(self, other): new_tokens = tuple(token for token in self.tokens if token not in set(other.tokens)) return type(self)(self.combinator, new_tokens) def render(self): # TODO fail if there are no tokens, or if one is a placeholder? rendered = ''.join(self.tokens) if self.combinator == ' ': return rendered elif rendered: return self.combinator + ' ' + rendered else: return self.combinator class Selector(object): """A single CSS selector.""" def __init__(self, simples): """Return a selector containing a sequence of `SimpleSelector`s. You probably want to use `parse_many` or `parse_one` instead. """ # TODO enforce uniqueness self.simple_selectors = tuple(simples) @classmethod def parse_many(cls, selector): selector = selector.strip() ret = [] pending = dict( simples=[], combinator=' ', tokens=[], ) def promote_simple(): if pending['tokens']: pending['simples'].append( SimpleSelector(pending['combinator'], pending['tokens'])) pending['combinator'] = ' ' pending['tokens'] = [] def promote_selector(): promote_simple() if pending['combinator'] != ' ': pending['simples'].append( SimpleSelector(pending['combinator'], [])) pending['combinator'] = ' ' if pending['simples']: ret.append(cls(pending['simples'])) pending['simples'] = [] pos = 0 while pos < len(selector): # TODO i don't think this deals with " + " correctly. anywhere. # TODO this used to turn "1.5%" into empty string; why does error # not work? m = SELECTOR_TOKENIZER.match(selector, pos) if not m: # TODO prettify me raise SyntaxError("Couldn't parse selector: %r" % (selector,)) token = m.group(0) pos += len(token) # Kill any extraneous space, BUT make sure not to turn a lone space # into an empty string token = token.strip() or ' ' if token == ',': # End current selector promote_selector() elif token in ' +>~': # End current simple selector promote_simple() pending['combinator'] = token else: # Add to pending simple selector pending['tokens'].append(token) # Deal with any remaining pending bits promote_selector() return ret @classmethod def parse_one(cls, selector_string): selectors = cls.parse_many(selector_string) if len(selectors) != 1: # TODO better error raise ValueError return selectors[0] def __repr__(self): return "<%s: %r>" % (type(self).__name__, self.render()) def __hash__(self): return hash(self.simple_selectors) def __eq__(self, other): if not isinstance(other, Selector): return NotImplemented return self.simple_selectors == other.simple_selectors @property def has_parent_reference(self): for simple in self.simple_selectors: if simple.has_parent_reference: return True return False @property def has_placeholder(self): for simple in self.simple_selectors: if simple.has_placeholder: return True return False def with_parent(self, parent): saw_parent_ref = False new_simples = [] for simple in self.simple_selectors: if simple.has_parent_reference: new_simples.extend(simple.replace_parent(parent.simple_selectors)) saw_parent_ref = True else: new_simples.append(simple) if not saw_parent_ref: new_simples = parent.simple_selectors + tuple(new_simples) return type(self)(new_simples) def lookup_key(self): """Build a key from the "important" parts of a selector: elements, classes, ids. """ parts = set() for node in self.simple_selectors: for token in node.tokens: if token[0] not in ':[': parts.add(token) if not parts: # Should always have at least ONE key; selectors with no elements, # no classes, and no ids can be indexed as None to avoid a scan of # every selector in the entire document parts.add(None) return frozenset(parts) def is_superset_of(self, other): assert isinstance(other, Selector) idx = 0 for other_node in other.simple_selectors: if idx >= len(self.simple_selectors): return False while idx < len(self.simple_selectors): node = self.simple_selectors[idx] idx += 1 if node.is_superset_of(other_node): break return True def substitute(self, target, replacement): """Return a list of selectors obtained by replacing the `target` selector with `replacement`. Herein lie the guts of the Sass @extend directive. In general, for a selector ``a X b Y c``, a target ``X Y``, and a replacement ``q Z``, return the selectors ``a q X b Z c`` and ``q a X b Z c``. Note in particular that no more than two selectors will be returned, and the permutation of ancestors will never insert new simple selectors "inside" the target selector. """ # Find the target in the parent selector, and split it into # before/after p_before, p_extras, p_after = self.break_around(target.simple_selectors) # The replacement has no hinge; it only has the most specific simple # selector (which is the part that replaces "self" in the parent) and # whatever preceding simple selectors there may be r_trail = replacement.simple_selectors[:-1] r_extras = replacement.simple_selectors[-1] # TODO what if the prefix doesn't match? who wins? should we even get # this far? focal_nodes = (p_extras.merge_into(r_extras),) befores = _merge_selectors(p_before, r_trail) cls = type(self) return [ cls(before + focal_nodes + p_after) for before in befores] def break_around(self, hinge): """Given a simple selector node contained within this one (a "hinge"), break it in half and return a parent selector, extra specifiers for the hinge, and a child selector. That is, given a hinge X, break the selector A + X.y B into A, + .y, and B. """ hinge_start = hinge[0] for i, node in enumerate(self.simple_selectors): # In this particular case, a ' ' combinator actually means "no" (or # any) combinator, so it should be ignored if hinge_start.is_superset_of(node, soft_combinator=True): start_idx = i break else: raise ValueError( "Couldn't find hinge %r in compound selector %r" % (hinge_start, self.simple_selectors)) for i, hinge_node in enumerate(hinge): if i == 0: # We just did this continue self_node = self.simple_selectors[start_idx + i] if hinge_node.is_superset_of(self_node): continue # TODO this isn't true; consider finding `a b` in `a c a b` raise ValueError( "Couldn't find hinge %r in compound selector %r" % (hinge_node, self.simple_selectors)) end_idx = start_idx + len(hinge) - 1 focal_node = self.simple_selectors[end_idx] extras = focal_node.difference(hinge[-1]) return ( self.simple_selectors[:start_idx], extras, self.simple_selectors[end_idx + 1:]) def render(self): return ' '.join(simple.render() for simple in self.simple_selectors) def _merge_selectors(left, right): """Given two selector chains (lists of simple selectors), return a list of selector chains representing elements matched by both of them. This operation is not exact, and involves some degree of fudging -- the wackier and more divergent the input, the more fudging. It's meant to be what a human might expect rather than a precise covering of all possible cases. Most notably, when the two input chains have absolutely nothing in common, the output is merely ``left + right`` and ``right + left`` rather than all possible interleavings. """ if not left or not right: # At least one is empty, so there are no conflicts; just return # whichever isn't empty. Remember to return a LIST, though return [left or right] lcs = longest_common_subsequence(left, right, _merge_simple_selectors) ret = [()] # start with a dummy empty chain or weaving won't work left_last = 0 right_last = 0 for left_next, right_next, merged in lcs: ret = _weave_conflicting_selectors( ret, left[left_last:left_next], right[right_last:right_next], (merged,)) left_last = left_next + 1 right_last = right_next + 1 ret = _weave_conflicting_selectors( ret, left[left_last:], right[right_last:]) return ret def _weave_conflicting_selectors(prefixes, a, b, suffix=()): """Part of the selector merge algorithm above. Not useful on its own. Pay no attention to the man behind the curtain. """ # OK, what this actually does: given a list of selector chains, two # "conflicting" selector chains, and an optional suffix, return a new list # of chains like this: # prefix[0] + a + b + suffix, # prefix[0] + b + a + suffix, # prefix[1] + a + b + suffix, # ... # In other words, this just appends a new chain to each of a list of given # chains, except that the new chain might be the superposition of two # other incompatible chains. both = a and b for prefix in prefixes: yield prefix + a + b + suffix if both: # Only use both orderings if there's an actual conflict! yield prefix + b + a + suffix def _merge_simple_selectors(a, b): """Merge two simple selectors, for the purposes of the LCS algorithm below. In practice this returns the more specific selector if one is a subset of the other, else it returns None. """ # TODO what about combinators if a.is_superset_of(b): return b elif b.is_superset_of(a): return a else: return None def longest_common_subsequence(a, b, mergefunc=None): """Find the longest common subsequence between two iterables. The longest common subsequence is the core of any diff algorithm: it's the longest sequence of elements that appears in both parent sequences in the same order, but NOT necessarily consecutively. Original algorithm borrowed from Wikipedia: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem#Code_for_the_dynamic_programming_solution This function is used only to implement @extend, largely because that's what the Ruby implementation does. Thus it's been extended slightly from the simple diff-friendly algorithm given above. What @extend wants to know is whether two simple selectors are compatible, not just equal. To that end, you must pass in a "merge" function to compare a pair of elements manually. It should return `None` if they are incompatible, and a MERGED element if they are compatible -- in the case of selectors, this is whichever one is more specific. Because of this fuzzier notion of equality, the return value is a list of ``(a_index, b_index, value)`` tuples rather than items alone. """ if mergefunc is None: # Stupid default, just in case def mergefunc(a, b): if a == b: return a return None # Precalculate equality, since it can be a tad expensive and every pair is # compared at least once eq = {} for ai, aval in enumerate(a): for bi, bval in enumerate(b): eq[ai, bi] = mergefunc(aval, bval) # Build the "length" matrix, which provides the length of the LCS for # arbitrary-length prefixes. -1 exists only to support the base case prefix_lcs_length = {} for ai in range(-1, len(a)): for bi in range(-1, len(b)): if ai == -1 or bi == -1: l = 0 elif eq[ai, bi]: l = prefix_lcs_length[ai - 1, bi - 1] + 1 else: l = max( prefix_lcs_length[ai, bi - 1], prefix_lcs_length[ai - 1, bi]) prefix_lcs_length[ai, bi] = l # The interesting part. The key insight is that the bottom-right value in # the length matrix must be the length of the LCS because of how the matrix # is defined, so all that's left to do is backtrack from the ends of both # sequences in whatever way keeps the LCS as long as possible, and keep # track of the equal pairs of elements we see along the way. # Wikipedia does this with recursion, but the algorithm is trivial to # rewrite as a loop, as below. ai = len(a) - 1 bi = len(b) - 1 ret = [] while ai >= 0 and bi >= 0: merged = eq[ai, bi] if merged is not None: ret.append((ai, bi, merged)) ai -= 1 bi -= 1 elif prefix_lcs_length[ai, bi - 1] > prefix_lcs_length[ai - 1, bi]: bi -= 1 else: ai -= 1 # ret has the latest items first, which is backwards ret.reverse() return ret ������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/setup.py��������������������������������������������������������������������������0000664�0000000�0000000�00000000504�14205426364�0015472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from distutils.core import setup, Extension setup(name='pyScss', version='1.1.1', description='pyScss', ext_modules=[ Extension( '_scss', sources=['src/_scss.c', 'src/block_locator.c', 'src/scanner.c'], libraries=['pcre'], optional=True ) ] ) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/source.py�������������������������������������������������������������������������0000664�0000000�0000000�00000031165�14205426364�0015641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals from __future__ import division import hashlib import logging from pathlib import Path import re import six from scss.cssdefs import ( _ml_comment_re, _sl_comment_re, _collapse_properties_space_re, _strings_re, _urls_re, ) from scss.cssdefs import determine_encoding log = logging.getLogger(__name__) _safe_strings = { '^doubleslash^': '//', '^bigcopen^': '/*', '^bigcclose^': '*/', '^doubledot^': ':', '^semicolon^': ';', '^curlybracketopen^': '{', '^curlybracketclosed^': '}', } _reverse_safe_strings = dict((v, k) for k, v in _safe_strings.items()) _safe_strings_re = re.compile('|'.join(map(re.escape, _safe_strings))) _reverse_safe_strings_re = re.compile('|'.join( map(re.escape, _reverse_safe_strings))) class MISSING(object): def __repr__(self): return "" MISSING = MISSING() # TODO i'm still not entirely happy with this, nor with the concept of an # "origin". it should really be a "loader", with a defined API. also, even # with all these helpful classmethods, i'm still having to do a lot of manual # mucking around in django-pyscss, where all i'm given is a file path and a # string of the contents, and i want to /not/ re-read the file. class SourceFile(object): """A single input file to be fed to the compiler. Detects the encoding (according to CSS spec rules) and performs some light pre-processing. This class is mostly internal and you shouldn't have to worry about it. Source files are uniquely identified by their ``.key``, a 2-tuple of ``(origin, relpath)``. ``origin`` is an object from the compiler's search path, most often a directory represented by a :class:`pathlib.Path`. ``relpath`` is a relative path from there to the actual file, again usually a ``Path``. The idea here is that source files don't always actually come from the filesystem, yet import semantics are expressed in terms of paths. By keeping the origin and relative path separate, it's possible for e.g. Django to swap in an object that has the ``Path`` interface, but actually looks for files in an arbitrary storage backend. In that case it would make no sense to key files by their absolute path, as they may not exist on disk or even on the same machine. Also, relative imports can then continue to work, because they're guaranteed to only try the same origin. The ``origin`` may thus be anything that implements a minimal ``Path``ish interface (division operator, ``.parent``, ``.resolve()``). It may also be ``None``, indicating that the file came from a string or some other origin that can't usefully produce other files. ``relpath``, however, should always be a ``Path``. or string. XXX only when origin (There's little advantage to making it anything else.) A ``relpath`` may **never** contain ".."; there is nothing above the origin. Note that one minor caveat of this setup is that it's possible for the same file on disk to be imported under two different names (even though symlinks are always resolved), if directories in the search path happen to overlap. """ key = None """A 2-tuple of ``(origin, relpath)`` that uniquely identifies where the file came from and how to find its siblings. """ def __init__( self, origin, relpath, contents, encoding=None, is_sass=None): """Not normally used. See the three alternative constructors: :func:`SourceFile.from_file`, :func:`SourceFile.from_path`, and :func:`SourceFile.from_string`. """ if not isinstance(contents, six.text_type): raise TypeError( "Expected text for 'contents', got {0}" .format(type(contents))) if origin and '..' in relpath.parts: raise ValueError( "relpath cannot contain ..: {0!r}".format(relpath)) self.origin = origin self.relpath = relpath self.key = origin, relpath self.encoding = encoding if is_sass is None: # TODO autodetect from the contents if the extension is bogus # or missing? if origin: self.is_sass = relpath.suffix == '.sass' else: self.is_sass = False else: self.is_sass = is_sass self.contents = self.prepare_source(contents) @property def path(self): """Concatenation of ``origin`` and ``relpath``, as a string. Used in stack traces and other debugging places. """ if self.origin: return six.text_type(self.origin / self.relpath) else: return six.text_type(self.relpath) def __repr__(self): return "<{0} {1!r} from {2!r}>".format( type(self).__name__, self.relpath, self.origin) def __hash__(self): return hash(self.key) def __eq__(self, other): if self is other: return True if not isinstance(other, SourceFile): return NotImplemented return self.key == other.key def __ne__(self, other): return not self == other @classmethod def _key_from_path(cls, path, origin=MISSING): # Given an origin (which may be MISSING) and an absolute path, # return a key. if origin is MISSING: # Resolve only the parent, in case the file itself is a symlink origin = path.parent.resolve() relpath = Path(path.name) else: # Again, resolving the origin is fine; we just don't want to # resolve anything inside it, lest we ruin some intended symlink # structure origin = origin.resolve() # pathlib balks if this requires lexically ascending <3 relpath = path.relative_to(origin) return origin, relpath @classmethod def read(cls, origin, relpath, **kwargs): """Read a source file from an ``(origin, relpath)`` tuple, as would happen from an ``@import`` statement. """ path = origin / relpath with path.open('rb') as f: return cls.from_file(f, origin, relpath, **kwargs) @classmethod def from_path(cls, path, origin=MISSING, **kwargs): """Read Sass source from a :class:`pathlib.Path`. If no origin is given, it's assumed to be the file's parent directory. """ origin, relpath = cls._key_from_path(path, origin) # Open in binary mode so we can reliably detect the encoding with path.open('rb') as f: return cls.from_file(f, origin, relpath, **kwargs) # back-compat @classmethod def from_filename(cls, path_string, origin=MISSING, **kwargs): """ Read Sass source from a String specifying the path """ path = Path(path_string) return cls.from_path(path, origin, **kwargs) @classmethod def from_file(cls, f, origin=MISSING, relpath=MISSING, **kwargs): """Read Sass source from a file or file-like object. If `origin` or `relpath` are missing, they are derived from the file's ``.name`` attribute as with `from_path`. If it doesn't have one, the origin becomes None and the relpath becomes the file's repr. """ contents = f.read() encoding = determine_encoding(contents) if isinstance(contents, six.binary_type): contents = contents.decode(encoding) if origin is MISSING or relpath is MISSING: filename = getattr(f, 'name', None) if filename is None: origin = None relpath = repr(f) else: origin, relpath = cls._key_from_path(Path(filename), origin) return cls(origin, relpath, contents, encoding=encoding, **kwargs) @classmethod def from_string(cls, string, relpath=None, encoding=None, is_sass=None): """Read Sass source from the contents of a string. The origin is always None. `relpath` defaults to "string:...". """ if isinstance(string, six.text_type): # Already decoded; we don't know what encoding to use for output, # though, so still check for a @charset. # TODO what if the given encoding conflicts with the one in the # file? do we care? if encoding is None: encoding = determine_encoding(string) byte_contents = string.encode(encoding) text_contents = string elif isinstance(string, six.binary_type): encoding = determine_encoding(string) byte_contents = string text_contents = string.decode(encoding) else: raise TypeError("Expected text or bytes, got {0!r}".format(string)) origin = None if relpath is None: m = hashlib.sha256() m.update(byte_contents) relpath = repr("string:{0}:{1}".format( m.hexdigest()[:16], text_contents[:100])) return cls( origin, relpath, text_contents, encoding=encoding, is_sass=is_sass, ) def parse_scss_line(self, line, state): ret = '' if line is None: line = '' line = state['line_buffer'] + line if line and line[-1] == '\\': state['line_buffer'] = line[:-1] return '' else: state['line_buffer'] = '' output = state['prev_line'] output = output.strip() state['prev_line'] = line ret += output ret += '\n' return ret def parse_sass_line(self, line, state): ret = '' if line is None: line = '' line = state['line_buffer'] + line if line and line[-1] == '\\': state['line_buffer'] = line[:-1] return ret else: state['line_buffer'] = '' indent = len(line) - len(line.lstrip()) # make sure we support multi-space indent as long as indent is # consistent if indent and not state['indent_marker']: state['indent_marker'] = indent if state['indent_marker']: indent //= state['indent_marker'] if indent == state['prev_indent']: # same indentation as previous line if state['prev_line']: state['prev_line'] += ';' elif indent > state['prev_indent']: # new indentation is greater than previous, we just entered a new # block state['prev_line'] += ' {' state['nested_blocks'] += 1 else: # indentation is reset, we exited a block block_diff = state['prev_indent'] - indent if state['prev_line']: state['prev_line'] += ';' state['prev_line'] += ' }' * block_diff state['nested_blocks'] -= block_diff output = state['prev_line'] output = output.strip() state['prev_indent'] = indent state['prev_line'] = line ret += output ret += '\n' return ret def prepare_source(self, codestr, sass=False): state = { 'line_buffer': '', 'prev_line': '', 'prev_indent': 0, 'nested_blocks': 0, 'indent_marker': 0, } if self.is_sass: parse_line = self.parse_sass_line else: parse_line = self.parse_scss_line _codestr = codestr codestr = '' for line in _codestr.splitlines(): codestr += parse_line(line, state) # parse the last line stored in prev_line buffer codestr += parse_line(None, state) # pop off the extra \n parse_line puts at the beginning codestr = codestr[1:] # protects codestr: "..." strings codestr = _strings_re.sub( lambda m: _reverse_safe_strings_re.sub( lambda n: _reverse_safe_strings[n.group(0)], m.group(0)), codestr) codestr = _urls_re.sub( lambda m: _reverse_safe_strings_re.sub( lambda n: _reverse_safe_strings[n.group(0)], m.group(0)), codestr) # removes multiple line comments codestr = _ml_comment_re.sub('', codestr) # removes inline comments, but not :// (protocol) codestr = _sl_comment_re.sub('', codestr) codestr = _safe_strings_re.sub( lambda m: _safe_strings[m.group(0)], codestr) # collapse the space in properties blocks codestr = _collapse_properties_space_re.sub(r'\1{', codestr) return codestr �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0014550�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/_speedups.c�������������������������������������������������������������������0000664�0000000�0000000�00000042306�14205426364�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #define PY_SSIZE_T_CLEAN #include #include "py3defs.h" #include "block_locator.h" #include "scanner.h" /* BlockLocator */ static PyTypeObject scss_BlockLocatorType; typedef struct { PyObject_HEAD BlockLocator *locator; } scss_BlockLocator; static char* scss_pyunicode_to_utf8(PyObject* obj, Py_ssize_t* len) { char* internal_buffer; char* ret; PyObject* intermediate_bytes; intermediate_bytes = PyUnicode_AsUTF8String(obj); assert(intermediate_bytes != NULL); internal_buffer = PyBytes_AsString(intermediate_bytes); *len = (int)PyBytes_Size(intermediate_bytes); ret = PyMem_New(char, *len + 1); memcpy(ret, internal_buffer, *len + 1); Py_DECREF(intermediate_bytes); return ret; } static int scss_BlockLocator_init(scss_BlockLocator *self, PyObject *args, PyObject *kwds) { PyUnicodeObject *codestr; int codestr_sz; self->locator = NULL; if (!PyArg_ParseTuple(args, "U", &codestr, &codestr_sz)) { return -1; } self->locator = BlockLocator_new(codestr); #ifdef DEBUG PySys_WriteStderr("Scss BlockLocator object initialized! (%lu bytes)\n", sizeof(scss_BlockLocator)); #endif return 0; } static void scss_BlockLocator_dealloc(scss_BlockLocator *self) { if (self->locator != NULL) BlockLocator_del(self->locator); Py_TYPE(self)->tp_free((PyObject*)self); #ifdef DEBUG PySys_WriteStderr("Scss BlockLocator object destroyed!\n"); #endif } scss_BlockLocator* scss_BlockLocator_iter(scss_BlockLocator *self) { Py_INCREF(self); return self; } PyObject* scss_BlockLocator_iternext(scss_BlockLocator *self) { Block *block; if (self->locator != NULL) { block = BlockLocator_iternext(self->locator); if (block->error > 0) { return Py_BuildValue( "iu#u#", block->lineno, block->selprop, block->selprop_sz, block->codestr, block->codestr_sz ); } if (block->error < 0) { PyErr_SetString(PyExc_Exception, self->locator->exc); return NULL; } } /* Raising of standard StopIteration exception with empty value. */ PyErr_SetNone(PyExc_StopIteration); return NULL; } /* Type definition */ static PyTypeObject scss_BlockLocatorType = { PyVarObject_HEAD_INIT(NULL, 0) "scss._BlockLocator", /* tp_name */ sizeof(scss_BlockLocator), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)scss_BlockLocator_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /* tp_flags */ "Internal BlockLocator iterator object.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)scss_BlockLocator_iter, /* tp_iter: __iter__() method */ (iternextfunc)scss_BlockLocator_iternext, /* tp_iternext: next() method */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)scss_BlockLocator_init, /* tp_init */ }; /* Scanner */ static PyObject *PyExc_scss_NoMoreTokens; static PyTypeObject scss_ScannerType; typedef struct { PyObject_HEAD Scanner *scanner; PyObject *py_input; } scss_Scanner; static PyObject * scss_Scanner_rewind(scss_Scanner *self, PyObject *args) { int token_num; if (self->scanner != NULL) { if (PyArg_ParseTuple(args, "i", &token_num)) { Scanner_rewind(self->scanner, token_num); } } Py_INCREF(Py_None); return (PyObject *)Py_None; } static PyObject * scss_Scanner_token(scss_Scanner *self, PyObject *args) { PyObject *iter; PyObject *item; long size, hash; Token *p_token; PyObject *py_tok; PyObject *py_token; char *tok; int token_num; Py_ssize_t len; PyObject *restrictions = NULL; Hashtable *_restrictions = NULL; if (self->scanner != NULL) { if (PyArg_ParseTuple(args, "i|O", &token_num, &restrictions)) { if (restrictions != NULL) { hash = PyObject_Hash(restrictions); _restrictions = Hashtable_get(self->scanner->restrictions_cache, &hash, sizeof(hash)); if (_restrictions == NULL) { size = PySequence_Size(restrictions); if (size != -1) { _restrictions = Hashtable_create(64); iter = PyObject_GetIter(restrictions); while ((item = PyIter_Next(iter))) { if (PyUnicode_Check(item)) { tok = scss_pyunicode_to_utf8(item, &len); Hashtable_set(_restrictions, tok, len + 1, (void *)-1); } Py_DECREF(item); } Py_DECREF(iter); } Hashtable_set(self->scanner->restrictions_cache, &hash, sizeof(hash), _restrictions); } } p_token = Scanner_token(self->scanner, token_num, _restrictions); if (p_token == (Token *)SCANNER_EXC_BAD_TOKEN || p_token == (Token *)SCANNER_EXC_RESTRICTED) { PyObject *scss_errors_module = PyImport_ImportModule("scss.errors"); PyObject *syntax_error_cls = PyObject_GetAttrString(scss_errors_module, "SassSyntaxError"); PyObject *position = PyLong_FromLong(self->scanner->pos); PyObject *syntax_error = PyObject_CallFunctionObjArgs( syntax_error_cls, self->py_input, position, restrictions, NULL); Py_DECREF(scss_errors_module); Py_DECREF(position); PyErr_SetObject(syntax_error_cls, syntax_error); Py_DECREF(syntax_error_cls); Py_DECREF(syntax_error); return NULL; } if (p_token == (Token *)SCANNER_EXC_UNIMPLEMENTED) { PyErr_SetString(PyExc_NotImplementedError, self->scanner->exc); return NULL; } if (p_token == (Token *)SCANNER_EXC_NO_MORE_TOKENS) { PyErr_SetNone(PyExc_scss_NoMoreTokens); return NULL; } if (p_token < 0) { PyErr_SetNone(PyExc_Exception); return NULL; } py_tok = PyUnicode_DecodeUTF8(p_token->regex->tok, strlen(p_token->regex->tok), "strict"); if (py_tok == NULL) { return NULL; } py_token = PyUnicode_DecodeUTF8(p_token->string, p_token->string_sz, "strict"); if (py_token == NULL) { return NULL; } return Py_BuildValue( "iiOO", p_token->string - self->scanner->input, p_token->string - self->scanner->input + p_token->string_sz, py_tok, py_token ); } } Py_INCREF(Py_None); return (PyObject *)Py_None; } static PyObject * scss_Scanner_reset(scss_Scanner *self, PyObject *args, PyObject *kwds) { char *input = NULL; Py_ssize_t input_sz = 0; if (self->scanner != NULL) { if (PyArg_ParseTuple(args, "|z#", &input, &input_sz)) { Scanner_reset(self->scanner, input, input_sz); } } Py_INCREF(Py_None); return (PyObject *)Py_None; } static PyObject * scss_Scanner_setup_patterns(PyObject *self, PyObject *patterns) { PyObject *item, *item0, *item1; int i, is_tuple, _is_tuple; Py_ssize_t size; Pattern *_patterns = NULL; int patterns_sz = 0; Py_ssize_t len; if (!Scanner_initialized()) { is_tuple = PyTuple_Check(patterns); if (is_tuple || PyList_Check(patterns)) { size = is_tuple ? PyTuple_Size(patterns) : PyList_Size(patterns); _patterns = PyMem_New(Pattern, size); for (i = 0; i < size; ++i) { item = is_tuple ? PyTuple_GetItem(patterns, i) : PyList_GetItem(patterns, i); _is_tuple = PyTuple_Check(item); if (_is_tuple || PyList_Check(item)) { item0 = _is_tuple ? PyTuple_GetItem(item, 0) : PyList_GetItem(item, 0); item1 = _is_tuple ? PyTuple_GetItem(item, 1) : PyList_GetItem(item, 1); if (PyUnicode_Check(item0) && PyUnicode_Check(item1)) { _patterns[patterns_sz].tok = scss_pyunicode_to_utf8(item0, &len); _patterns[patterns_sz].expr = scss_pyunicode_to_utf8(item1, &len); patterns_sz++; } } } } Scanner_initialize(_patterns, patterns_sz); if (_patterns != NULL) PyMem_Del(_patterns); } Py_INCREF(Py_None); return (PyObject *)Py_None; } static int scss_Scanner_init(scss_Scanner *self, PyObject *args, PyObject *kwds) { PyObject *item, *item0, *item1; int i, is_tuple, _is_tuple; Py_ssize_t size; PyObject *patterns, *ignore; Pattern *_patterns = NULL; int patterns_sz = 0; Py_ssize_t len; Pattern *_ignore = NULL; int ignore_sz = 0; PyObject *py_input = NULL; char *encoded_input = NULL; Py_ssize_t encoded_input_sz = 0; self->scanner = NULL; if (!PyArg_ParseTuple(args, "OO|U", &patterns, &ignore, &py_input)) { return -1; } if (!Scanner_initialized()) { is_tuple = PyTuple_Check(patterns); if (is_tuple || PyList_Check(patterns)) { size = is_tuple ? PyTuple_Size(patterns) : PyList_Size(patterns); _patterns = PyMem_New(Pattern, size); for (i = 0; i < size; ++i) { item = is_tuple ? PyTuple_GetItem(patterns, i) : PyList_GetItem(patterns, i); _is_tuple = PyTuple_Check(item); if (_is_tuple || PyList_Check(item)) { item0 = _is_tuple ? PyTuple_GetItem(item, 0) : PyList_GetItem(item, 0); item1 = _is_tuple ? PyTuple_GetItem(item, 1) : PyList_GetItem(item, 1); if (PyUnicode_Check(item0) && PyUnicode_Check(item1)) { _patterns[patterns_sz].tok = scss_pyunicode_to_utf8(item0, &len); _patterns[patterns_sz].expr = scss_pyunicode_to_utf8(item1, &len); patterns_sz++; } } } } Scanner_initialize(_patterns, patterns_sz); } is_tuple = PyTuple_Check(ignore); if (is_tuple || PyList_Check(ignore)) { size = is_tuple ? PyTuple_Size(ignore) : PyList_Size(ignore); _ignore = PyMem_New(Pattern, size); for (i = 0; i < size; ++i) { item = is_tuple ? PyTuple_GetItem(ignore, i) : PyList_GetItem(ignore, i); if (PyUnicode_Check(item)) { _ignore[ignore_sz].tok = scss_pyunicode_to_utf8(item, &len); _ignore[ignore_sz].expr = NULL; ignore_sz++; } } } self->py_input = py_input; Py_INCREF(py_input); encoded_input = scss_pyunicode_to_utf8(py_input, &encoded_input_sz); self->scanner = Scanner_new( _patterns, patterns_sz, _ignore, ignore_sz, encoded_input, encoded_input_sz); if (_patterns != NULL) PyMem_Del(_patterns); if (_ignore != NULL) PyMem_Del(_ignore); #ifdef DEBUG PySys_WriteStderr("Scss Scanner object initialized! (%lu bytes)\n", sizeof(scss_Scanner)); #endif return 0; } static PyObject * scss_Scanner_repr(scss_Scanner *self) { /* Print the last 10 tokens that have been scanned in */ PyObject *repr, *tmp; Token *p_token; int i, start, pos; if (self->scanner != NULL && self->scanner->tokens_sz) { start = self->scanner->tokens_sz - 10; repr = PyBytes_FromString(""); for (i = (start < 0) ? 0 : start; i < self->scanner->tokens_sz; i++) { p_token = &self->scanner->tokens[i]; PyBytes_ConcatAndDel(&repr, PyBytes_FromString("\n")); pos = (int)(p_token->string - self->scanner->input); PyBytes_ConcatAndDel(&repr, PyBytes_FromFormat(" (@%d) %s = ", pos, p_token->regex->tok)); tmp = PyBytes_FromStringAndSize(p_token->string, p_token->string_sz); PyBytes_ConcatAndDel(&repr, PyObject_Repr(tmp)); Py_XDECREF(tmp); } } else { repr = PyBytes_FromString("None"); } return (PyObject *)repr; } static void scss_Scanner_dealloc(scss_Scanner *self) { if (self->scanner != NULL) Scanner_del(self->scanner); Py_XDECREF(self->py_input); Py_TYPE(self)->tp_free((PyObject*)self); #ifdef DEBUG PySys_WriteStderr("Scss Scanner object destroyed!\n"); #endif } static PyMethodDef scss_Scanner_methods[] = { {"reset", (PyCFunction)scss_Scanner_reset, METH_VARARGS, "Scan the next token"}, {"token", (PyCFunction)scss_Scanner_token, METH_VARARGS, "Get the nth token"}, {"rewind", (PyCFunction)scss_Scanner_rewind, METH_VARARGS, "Rewind scanner"}, {"setup_patterns", (PyCFunction)scss_Scanner_setup_patterns, METH_O | METH_STATIC, "Initialize patterns."}, {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyTypeObject scss_ScannerType = { PyVarObject_HEAD_INIT(NULL, 0) "scss.Scanner", /* tp_name */ sizeof(scss_Scanner), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)scss_Scanner_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ (reprfunc)scss_Scanner_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "Scanner object.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter: __iter__() method */ 0, /* tp_iternext: next() method */ scss_Scanner_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)scss_Scanner_init, /* tp_init */ }; /* Python constructor */ static PyObject * scss_locate_blocks(PyObject *self, PyObject *args) { scss_BlockLocator *result = NULL; result = PyObject_New(scss_BlockLocator, &scss_BlockLocatorType); if (result) { scss_BlockLocator_init(result, args, NULL); } return (PyObject *)result; } /* Module functions */ static PyMethodDef scss_methods[] = { {"locate_blocks", (PyCFunction)scss_locate_blocks, METH_VARARGS, "Locate Scss blocks."}, {NULL, NULL, 0, NULL} /* Sentinel */ }; #if PY_MAJOR_VERSION >= 3 /* Module definition */ static struct PyModuleDef speedups_module_def = { PyModuleDef_HEAD_INIT, "_scanner", /* m_name */ NULL, /* m_doc */ (Py_ssize_t) -1, /* m_size */ scss_methods, /* m_methods */ NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ }; #endif /* Module init function */ #if PY_MAJOR_VERSION >= 3 #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) #else #define MOD_INIT(name) PyMODINIT_FUNC init##name(void) #endif MOD_INIT(_scanner) { #if PY_MAJOR_VERSION >= 3 PyObject* m = PyModule_Create(&speedups_module_def); #else PyObject* m = Py_InitModule("_scanner", scss_methods); #endif scss_BlockLocatorType.tp_new = PyType_GenericNew; scss_ScannerType.tp_new = PyType_GenericNew; #if PY_MAJOR_VERSION >= 3 if (PyType_Ready(&scss_BlockLocatorType) < 0 || PyType_Ready(&scss_ScannerType) < 0) return m; #else if (PyType_Ready(&scss_BlockLocatorType) < 0 || PyType_Ready(&scss_ScannerType) < 0) return; #endif BlockLocator_initialize(); Scanner_initialize(NULL, 0); Py_INCREF(&scss_BlockLocatorType); PyModule_AddObject(m, "_BlockLocator", (PyObject *)&scss_BlockLocatorType); Py_INCREF(&scss_ScannerType); PyModule_AddObject(m, "Scanner", (PyObject *)&scss_ScannerType); PyExc_scss_NoMoreTokens = PyErr_NewException("_scanner.NoMoreTokens", NULL, NULL); Py_INCREF(PyExc_scss_NoMoreTokens); PyModule_AddObject(m, "NoMoreTokens", (PyObject *)PyExc_scss_NoMoreTokens); #if PY_MAJOR_VERSION >= 3 return m; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/block_locator.c���������������������������������������������������������������0000664�0000000�0000000�00000031351�14205426364�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #include #include #include #include #include "block_locator.h" int _strip(Py_UNICODE *begin, Py_UNICODE *end, int *lineno, Py_UNICODE **out) { while (begin < end && (*begin == '\n' || *begin == '\t' || *begin == ' ')) begin++; if (out != NULL) { *out = begin; } return (int)(end - begin); } /* BlockLocator */ typedef void _BlockLocator_Callback(BlockLocator*); static void _BlockLocator_push_lineno(BlockLocator *self, int lineno) { _lineno_stack *next = self->lineno_stack; self->lineno_stack = malloc(sizeof(_lineno_stack)); self->lineno_stack->lineno = lineno; self->lineno_stack->next = next; } static int _BlockLocator_pop_lineno(BlockLocator *self) { int lineno; _lineno_stack *dead; if (self->lineno_stack == NULL) { return 0; } lineno = self->lineno_stack->lineno; dead = self->lineno_stack; self->lineno_stack = self->lineno_stack->next; free(dead); return lineno; } static void _BlockLocator_start_string(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // A string starts self->instr = *(self->codestr_ptr); } static void _BlockLocator_end_string(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // A string ends (FIXME: needs to accept escaped characters) self->instr = 0; } static void _BlockLocator_start_parenthesis(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // parenthesis begins: self->par++; } static void _BlockLocator_end_parenthesis(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif self->par--; } static void _BlockLocator_flush_properties(BlockLocator *self) { int len = -1, lineno = -1; Py_UNICODE *block_start = NULL; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // Flush properties if (self->lose <= self->init) { len = _strip(self->lose, self->init, &lineno, &block_start); if (len) { self->block.selprop = block_start; self->block.selprop_sz = len; self->block.codestr = NULL; self->block.codestr_sz = 0; self->block.lineno = self->lineno; self->block.error = 1; } self->lose = self->init; } } static void _BlockLocator_start_block1(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // Start block: if (self->codestr_ptr > self->codestr && *(self->codestr_ptr - 1) == '#') { self->skip = 1; } else { self->start = self->codestr_ptr; _BlockLocator_push_lineno(self, self->lineno); _BlockLocator_flush_properties(self); } self->depth++; } static void _BlockLocator_start_block(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // Start block: self->depth++; } static void _BlockLocator_end_block1(BlockLocator *self) { int len, lineno = -1; Py_UNICODE *block_start = NULL; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // Block ends: self->depth--; if (!self->skip) { self->end = self->codestr_ptr; len = _strip(self->init, self->start, &lineno, &block_start); self->block.selprop = block_start; self->block.selprop_sz = len; self->block.codestr = (self->start + 1); self->block.codestr_sz = (int)(self->end - (self->start + 1)); self->block.lineno = _BlockLocator_pop_lineno(self); self->block.error = 1; self->init = self->lose = self->end + 1; } self->skip = 0; } static void _BlockLocator_end_block(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // Block ends: self->depth--; } static void _BlockLocator_end_property(BlockLocator *self) { int len, lineno = -1; Py_UNICODE *block_start = NULL; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif // End of property (or block): self->init = self->codestr_ptr; if (self->lose <= self->init) { len = _strip(self->lose, self->init, &lineno, &block_start); if (len) { self->block.selprop = block_start; self->block.selprop_sz = len; self->block.codestr = NULL; self->block.codestr_sz = 0; self->block.lineno = self->lineno; self->block.error = 1; } self->init = self->lose = self->codestr_ptr + 1; } } int function_map_initialized = 0; _BlockLocator_Callback* scss_function_map[256 * 256 * 2 * 3]; // (c, instr, par, depth) static void init_function_map(void) { int i; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (function_map_initialized) { return; } function_map_initialized = 1; for (i = 0; i < 256 * 256 * 2 * 3; i++) { scss_function_map[i] = NULL; } /* TODO this seems unnecessarily complicated */ /* TODO why does this care about parentheses? */ /* TODO it's possible to nest a string inside another string, using #{! * should just have a general stack of the current context i think */ scss_function_map[(int)'\"' + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*0 + 256*256*1 + 256*256*2*0] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*1 + 256*256*2*0] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*0 + 256*256*1 + 256*256*2*1] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*1 + 256*256*2*1] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*0 + 256*256*1 + 256*256*2*2] = _BlockLocator_start_string; scss_function_map[(int)'\'' + 256*0 + 256*256*1 + 256*256*2*2] = _BlockLocator_start_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*0 + 256*256*2*0] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*0 + 256*256*2*0] = _BlockLocator_end_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*1 + 256*256*2*0] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*1 + 256*256*2*0] = _BlockLocator_end_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*0 + 256*256*2*1] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*0 + 256*256*2*1] = _BlockLocator_end_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*1 + 256*256*2*1] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*1 + 256*256*2*1] = _BlockLocator_end_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*0 + 256*256*2*2] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*0 + 256*256*2*2] = _BlockLocator_end_string; scss_function_map[(int)'\"' + 256*(int)'\"' + 256*256*1 + 256*256*2*2] = _BlockLocator_end_string; scss_function_map[(int)'\'' + 256*(int)'\'' + 256*256*1 + 256*256*2*2] = _BlockLocator_end_string; scss_function_map[(int)'(' + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_start_parenthesis; scss_function_map[(int)'(' + 256*0 + 256*256*1 + 256*256*2*0] = _BlockLocator_start_parenthesis; scss_function_map[(int)'(' + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_start_parenthesis; scss_function_map[(int)'(' + 256*0 + 256*256*1 + 256*256*2*1] = _BlockLocator_start_parenthesis; scss_function_map[(int)'(' + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_start_parenthesis; scss_function_map[(int)'(' + 256*0 + 256*256*1 + 256*256*2*2] = _BlockLocator_start_parenthesis; scss_function_map[(int)')' + 256*0 + 256*256*1 + 256*256*2*0] = _BlockLocator_end_parenthesis; scss_function_map[(int)')' + 256*0 + 256*256*1 + 256*256*2*1] = _BlockLocator_end_parenthesis; scss_function_map[(int)')' + 256*0 + 256*256*1 + 256*256*2*2] = _BlockLocator_end_parenthesis; scss_function_map[(int)'{' + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_start_block1; scss_function_map[(int)'{' + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_start_block; scss_function_map[(int)'{' + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_start_block; scss_function_map[(int)'}' + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_end_block1; scss_function_map[(int)'}' + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_end_block; scss_function_map[(int)';' + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_end_property; scss_function_map[0 + 256*0 + 256*256*0 + 256*256*2*0] = _BlockLocator_flush_properties; scss_function_map[0 + 256*0 + 256*256*0 + 256*256*2*1] = _BlockLocator_flush_properties; scss_function_map[0 + 256*0 + 256*256*0 + 256*256*2*2] = _BlockLocator_flush_properties; #ifdef DEBUG fprintf(stderr, "\tScss function maps initialized!\n"); #endif } /* BlockLocator public interface */ void BlockLocator_initialize(void) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif init_function_map(); } void BlockLocator_finalize(void) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif } BlockLocator * BlockLocator_new(PyUnicodeObject* codestr) { BlockLocator *self; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif self = PyMem_New(BlockLocator, 1); if (self) { memset(self, 0, sizeof(BlockLocator)); Py_INCREF(codestr); self->py_codestr = codestr; self->codestr = PyUnicode_AS_UNICODE(codestr); self->codestr_sz = PyUnicode_GetSize((PyObject*)codestr); self->codestr_ptr = self->codestr; self->lineno = 1; self->par = 0; self->instr = 0; self->depth = 0; self->skip = 0; self->init = self->codestr; self->lose = self->codestr; self->start = NULL; self->end = NULL; #ifdef DEBUG fprintf(stderr, "\tScss BlockLocator object created (%ld units)!\n", self->codestr_sz); #endif } return self; } void BlockLocator_del(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif Py_XDECREF(self->py_codestr); free(self); } void BlockLocator_rewind(BlockLocator *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif self->codestr_ptr = self->codestr; self->lineno = 1; self->par = 0; self->instr = 0; self->depth = 0; self->skip = 0; self->init = self->codestr; self->lose = self->codestr; self->start = NULL; self->end = NULL; while (self->lineno_stack != NULL) { _BlockLocator_pop_lineno(self); } #ifdef DEBUG fprintf(stderr, "\tScss BlockLocator object rewound!\n"); #endif } Block* BlockLocator_iternext(BlockLocator *self) { _BlockLocator_Callback *fn; unsigned long c = 0; Py_UNICODE *codestr_end = self->codestr + self->codestr_sz; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif memset(&self->block, 0, sizeof(Block)); while (self->codestr_ptr < codestr_end) { c = *(self->codestr_ptr); if (c == '\n') { self->lineno++; } repeat: if (c == '\\') { /* Start of an escape sequence; ignore next character */ self->codestr_ptr++; } /* only ASCII is special syntactically */ else if (c < 256) { fn = scss_function_map[ (int)c + 256 * self->instr + 256 * 256 * (int)(self->par != 0) + 256 * 256 * 2 * (int)(self->depth > 1 ? 2 : self->depth) ]; if (fn != NULL) { fn(self); } } self->codestr_ptr++; if (self->codestr_ptr > codestr_end) { self->codestr_ptr = codestr_end; } if (self->block.error) { #ifdef DEBUG if (self->block.error > 0) { fprintf(stderr, "\tBlock found!\n"); } else { fprintf(stderr, "\tException!\n"); } #endif return &self->block; } } if (self->par > 0) { if (self->block.error >= 0) { self->block.error = -1; sprintf(self->exc, "Missing closing parenthesis somewhere in block"); #ifdef DEBUG fprintf(stderr, "\t%s\n", self->exc); #endif } } else if (self->instr != 0) { if (self->block.error >= 0) { self->block.error = -2; sprintf(self->exc, "Missing closing string somewhere in block"); #ifdef DEBUG fprintf(stderr, "\t%s\n", self->exc); #endif } } else if (self->depth > 0) { if (self->block.error >= 0) { self->block.error = -3; sprintf(self->exc, "Missing closing string somewhere in block"); #ifdef DEBUG fprintf(stderr, "\t%s\n", self->exc); #endif } if (self->init < codestr_end) { c = '}'; goto repeat; } } if (self->init < codestr_end) { self->init = codestr_end; c = 0; goto repeat; } BlockLocator_rewind(self); return &self->block; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/block_locator.h���������������������������������������������������������������0000664�0000000�0000000�00000002353�14205426364�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #include #ifndef BLOCK_LOCATOR_H #define BLOCK_LOCATOR_H #define MAX_EXC_STRING 4096 typedef struct { int error; int lineno; Py_UNICODE *selprop; int selprop_sz; Py_UNICODE *codestr; int codestr_sz; } Block; typedef struct _lineno_stack { int lineno; struct _lineno_stack* next; } _lineno_stack; typedef struct { char exc[MAX_EXC_STRING]; PyUnicodeObject *py_codestr; Py_UNICODE *codestr; Py_UNICODE *codestr_ptr; Py_ssize_t codestr_sz; _lineno_stack* lineno_stack; int lineno; int par; Py_UNICODE instr; int depth; int skip; Py_UNICODE *init; Py_UNICODE *lose; Py_UNICODE *start; Py_UNICODE *end; Block block; } BlockLocator; void BlockLocator_initialize(void); void BlockLocator_finalize(void); Block* BlockLocator_iternext(BlockLocator *self); BlockLocator *BlockLocator_new(PyUnicodeObject *codestr); void BlockLocator_del(BlockLocator *self); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/build.py����������������������������������������������������������������������0000775�0000000�0000000�00000001244�14205426364�0016225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python import sys from distutils.core import setup, Extension from distutils.command.build_ext import build_ext as _build_ext import os abspath = os.path.abspath(__file__) dname = os.path.dirname(abspath) os.chdir(dname) class build_ext(_build_ext): def finalize_options(self): _build_ext.finalize_options(self) self.build_temp = './' self.build_lib = '../grammar/' if len(sys.argv) == 1: sys.argv.append('build') setup(ext_modules=[ Extension( '_scanner', sources=['_speedups.c', 'block_locator.c', 'scanner.c', 'hashtable.c'], libraries=['pcre'], ), ], cmdclass={'build_ext': build_ext}) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/hashtable.c�������������������������������������������������������������������0000664�0000000�0000000�00000011541�14205426364�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * [https://gist.github.com/tonious/1377667] * * Public Domain Hashtable * Copyright (c) 2011 Tony Thompson (tonious). */ #include #include #include #include #include "hashtable.h" static unsigned int murmurhash3(const void *key, const size_t len, const unsigned int seed) { /* MurmurHash3, by Austin Appleby, also in the public domain */ const unsigned int c1 = 0xcc9e2d51; const unsigned int c2 = 0x1b873593; const unsigned int r1 = 15; const unsigned int r2 = 13; const unsigned int m = 5; const unsigned int n = 0xe6546b64; const unsigned char *tail; size_t i; unsigned int k; unsigned int k1 = 0; unsigned int hash = seed; const size_t nblocks = len / 4; const unsigned int *blocks = (const unsigned int *) key; for (i = 0; i < nblocks; i++) { k = blocks[i]; k *= c1; k = (k << r1) | (k >> (32 - r1)); k *= c2; hash ^= k; hash = ((hash << r2) | (hash >> (32 - r2))) * m + n; } tail = (const unsigned char *)(key) + nblocks * 4; switch (len & 3) { case 3: k1 ^= tail[2] << 16; case 2: k1 ^= tail[1] << 8; case 1: k1 ^= tail[0]; k1 *= c1; k1 = (k1 << r1) | (k1 >> (32 - r1)); k1 *= c2; hash ^= k1; } hash ^= len; hash ^= (hash >> 16); hash *= 0x85ebca6b; hash ^= (hash >> 13); hash *= 0xc2b2ae35; hash ^= (hash >> 16); return hash; } Hashtable * Hashtable_create(const unsigned int size) { /* Create a new hashtable */ unsigned int i, map_size; Hashtable *hashtable = NULL; if (size < 1) return NULL; /* Allocate the table itself. */ if ((hashtable = malloc(sizeof(Hashtable))) == NULL) { return NULL; } /* Allocate pointers to the head nodes. */ if ((hashtable->table = malloc(sizeof(Entry *) * size)) == NULL) { return NULL; } for (i = 0; i < size; i++) { hashtable->table[i] = NULL; } map_size = (size + sizeof(unsigned long) - 1) / (8 * sizeof(unsigned long)); if ((hashtable->map = malloc(map_size)) == NULL) { return NULL; } for (i = 0; i < map_size; i++) { hashtable->map[i] = 0; } hashtable->size = size; return hashtable; } void Hashtable_del(Hashtable *hashtable) { int bin; Entry *next = NULL; Entry *last = NULL; for (bin = 0; bin < hashtable->size; bin++) { next = hashtable->table[bin]; while (next != NULL) { last = next; next = next->next; if (last->key != NULL) { free(last->key); } free(last); } } free(hashtable->map); free(hashtable->table); free(hashtable); } static Entry * _Hashtable_newpair(const void *key, const size_t len, void *value) { /* Create a key-value pair */ Entry *newpair; if ((newpair = malloc(sizeof(Entry))) == NULL) { return NULL; } if ((newpair->key = memcpy(malloc(len), key, len)) == NULL) { return NULL; } newpair->value = value; newpair->next = NULL; return newpair; } int Hashtable_in(Hashtable *a, Hashtable *b) { int i, map_size; if (a->size == b->size) { map_size = (a->size + sizeof(unsigned long) - 1) / (8 * sizeof(unsigned long)); for (i = 0; i < map_size; i++) { if ((a->map[i] & b->map[i]) != a->map[i]) { return 0; } } return 1; } return 0; } void Hashtable_set(Hashtable *hashtable, const void *key, const size_t len, void *value) { /* Insert a key-value pair into a hash table */ unsigned int hash = murmurhash3(key, len, 0x9747b28c); Entry *newpair = NULL; Entry *next = NULL; Entry *last = NULL; unsigned int bin = hash % hashtable->size; hashtable->map[bin / (8 * sizeof(unsigned long))] |= bin % (8 * sizeof(unsigned long)); next = hashtable->table[bin]; while (next != NULL && next->key != NULL && memcmp(key, next->key, len) > 0) { last = next; next = next->next; } if( next != NULL && next->key != NULL && memcmp(key, next->key, len) == 0 ) { /* There's already a pair. Let's replace that value. */ next->value = value; } else { /* Nope, could't find it. Time to grow a pair. */ newpair = _Hashtable_newpair(key, len, value); /* We're at the start of the linked list in this bin. */ if (next == hashtable->table[bin]) { newpair->next = next; hashtable->table[bin] = newpair; /* We're at the end of the linked list in this bin. */ } else if (next == NULL) { last->next = newpair; /* We're in the middle of the list. */ } else { newpair->next = next; last->next = newpair; } } } void * Hashtable_get(Hashtable *hashtable, const void *key, const size_t len) { /* Retrieve a key-value pair from a hash table */ unsigned int hash = murmurhash3(key, len, 0x9747b28c); Entry *pair; unsigned int bin = hash % hashtable->size; /* Step through the bin, looking for our value. */ pair = hashtable->table[bin]; while (pair != NULL && pair->key != NULL && memcmp(key, pair->key, len) > 0) { pair = pair->next; } /* Did we actually find anything? */ if (pair == NULL || pair->key == NULL || memcmp(key, pair->key, len) != 0) { return NULL; } else { return pair->value; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/hashtable.h�������������������������������������������������������������������0000664�0000000�0000000�00000001206�14205426364�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * [https://gist.github.com/tonious/1377667] * * Public Domain Hashtable * Copyright (c) 2011 Tony Thompson (tonious). */ #ifndef HASHTABLE_H #define HASHTABLE_H typedef struct Entry_s { char *key; void *value; struct Entry_s *next; } Entry; typedef struct { int size; Entry **table; unsigned long *map; } Hashtable; Hashtable *Hashtable_create(const unsigned int size); void Hashtable_del(Hashtable *hashtable); void Hashtable_set(Hashtable *hashtable, const void *key, const size_t len, void *value); void *Hashtable_get(Hashtable *hashtable, const void *key, const size_t len); int Hashtable_in(Hashtable *a, Hashtable *b); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/py3defs.h���������������������������������������������������������������������0000664�0000000�0000000�00000001451�14205426364�0016277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #ifndef PY3DEFS_H #define PY3DEFS_H /* Iterators are turned on by default in Python 3. */ #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_HAVE_ITER 0 #endif /* Py_TYPE exists in 2.6+, but for 2.5 and below we can use the old ob_type. */ #ifndef Py_TYPE #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #endif /* PyVarObject_HEAD_INIT also exists in 2.6+, so for 2.5 use PyObject_HEAD_INIT. */ #ifndef PyVarObject_HEAD_INIT #define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size, #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/scanner.c���������������������������������������������������������������������0000664�0000000�0000000�00000022533�14205426364�0016352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #define PY_SSIZE_T_CLEAN #include #include #include #include "scanner.h" #include "utils.h" int Pattern_patterns_sz = 0; int Pattern_patterns_bsz = 0; Pattern *Pattern_patterns = NULL; int Pattern_patterns_initialized = 0; Pattern* Pattern_regex(char *tok, char *expr) { int j; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif for (j = 0; j < Pattern_patterns_sz; j++) { if (strcmp(Pattern_patterns[j].tok, tok) == 0) { return &Pattern_patterns[j]; } } if (expr) { if (j >= Pattern_patterns_bsz) { /* Needs to expand block */ Pattern_patterns_bsz = Pattern_patterns_bsz + BLOCK_SIZE_PATTERNS; PyMem_Resize(Pattern_patterns, Pattern, Pattern_patterns_bsz); } Pattern_patterns[j].tok = tok; Pattern_patterns[j].expr = expr; Pattern_patterns[j].pattern = NULL; Pattern_patterns_sz = j + 1; return &Pattern_patterns[j]; } return NULL; } static int Pattern_match(Pattern *regex, char *string, Py_ssize_t string_sz, int start_at, Token *p_token) { int options = PCRE_ANCHORED | PCRE_UTF8; const char *errptr; int ret, erroffset, ovector[3]; pcre *p_pattern = regex->pattern; ovector[0] = ovector[1] = ovector[2] = 0; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (p_pattern == NULL) { #ifdef DEBUG fprintf(stderr, "\tpcre_compile %s\n", repr(regex->expr)); #endif p_pattern = regex->pattern = pcre_compile(regex->expr, options, &errptr, &erroffset, NULL); } ret = pcre_exec( p_pattern, NULL, /* no extra data */ string, string_sz, start_at, PCRE_ANCHORED, /* default options */ ovector, /* output vector for substring information */ 3 /* number of elements in the output vector */ ); if (ret >= 0) { if (p_token) { p_token->regex = regex; p_token->string = string + ovector[0]; p_token->string_sz = ovector[1] - ovector[0]; } return 1; } return 0; } static void Pattern_initialize(Pattern *, int); static void Pattern_finalize(void); static void Pattern_initialize(Pattern *patterns, int patterns_sz) { int i; Pattern *regex; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (Pattern_patterns_initialized || !patterns_sz) { return; } for (i = 0; i < patterns_sz; i++) { regex = Pattern_regex(patterns[i].tok, patterns[i].expr); if (regex) { #ifdef DEBUG fprintf(stderr, "\tAdded regex pattern %s: %s\n", repr(regex->tok), repr(regex->expr)); #endif } } Pattern_patterns_initialized = 1; } static void Pattern_finalize(void) { int j; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (Pattern_patterns_initialized) { for (j = 0; j < Pattern_patterns_sz; j++) { PyMem_Del(Pattern_patterns[j].tok); PyMem_Del(Pattern_patterns[j].expr); if (Pattern_patterns[j].pattern != NULL) { pcre_free(Pattern_patterns[j].pattern); } } PyMem_Del(Pattern_patterns); Pattern_patterns = NULL; Pattern_patterns_sz = 0; Pattern_patterns_bsz = 0; Pattern_patterns_initialized = 0; } } /* Scanner */ Hashtable *Scanner_restrictions_cache = NULL; static long _Scanner_scan(Scanner *self, Hashtable *restrictions) { Token best_token, *p_token; Restriction *p_restriction; Pattern *regex; size_t len; int j; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif while (1) { regex = NULL; best_token.regex = NULL; /* Search the patterns for a match, with earlier tokens in the list having preference */ for (j = 0; j < Pattern_patterns_sz; j++) { regex = &Pattern_patterns[j]; #ifdef DEBUG fprintf(stderr, "\tTrying %s: %s at pos %d -> %s (%d/%d)\n", repr(regex->tok), repr(regex->expr), self->pos, repr(self->input), j, Pattern_patterns_sz); #endif /* First check to see if we're restricting to this token */ if (restrictions != NULL) { len = strlen(regex->tok) + 1; if (Hashtable_get(self->ignore, regex->tok, len) == NULL) { if (Hashtable_get(restrictions, regex->tok, len) == NULL) { #ifdef DEBUG fprintf(stderr, "\tSkipping %s!\n", repr(regex->tok)); #endif continue; } } } if (Pattern_match( regex, self->input, self->input_sz, self->pos, &best_token )) { #ifdef DEBUG fprintf(stderr, "Match OK! %s: %s at pos %d\n", repr(regex->tok), repr(regex->expr), self->pos); #endif break; } } /* If we didn't find anything, raise an error */ if (best_token.regex == NULL) { if (restrictions) { return SCANNER_EXC_RESTRICTED; } return SCANNER_EXC_BAD_TOKEN; } /* If we found something that isn't to be ignored, return it */ len = strlen(best_token.regex->tok) + 1; if (Hashtable_get(self->ignore, best_token.regex->tok, len) == NULL) { break; } /* This token should be ignored... */ self->pos += best_token.string_sz; } if (best_token.regex) { self->pos = (int)(best_token.string - self->input + best_token.string_sz); /* Only add this token if it's not in the list (to prevent looping) */ p_token = &self->tokens[self->tokens_sz - 1]; if (self->tokens_sz == 0 || p_token->regex != best_token.regex || p_token->string != best_token.string || p_token->string_sz != best_token.string_sz ) { if (self->tokens_sz >= self->tokens_bsz) { /* Needs to expand block */ self->tokens_bsz = self->tokens_bsz + BLOCK_SIZE_TOKENS; PyMem_Resize(self->tokens, Token, self->tokens_bsz); PyMem_Resize(self->restrictions, Restriction, self->tokens_bsz); } memcpy(&self->tokens[self->tokens_sz], &best_token, sizeof(Token)); p_restriction = &self->restrictions[self->tokens_sz]; p_restriction->patterns = restrictions; self->tokens_sz++; return 1; } } return 0; } /* Scanner public interface */ void Scanner_reset(Scanner *self, char *input, Py_ssize_t input_sz) { int i; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif for (i = 0; i < self->tokens_sz; i++) { self->restrictions[i].patterns = NULL; /* patterns object is cached in self->patterns, and those are never deleted. */ } self->tokens_sz = 0; if (self->input != NULL) { PyMem_Del(self->input); } self->input = input; self->input_sz = input_sz; #ifdef DEBUG fprintf(stderr, "Scanning in %s\n", repr(self->input)); #endif self->pos = 0; } void Scanner_del(Scanner *self) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (self->ignore != NULL) { Hashtable_del(self->ignore); } if (self->tokens != NULL) { PyMem_Del(self->tokens); PyMem_Del(self->restrictions); } if (self->input != NULL) { PyMem_Del(self->input); } PyMem_Del(self); } Scanner* Scanner_new(Pattern patterns[], int patterns_sz, Pattern ignore[], int ignore_sz, char *input, Py_ssize_t input_sz) { int i; size_t len; Scanner *self; Pattern *regex; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif self = PyMem_New(Scanner, 1); memset(self, 0, sizeof(Scanner)); if (self) { /* Restrictions cache */ self->restrictions_cache = Scanner_restrictions_cache; /* Initialize patterns */ for (i = 0; i < patterns_sz; i++) { regex = Pattern_regex(patterns[i].tok, patterns[i].expr); #ifdef DEBUG if (regex) { fprintf(stderr, "\tAdded regex pattern %s: %s\n", repr(regex->tok), repr(regex->expr)); } #endif } /* Initialize ignored */ if (ignore_sz) { self->ignore = Hashtable_create(64); for (i = 0; i < ignore_sz; i++) { regex = Pattern_regex(ignore[i].tok, ignore[i].expr); if (regex) { len = strlen(ignore[i].tok) + 1; Hashtable_set(self->ignore, ignore[i].tok, len, regex); #ifdef DEBUG fprintf(stderr, "\tIgnoring token %s\n", repr(regex->tok)); #endif } } } else { self->ignore = NULL; } Scanner_reset(self, input, input_sz); } return self; } int Scanner_initialized(void) { return Pattern_patterns_initialized; } void Scanner_initialize(Pattern patterns[], int patterns_sz) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif Scanner_restrictions_cache = Hashtable_create(64); Pattern_initialize(patterns, patterns_sz); } void Scanner_finalize(void) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif Pattern_finalize(); Hashtable_del(Scanner_restrictions_cache); } Token* Scanner_token(Scanner *self, int i, Hashtable *restrictions) { long result; #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (i == self->tokens_sz) { result = _Scanner_scan(self, restrictions); if (result < 0) { return (Token *)result; } } else if (i >= 0 && i < self->tokens_sz) { if (!Hashtable_in(restrictions, self->restrictions[i].patterns)) { sprintf(self->exc, "Unimplemented: restriction set changed"); return (Token *)SCANNER_EXC_UNIMPLEMENTED; } } if (i >= 0 && i < self->tokens_sz) { return &self->tokens[i]; } return (Token *)SCANNER_EXC_NO_MORE_TOKENS; } void Scanner_rewind(Scanner *self, int i) { #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (i >= 0 && i < self->tokens_sz) { self->tokens_sz = i; self->pos = (int)(self->tokens[i].string - self->input); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/src/scanner.h���������������������������������������������������������������������0000664�0000000�0000000�00000002743�14205426364�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * pyScss, a Scss compiler for Python * SCSS blocks scanner. * * German M. Bravo (Kronuz) * https://github.com/Kronuz/pyScss * * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ #ifndef SCANNER_H #define SCANNER_H #define PY_SSIZE_T_CLEAN #include #include "hashtable.h" #define PCRE_STATIC #include #define BLOCK_SIZE_PATTERNS 64 #define BLOCK_SIZE_TOKENS 256 #define MAX_EXC_STRING 4096 #define SCANNER_EXC_BAD_TOKEN (long)-1 #define SCANNER_EXC_RESTRICTED (long)-2 #define SCANNER_EXC_UNIMPLEMENTED (long)-3 #define SCANNER_EXC_NO_MORE_TOKENS (long)-4 typedef struct { char *tok; char *expr; pcre *pattern; } Pattern; typedef struct { Pattern *regex; char *string; int string_sz; } Token; typedef struct { Hashtable *patterns; } Restriction; typedef struct { Hashtable *restrictions_cache; char exc[MAX_EXC_STRING]; Hashtable *ignore; int tokens_sz; int tokens_bsz; Token *tokens; Restriction *restrictions; Py_ssize_t input_sz; char *input; int pos; } Scanner; int Scanner_initialized(void); void Scanner_initialize(Pattern *, int); void Scanner_finalize(void); void Scanner_reset(Scanner *self, char *input, Py_ssize_t input_sz); Scanner *Scanner_new(Pattern *, int, Pattern *, int, char *, Py_ssize_t); void Scanner_del(Scanner *); Token* Scanner_token(Scanner *, int, Hashtable *restrictions); void Scanner_rewind(Scanner *, int); #endif �����������������������������pyScss-1.4.0/scss/src/utils.h�����������������������������������������������������������������������0000664�0000000�0000000�00000003471�14205426364�0016066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include #include char * PyMem_Strndup(const char *str, size_t len) { if (str != NULL) { char *copy = PyMem_New(char, len + 1); if (copy != NULL) { memcpy(copy, str, len); copy[len] = '\0'; return copy; } } return NULL; } char * PyMem_Strdup(const char *str) { return PyMem_Strndup(str, strlen(str)); } char * reprn(char *str, size_t len) { static char strings[10240]; static size_t current = 0; size_t reqlen = 2; unsigned char c; char *out, *write, *begin = str, *end = str + len; while (begin < end) { c = *begin; if (c == '\'') { reqlen += 2; } else if (c == '\r') { reqlen += 2; } else if (c == '\n') { reqlen += 2; } else if (c == '\t') { reqlen += 2; } else if (c < ' ') { reqlen += 3; } else { reqlen++; } begin++; } if (reqlen > 10240) { reqlen = 10240; } if (current + reqlen > 10240) { current = 0; } begin = str; end = str + len; out = write = strings + current; *write++ = '\''; while (begin < end) { c = *begin; if (c == '\'') { if (write + 5 >= strings + 10240) break; sprintf(write, "\\'"); write += 2; } else if (c == '\r') { if (write + 5 >= strings + 10240) break; sprintf(write, "\\r"); write += 2; } else if (c == '\n') { if (write + 5 >= strings + 10240) break; sprintf(write, "\\n"); write += 2; } else if (c == '\t') { if (write + 5 >= strings + 10240) break; sprintf(write, "\\t"); write += 2; } else if (c < ' ' || c > 126) { if (write + 6 >= strings + 10240) break; sprintf(write, "\\x%02x", c); write += 4; } else { if (write + 4 >= strings + 10240) break; *write++ = c; } begin++; } *write++ = '\''; *write++ = '\0'; current += (size_t)(write - out); return out; } char * repr(char *str) { return reprn(str, strlen(str)); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0015123�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/__init__.py�����������������������������������������������������������������0000664�0000000�0000000�00000000000�14205426364�0017222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/������������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017137�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/compass/����������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0020604�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/compass/test_gradients.py�����������������������������������������0000664�0000000�0000000�00000003420�14205426364�0024174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Tests for Compass gradient generation.""" from __future__ import absolute_import from __future__ import unicode_literals from scss.calculator import Calculator from scss.extension.compass import CompassExtension from scss.extension.compass.gradients import linear_gradient from scss.types import String, List, Number, Color import pytest @pytest.fixture def calc(): return Calculator(CompassExtension.namespace).evaluate_expression def test_linear_gradient(): # Set up some values to = String.unquoted('to') bottom = String.unquoted('bottom') left = String.unquoted('left') red = Color.from_name('red') blue = Color.from_name('blue') start = Number(0, "%") middle = Number(50, "%") end = Number(100, "%") assert ( linear_gradient(left, List((red, start)), List((blue, middle))) == String('linear-gradient(left, red, blue 50%)') ) assert ( linear_gradient(List((to, bottom)), blue, List((red, end))) == String('linear-gradient(to bottom, blue, red)') ) @pytest.mark.xfail('True', reason="rainbow still has intermediate values added") def test_linear_gradient_idempotent(calc): # linear-gradient should leave valid syntax alone. # Examples graciously stolen from MDN: # https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient trials = [ 'linear-gradient(45deg, blue, red)', 'linear-gradient(to left top, blue, red)', 'linear-gradient(0deg, blue, green 40%, red)', 'linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet)', 'linear-gradient(to bottom right, red, rgba(255,0,0,0))', 'linear-gradient(to bottom, hsl(0, 80%, 70%), #bada55)', ] for trial in trials: assert calc(trial) == String(trial) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/compass/test_helpers.py�������������������������������������������0000664�0000000�0000000�00000013727�14205426364�0023671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Tests for the Compass helper functions. Not all of Compass is implemented, and the arrangement of Compass functions doesn't exactly match the arrangement in the original documentation. Regardless, this is a good starting place: http://compass-style.org/reference/compass/helpers/ Some functions appear to be undocumented, but nonetheless are part of Compass's Ruby code. """ from __future__ import absolute_import from __future__ import unicode_literals import os from scss import config from scss.calculator import Calculator from scss.extension.compass import CompassExtension import pytest # TODO many of these tests could also stand to test for failure cases @pytest.fixture def calc(): return Calculator(CompassExtension.namespace).evaluate_expression # ------------------------------------------------------------------------------ # Listish functions # See: http://ruby-doc.org/gems/docs/c/compass-0.12.2/Compass/SassExtensions/Functions/Lists.html def test_blank(calc): assert calc('blank(false)') assert calc('blank("")') assert calc('blank(" ")') # TODO this is a syntax error; see #166 #assert calc('blank(())') assert not calc('blank(null)') # yes, really assert not calc('blank(1)') assert not calc('blank((1, 2))') assert not calc('blank(0)') def test_compact(calc): assert calc('compact(1 2 3 false 4 5 null 6 7)') == calc('1 2 3 4 5 6 7') def test_reject(calc): assert calc('reject(a b c d, a, c)') == calc('b d') assert calc('reject(a b c d, e)') == calc('a b c d') def test_first_value_of(calc): assert calc('first-value-of(a b c d)') == calc('a') assert calc('first-value-of("a b c d")') == calc('"a"') # -compass-list # -compass-space-list # -compass-slice ## Property prefixing # prefixed # prefix # -moz... ## Selector generation # append-selector # elements-of-type def test_enumerate(calc): assert calc('enumerate(foo, 4, 7)') == calc('foo-4, foo-5, foo-6, foo-7') assert calc('enumerate("bar", 8, 10)') == calc('bar-8, bar-9, bar-10') def test_headings(calc): assert calc('headings()') == calc('h1, h2, h3, h4, h5, h6') assert calc('headings(all)') == calc('h1, h2, h3, h4, h5, h6') assert calc('headings(2)') == calc('h1, h2') assert calc('headings(2, 5)') == calc('h2, h3, h4, h5') def test_nest(calc): # Using .render() here because the structure is complicated and only the # output matters assert calc('nest(selector1, selector2, selector3)').render() == 'selector1 selector2 selector3' assert calc('nest("a b", "c d")').render() == 'a b c d' assert calc('nest((a, b), (c, d))').render() == 'a c, a d, b c, b d' # range ## Working with CSS constants # position def test_opposite_position(calc): assert calc('opposite-position(left)') == calc('right') assert calc('opposite-position(top)') == calc('bottom') assert calc('opposite-position(center)') == calc('center') assert calc('opposite-position(top left)') == calc('bottom right') assert calc('opposite-position(center right)') == calc('center left') ## Math def test_pi(calc): assert calc('pi()') == calc('3.141592653589793') def test_e(calc): assert calc('e()') == calc('2.718281828459045') def test_sqrt(calc): assert calc('sqrt(9)') == calc('3') def test_log(calc): assert calc('log(9, 3)') == calc('2') def test_pow(calc): assert calc('pow(3, 2)') == calc('9') assert calc('pow(10px, 2) / 1px') == calc('100px') # sin # cos # tan ## Fonts # font-url def test_font_url(calc): # nb: config.FONTS_URL is None and defaults to this fonts_url = config.STATIC_URL assert calc('font-url("/some_path.woff")').render() == 'url({0}some_path.woff)'.format(fonts_url) assert calc('font-url("/some_path.woff") format("woff")').render() == 'url({0}some_path.woff) format("woff")'.format(fonts_url) # font-files def test_font_files(calc): """ @author: funvit @note: adapted from compass / test / units / sass_extensions_test.rb """ # nb: config.FONTS_URL is None and defaults to this fonts_url = config.STATIC_URL assert '' == calc('font-files()').render() assert 'url({0}font/name.woff) format("woff"), url({0}fonts/name.ttf) format("truetype"), url({0}fonts/name.svg#fontpath) format("svg")'.format(fonts_url) == calc('font-files("/font/name.woff", woff, "/fonts/name.ttf", truetype, "/fonts/name.svg#fontpath", svg)').render() assert 'url({0}font/with/right_ext.woff) format("woff")'.format(fonts_url) == calc('font_files("/font/with/right_ext.woff")').render() assert 'url({0}font/with/wrong_ext.woff) format("svg")'.format(fonts_url) == calc('font_files("/font/with/wrong_ext.woff", "svg")').render() assert 'url({0}font/with/no_ext) format("opentype")'.format(fonts_url) == calc('font_files("/font/with/no_ext", "otf")').render() assert 'url({0}font/with/weird.ext) format("truetype")'.format(fonts_url) == calc('font_files("/font/with/weird.ext", "truetype")').render() assert 'url({0}font/with/right_ext.woff) format("woff"), url({0}font/with/right_ext_also.otf) format("opentype")'.format(fonts_url) == calc('font_files("/font/with/right_ext.woff", "/font/with/right_ext_also.otf")').render() assert 'url({0}font/with/wrong_ext.woff) format("truetype"), url({0}font/with/right_ext.otf) format("opentype")'.format(fonts_url) == calc('font_files("/font/with/wrong_ext.woff", "ttf", "/font/with/right_ext.otf")').render() # inline-font-files def test_inline_font_files(calc, monkeypatch): """ @author: funvit @note: adapted from compass / test / units / sass_extensions_test.rb """ monkeypatch.setattr(config, 'FONTS_ROOT', os.path.join(config.PROJECT_ROOT, 'tests/files/fonts')) with open(os.path.join(config.PROJECT_ROOT, 'tests/files/fonts/bgrove.base64.txt'), 'r') as f: font_base64 = ''.join((f.readlines())) assert 'url(data:font/truetype;base64,%s) format("truetype")' % font_base64 == calc('inline_font_files("/bgrove.ttf", truetype)').render() ## External stylesheets # stylesheet-url �����������������������������������������pyScss-1.4.0/scss/tests/extension/compass/test_images.py��������������������������������������������0000664�0000000�0000000�00000003626�14205426364�0023471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Tests for the Compass images functions. Not all of Compass is implemented, and the arrangement of Compass functions doesn't exactly match the arrangement in the original documentation. Regardless, this is a good starting place: http://compass-style.org/reference/compass/helpers/ Some functions appear to be undocumented, but nonetheless are part of Compass's Ruby code. """ from __future__ import absolute_import from __future__ import unicode_literals import os import sys import pytest from scss import config from scss.calculator import Calculator from scss.extension.compass import CompassExtension from scss.tests.util import needs_PIL # TODO many of these tests could also stand to test for failure cases @pytest.fixture def calc(): return Calculator(CompassExtension.namespace).evaluate_expression def test_image_url(calc): # nb: config.IMAGES_URL is None and defaults to this images_url = config.STATIC_URL assert calc('image-url("/some_path.jpg")').render() == 'url({0}some_path.jpg)'.format(images_url) # inline-image @needs_PIL def test_inline_image(calc, monkeypatch): monkeypatch.setattr(config, 'IMAGES_ROOT', os.path.join(config.PROJECT_ROOT, 'tests/files/images')) with open(os.path.join(config.PROJECT_ROOT, 'tests/files/images/test-qr.base64.txt'), 'r') as f: font_base64 = f.read() assert 'url(data:image/png;base64,%s)' % font_base64 == calc('inline_image("/test-qr.png")').render() @pytest.mark.skipif(sys.platform == 'win32', reason='cur mimetype is defined on windows') @needs_PIL def test_inline_cursor(calc, monkeypatch): monkeypatch.setattr(config, 'IMAGES_ROOT', os.path.join(config.PROJECT_ROOT, 'tests/files/cursors')) with open(os.path.join(config.PROJECT_ROOT, 'tests/files/cursors/fake.base64.txt'), 'r') as f: font_base64 = f.read() assert 'url(data:image/cur;base64,%s)' % font_base64 == calc('inline_image("/fake.cur")').render() ����������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/test_core.py������������������������������������������������������0000664�0000000�0000000�00000037653�14205426364�0021516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Tests for the core Sass functions, as defined in the original Sass documentation: http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html """ from __future__ import absolute_import from __future__ import division from __future__ import unicode_literals from scss.calculator import Calculator from scss.extension.core import CoreExtension from scss.types import Color, Number, String # TODO many of these tests could also stand to test for failure cases def calc(expression): return Calculator(CoreExtension.namespace).evaluate_expression(expression) def render(expression): return calc(expression).render() def assert_equivalent(actual, expected): assert render(actual) == render(expected) # ------------------------------------------------------------------------------ # RGB functions def test_rgb(): assert calc('rgb(128, 192, 224)') == Color.from_rgb(128/255, 192/255, 224/255) assert calc('rgb(20%, 40%, 60%)') == Color.from_rgb(0.2, 0.4, 0.6) def test_rgba(): # four args (css-style) assert calc('rgba(128, 192, 224, 0.5)') == Color.from_rgb(128/255, 192/255, 224/255, 0.5) assert calc('rgba(20%, 40%, 60%, 0.7)') == Color.from_rgb(0.2, 0.4, 0.6, 0.7) # two args (modify alpha of existing color) assert calc('rgba(red, 0.4)') == Color.from_rgb(1., 0., 0., 0.4) def test_red(): assert calc('red(orange)') == Number(255) def test_green(): assert calc('green(orange)') == Number(165) def test_blue(): assert calc('blue(orange)') == Number(0) def test_mix(): # Examples from the Ruby docs # Note that the results have been adjusted slightly; Ruby floors the mixed # channels, but we round assert calc('mix(#f00, #00f)') == calc('#800080') assert calc('mix(#f00, #00f, 25%)') == calc('#4000bf') assert calc('mix(rgba(255, 0, 0, 0.5), #00f)') == calc('rgba(64, 0, 191, 0.75)') # ------------------------------------------------------------------------------ # HSL functions def test_hsl(): # Examples from the CSS 3 color spec, which Sass uses # (http://www.w3.org/TR/css3-color/#hsl-color) assert calc('hsl(0, 100%, 50%)') == Color.from_rgb(1., 0., 0.) assert calc('hsl(120, 100%, 50%)') == Color.from_rgb(0., 1., 0.) assert calc('hsl(120, 100%, 25%)') == Color.from_rgb(0., 0.5, 0.) assert calc('hsl(120, 100%, 75%)') == Color.from_rgb(0.5, 1., 0.5) assert calc('hsl(120, 75%, 75%)') == Color.from_rgb(0.5625, 0.9375, 0.5625) def test_hsla(): # Examples from the CSS 3 color spec assert calc('hsla(120, 100%, 50%, 1)') == Color.from_rgb(0., 1., 0.,) assert calc('hsla(240, 100%, 50%, 0.5)') == Color.from_rgb(0., 0., 1., 0.5) assert calc('hsla(30, 100%, 50%, 0.1)') == Color.from_rgb(1., 0.5, 0., 0.1) def test_hue(): assert calc('hue(yellow)') == Number(60, unit='deg') def test_saturation(): assert calc('saturation(yellow)') == Number(100, unit='%') def test_lightness(): assert calc('lightness(yellow)') == Number(50, unit='%') # HSL manipulation functions def test_adjust_hue(): # Examples from the Ruby docs assert calc('adjust-hue(hsl(120, 30%, 90%), 60deg)') == calc('hsl(180, 30%, 90%)') assert calc('adjust-hue(hsl(120, 30%, 90%), -60deg)') == calc('hsl(60, 30%, 90%)') assert calc('adjust-hue(#811, 45deg)') == Color.from_rgb(136/255, 106.25/255, 17/255) def test_lighten(): # Examples from the Ruby docs assert calc('lighten(hsl(0, 0%, 0%), 30%)') == calc('hsl(0, 0, 30)') assert calc('lighten(#800, 20%)') == calc('#e00') def test_darken(): # Examples from the Ruby docs assert calc('darken(hsl(25, 100%, 80%), 30%)') == calc('hsl(25, 100%, 50%)') assert calc('darken(#800, 20%)') == calc('#200') def test_saturate(): # Examples from the Ruby docs assert calc('saturate(hsl(120, 30%, 90%), 20%)') == calc('hsl(120, 50%, 90%)') assert calc('saturate(#855, 20%)') == Color.from_rgb(158.1/255, 62.9/255, 62.9/255) def test_desaturate(): # Examples from the Ruby docs assert calc('desaturate(hsl(120, 30%, 90%), 20%)') == calc('hsl(120, 10%, 90%)') assert calc('desaturate(#855, 20%)') == Color.from_rgb(113.9/255, 107.1/255, 107.1/255) def test_grayscale(): assert calc('grayscale(black)') == Color.from_rgb(0., 0., 0.) assert calc('grayscale(white)') == Color.from_rgb(1., 1., 1.) assert calc('grayscale(yellow)') == Color.from_rgb(0.5, 0.5, 0.5) def test_grayscale_css_filter(): # grayscale(number) is a CSS filter and should be left alone assert calc('grayscale(1)') == String("grayscale(1)") def test_complement(): assert calc('complement(black)') == Color.from_rgb(0., 0., 0.) assert calc('complement(white)') == Color.from_rgb(1., 1., 1.) assert calc('complement(yellow)') == Color.from_rgb(0., 0., 1.) def test_invert(): assert calc('invert(black)') == Color.from_rgb(1., 1., 1.) assert calc('invert(white)') == Color.from_rgb(0., 0., 0.) assert calc('invert(yellow)') == Color.from_rgb(0., 0., 1.) def test_invert_css_filter(): # invert(number) is a CSS filter and should be left alone assert calc('invert(50%)') == String("invert(50%)") # ------------------------------------------------------------------------------ # Opacity functions def test_alpha_opacity(): assert calc('alpha(black)') == Number(1.) assert calc('alpha(rgba(black, 0.5))') == Number(0.5) assert calc('alpha(rgba(black, 0))') == Number(0.) # opacity is a synonym assert calc('opacity(black)') == Number(1.) assert calc('opacity(rgba(black, 0.5))') == Number(0.5) assert calc('opacity(rgba(black, 0))') == Number(0.) def test_alpha_ie_filter(): # alpha() is supposed to leave the IE filter syntax alone assert render('alpha(opacity=20)') == "alpha(opacity=20)" def test_opacify_fadein(): # Examples from the Ruby docs assert calc('opacify(rgba(0, 0, 0, 0.5), 0.1)') == calc('rgba(0, 0, 0, 0.6)') assert calc('opacify(rgba(0, 0, 17, 0.8), 0.2)') == calc('#001') # fade-in is a synonym assert calc('fade-in(rgba(0, 0, 0, 0.5), 0.1)') == calc('rgba(0, 0, 0, 0.6)') assert calc('fade-in(rgba(0, 0, 17, 0.8), 0.2)') == calc('#001') def test_transparentize_fadeout(): # Examples from the Ruby docs assert calc('transparentize(rgba(0, 0, 0, 0.5), 0.1)') == calc('rgba(0, 0, 0, 0.4)') assert calc('transparentize(rgba(0, 0, 0, 0.8), 0.2)') == calc('rgba(0, 0, 0, 0.6)') # fade-out is a synonym assert calc('fade-out(rgba(0, 0, 0, 0.5), 0.1)') == calc('rgba(0, 0, 0, 0.4)') assert calc('fade-out(rgba(0, 0, 0, 0.8), 0.2)') == calc('rgba(0, 0, 0, 0.6)') # ------------------------------------------------------------------------------ # Other color functions def test_adjust_color(): # Examples from the Ruby docs assert calc('adjust-color(#102030, $blue: 5)') == calc('#102035') assert calc('adjust-color(#102030, $red: -5, $blue: 5)') == calc('#0b2035') assert calc('adjust-color(hsl(25, 100%, 80%), $lightness: -30%, $alpha: -0.4)') == calc('hsla(25, 100%, 50%, 0.6)') def test_scale_color(): # Examples from the Ruby docs assert calc('scale-color(hsl(120, 70, 80), $lightness: 50%)') == calc('hsl(120, 70, 90)') assert calc('scale-color(rgb(200, 150, 170), $green: -40%, $blue: 70%)') == calc('rgb(200, 90, 229)') assert calc('scale-color(hsl(200, 70, 80), $saturation: -90%, $alpha: -30%)') == calc('hsla(200, 7, 80, 0.7)') def test_change_color(): # Examples from the Ruby docs assert calc('change-color(#102030, $blue: 5)') == calc('#102005') assert calc('change-color(#102030, $red: 120, $blue: 5)') == calc('#782005') assert calc('change-color(hsl(25, 100%, 80%), $lightness: 40%, $alpha: 0.8)') == calc('hsla(25, 100%, 40%, 0.8)') assert calc('change-color(red, $hue: 240)') == calc('blue') def test_ie_hex_str(): # Examples from the Ruby docs assert calc('ie-hex-str(#abc)') == calc('"#FFAABBCC"') assert calc('ie-hex-str(#3322BB)') == calc('"#FF3322BB"') assert calc('ie-hex-str(rgba(0, 255, 0, 0.5))') == calc('"#8000FF00"') # ------------------------------------------------------------------------------ # String functions def test_unquote(): # Examples from the Ruby docs ret = calc('unquote("foo")') assert ret == String('foo') assert ret.quotes is None ret = calc('unquote(foo)') assert ret == String('foo') assert ret.quotes is None assert calc('unquote((one, two, three))') == String('one, two, three') def test_quote(): # Examples from the Ruby docs ret = calc('quote("foo")') assert ret == String('foo') assert ret.quotes == '"' ret = calc('quote(foo)') assert ret == String('foo') assert ret.quotes == '"' # TODO more of these need quote checking too def test_str_length(): # Examples from the Ruby docs assert calc('str-length("foo")') == calc('3') def test_str_insert(): # Examples from the Ruby docs assert calc('str-insert("abcd", "X", 1)') == calc('"Xabcd"') assert calc('str-insert("abcd", "X", 4)') == calc('"abcXd"') # DEVIATION: see https://github.com/nex3/sass/issues/954 assert calc('str-insert("abcd", "X", 5)') == calc('"abcdX"') def test_str_index(): # Examples from the Ruby docs assert calc('str-index(abcd, a)') == calc('1') assert calc('str-index(abcd, ab)') == calc('1') assert calc('str-index(abcd, X)') == calc('0') assert calc('str-index(abcd, c)') == calc('3') def test_str_slice(): # Examples from the Ruby docs assert calc('str-slice("abcd", 2, 3)') == calc('"bc"') assert calc('str-slice("abcd", 2)') == calc('"bcd"') assert calc('str-slice("abcd", -3, -2)') == calc('"bc"') assert calc('str-slice("abcd", 2, -2)') == calc('"bc"') assert calc('str-slice("abcd", 0, 3)') == calc('"abc"') assert calc('str-slice("abcd", 1, 3)') == calc('"abc"') assert calc('str-slice("abcd", 1, 30)') == calc('"abcd"') def test_to_upper_case(): # Examples from the Ruby docs assert calc('to-upper-case(abcd)') == calc('ABCD') def test_to_lower_case(): # Examples from the Ruby docs assert calc('to-lower-case(ABCD)') == calc('abcd') # ------------------------------------------------------------------------------ # Number functions def test_percentage(): # Examples from the Ruby docs assert calc('percentage(100px / 50px)') == calc('200%') def test_round(): # Examples from the Ruby docs assert calc('round(10.4px)') == calc('10px') assert calc('round(10.6px)') == calc('11px') def test_ceil(): # Examples from the Ruby docs assert calc('ceil(10.4px)') == calc('11px') assert calc('ceil(10.6px)') == calc('11px') def test_floor(): # Examples from the Ruby docs assert calc('floor(10.4px)') == calc('10px') assert calc('floor(10.6px)') == calc('10px') def test_abs(): # Examples from the Ruby docs assert calc('abs(10px)') == calc('10px') assert calc('abs(-10px)') == calc('10px') def test_min(): # Examples from the Ruby docs assert calc('min(1px, 4px)') == calc('1px') assert calc('min(5em, 3em, 4em)') == calc('3em') def test_max(): # Examples from the Ruby docs assert calc('max(1px, 4px)') == calc('4px') assert calc('max(5em, 3em, 4em)') == calc('5em') # ------------------------------------------------------------------------------ # List functions def test_length(): # Examples from the Ruby docs assert calc('length(10px)') == calc('1') assert calc('length(10px 20px 30px)') == calc('3') def test_nth(): # Examples from the Ruby docs assert calc('nth(10px 20px 30px, 1)') == calc('10px') assert calc('nth((Helvetica, Arial, sans-serif), 3)') == calc('sans-serif') assert calc('nth((width: 10px, length: 20px), 2)') == calc('length, 20px') assert calc('nth(10px 20px 30px, -1)') == calc('30px') def test_join(): # Examples from the Ruby docs assert_equivalent('join(10px 20px, 30px 40px)', '10px 20px 30px 40px') assert_equivalent('join((blue, red), (#abc, #def))', 'blue, red, #abc, #def') assert_equivalent('join(10px, 20px)', '10px 20px') assert_equivalent('join(10px, 20px, comma)', '10px, 20px') assert_equivalent('join((blue, red), (#abc, #def), space)', 'blue red #abc #def') def test_append(): # Examples from the Ruby docs assert calc('append(10px 20px, 30px)') == calc('10px 20px 30px') assert calc('append((blue, red), green)') == calc('blue, red, green') assert calc('append(10px 20px, 30px 40px)') == calc('10px 20px (30px 40px)') assert calc('append(10px, 20px, comma)') == calc('10px, 20px') assert calc('append((blue, red), green, space)') == calc('blue red green') # TODO need to test for commas here assert calc('append((a, b), c)') == calc('a, b, c') def test_zip(): # Examples from the Ruby docs assert calc('zip(1px 1px 3px, solid dashed solid, red green blue)') == calc('1px solid red, 1px dashed green, 3px solid blue') def test_index(): # Examples from the Ruby docs assert calc('index(1px solid red, solid)') == calc('2') assert calc('index(1px solid red, dashed)') == calc('false') def test_list_separator(): # Examples from the Ruby docs assert calc('list-separator(1px 2px 3px)') == calc('space') assert calc('list-separator(1px, 2px, 3px)') == calc('comma') assert calc('list-separator("foo")') == calc('space') def test_set_nth(): # Examples from the Ruby docs assert calc('set-nth($list: 10px 20px 30px, $n: 2, $value: -20px)') == calc('10px -20px 30px') # ------------------------------------------------------------------------------ # Map functions def test_map_get(): # Examples from the Ruby docs assert calc('map-get(("foo": 1, "bar": 2), "foo")') == calc('1') assert calc('map-get(("foo": 1, "bar": 2), "bar")') == calc('2') assert calc('map-get(("foo": 1, "bar": 2), "baz")') == calc('null') def test_map_merge(): # Examples from the Ruby docs assert calc('map-merge(("foo": 1), ("bar": 2))') == calc('("foo": 1, "bar": 2)') assert calc('map-merge(("foo": 1, "bar": 2), ("bar": 3))') == calc('("foo": 1, "bar": 3)') def test_map_keys(): # Examples from the Ruby docs assert calc('map-keys(("foo": 1, "bar": 2))') == calc('"foo", "bar"') def test_map_values(): # Examples from the Ruby docs assert calc('map-values(("foo": 1, "bar": 2))') == calc('1, 2') assert calc('map-values(("foo": 1, "bar": 2, "baz": 1))') == calc('1, 2, 1') def test_map_has_key(): # Examples from the Ruby docs assert calc('map-has-key(("foo": 1, "bar": 2), "foo")') == calc('true') assert calc('map-has-key(("foo": 1, "bar": 2), "baz")') == calc('false') # ------------------------------------------------------------------------------ # Introspection functions def test_type_of(): # Examples from the Ruby docs assert calc('type-of(100px)') == calc('number') assert calc('type-of(asdf)') == calc('string') assert calc('type-of("asdf")') == calc('string') assert calc('type-of(true)') == calc('bool') assert calc('type-of(#fff)') == calc('color') assert calc('type-of(blue)') == calc('color') def test_unit(): # Examples from the Ruby docs assert calc('unit(100)') == calc('""') assert calc('unit(100px)') == calc('"px"') assert calc('unit(3em)') == calc('"em"') assert calc('unit(10px * 5em)') == calc('"em*px"') # NOTE: the docs say "em*px/cm*rem", but even Ruby sass doesn't actually # return that assert calc('unit(10px * 5em / 30cm / 1rem)') == calc('"em/rem"') def test_unitless(): # Examples from the Ruby docs assert calc('unitless(100)') == calc('true') assert calc('unitless(100px)') == calc('false') def test_comparable(): # Examples from the Ruby docs assert calc('comparable(2px, 1px)') == calc('true') assert calc('comparable(100px, 3em)') == calc('false') assert calc('comparable(10cm, 3mm)') == calc('true') # ------------------------------------------------------------------------------ # Miscellaneous functions def test_if(): # Examples from the Ruby docs assert calc('if(true, 1px, 2px)') == calc('1px') assert calc('if(false, 1px, 2px)') == calc('2px') �������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/extension/test_extra.py�����������������������������������������������������0000664�0000000�0000000�00000002154�14205426364�0021675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Tests for extra non-standard functions. These tests call the relevant functions directly, rather than going through a calculator. They all do a considerable amount of work, and that's what's being tested, rather than the parsing or type system. """ from __future__ import absolute_import from __future__ import unicode_literals import scss.extension.extra as libextra from scss.tests.util import needs_PIL from scss.types import Boolean, Color, Number # TODO: currently these all just call the functions and make sure they pass. # would be nice to check the output, though that's a little tedious. @needs_PIL def test_background_noise(): libextra.background_noise(Number(0.5), Number(0.5), Number(100), Boolean(True), color=Color.from_name('green')) @needs_PIL def test_background_brushed(): libextra.background_brushed(Number(0.5), Number(0.5), Color.from_name('red'), Number(0.5)) @needs_PIL def test_grid_image(): # TODO this should accept sass values only :| libextra.grid_image(5, 100, 5, 100) @needs_PIL def test_image_color(): libextra.image_color(Color.from_rgb(1, 1, 0)) assert True ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0016225�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017165�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/append.css�������������������������������������������������������0000664�0000000�0000000�00000000046�14205426364�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { a: 1; b: 1 2; c: 1, 2, 3; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/append.scss������������������������������������������������������0000664�0000000�0000000�00000000252�14205426364�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Default when the first list has < 2 elements is space $a: append((), 1); $b: append(append((), 1, comma), 2); $c: append((1, 2), 3); p { a: $a; b: $b; c: $c; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/argspec-named-arguments.css��������������������������������������0000664�0000000�0000000�00000000030�14205426364�0024401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { line-height: 6; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/argspec-named-arguments.scss�������������������������������������0000664�0000000�0000000�00000000206�14205426364�0024571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @function calculate($foo: 1, $bar: 2) { @return $foo * $bar; } p { line-height: calculate($foo: 3); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/argspec-slurpy-arguments.css�������������������������������������0000664�0000000�0000000�00000000120�14205426364�0024653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.shadows { box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; margin: 10em; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/argspec-slurpy-arguments.scss������������������������������������0000664�0000000�0000000�00000000573�14205426364�0025052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin box-shadow($shadows...) { box-shadow: $shadows; } @function reduce($left, $right, $remaining...) { $ret: $left + $right; @if length($remaining) > 0 { @return reduce($ret, $remaining...); } @else { @return $ret; } } .shadows { @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999); margin: reduce(1em, 2em, 3em, 4em); } �������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-1.css���������������������������������������������������0000664�0000000�0000000�00000001150�14205426364�0021566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: #f00; } @-moz-keyframes spinnerRotate, @-webkit-keyframes spinnerRotate, @keyframes spinnerRotate { from { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); transform: rotate(0deg); } 75% { font-size: 300%; margin-left: 25%; width: 150%; } to { -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); transform: rotate(360deg); } } @-webkit-keyframes spinnerRotate { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 72% { left: 50px; } 100% { top: 100px; left: 100%; } } a { color: #0f0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-1.scss��������������������������������������������������0000664�0000000�0000000�00000001127�14205426364�0021755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; p { color: #f00; } @-moz-keyframes spinnerRotate, @-webkit-keyframes spinnerRotate, @keyframes spinnerRotate { from { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); transform: rotate(0deg); } 75% { font-size: 300%; margin-left: 25%; width: 150%; } to { -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); transform: rotate(360deg); } } @-webkit-keyframes spinnerRotate { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 72% { left: 50px; } 100% { top: 100px; left: 100%; } } a { color: #0f0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-2.css���������������������������������������������������0000664�0000000�0000000�00000000421�14205426364�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1 { color: #f00; } @-moz-document (http://www.w3.org/), url-prefix(http://www.w3.org/Style/) { #search input { border-radius: 0; width: 154px; padding: 3px 2px; margin: 0; font-size: 14px; } .hbox { width: 100%; } } h2 { color: #0f0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-2.scss��������������������������������������������������0000664�0000000�0000000�00000000450�14205426364�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; h1 { color: #f00; } @-moz-document (http://www.w3.org/), url-prefix(http://www.w3.org/Style/) { #search input { border-radius: 0; width: 154px; padding: 3px 2px; margin: 0; font-size: 14px; } .hbox { width: 100%; } } h2 { color: #0f0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-compressed-semicolon.css��������������������������������0000664�0000000�0000000�00000000027�14205426364�0025562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "utf8";a{b:c} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-compressed-semicolon.scss�������������������������������0000664�0000000�0000000�00000000075�14205426364�0025750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:compressed; @charset "utf8"; a { b: c; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-duplicate-media-queries.css�����������������������������0000664�0000000�0000000�00000000360�14205426364�0026132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: #f00; } @media screen, print { body { line-height: 1.2; } } @media (min-width: 700px), handheld and (orientation: landscape) { body { background: #123; } div { background: #456; } } a { color: #0f0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-duplicate-media-queries.scss����������������������������0000664�0000000�0000000�00000000465�14205426364�0026323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; // https://github.com/Kronuz/pyScss/issues/69 p { color: #f00; } @media screen, print { body { line-height: 1.2; } } @media (min-width: 700px), handheld and (orientation: landscape) { body { background: #123; } div { background: #456; } } a { color: #0f0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-interpolation.css���������������������������������������0000664�0000000�0000000�00000000243�14205426364�0024317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@media (max-width: 900px) { div { color: red; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(-359deg); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/at-rules-interpolation.scss��������������������������������������0000664�0000000�0000000�00000000475�14205426364�0024511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $width: 900px; @media (max-width: $width) { div { color: red; } } @mixin keyframes($name) { @keyframes #{$name} { @content; } } @include keyframes(spin) { from { transform: rotate(0deg); } to { transform: rotate(-359deg); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/base64url.css����������������������������������������������������0000664�0000000�0000000�00000000325�14205426364�0021506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.logo { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/base64url.scss���������������������������������������������������0000664�0000000�0000000�00000000525�14205426364�0021673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Two slashes inside a URL were being stripped as a comment, leaving bogus SCSS // https://github.com/Kronuz/pyScss/issues/350 .logo { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/colors-preserve-names.css����������������������������������������0000664�0000000�0000000�00000000106�14205426364�0024127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div.black p[color=black]{content:'black'}table{background-color:#000} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/colors-preserve-names.scss���������������������������������������0000664�0000000�0000000�00000000166�14205426364�0024320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:compressed; div.black p[color=black] { content: 'black'; } table { background-color: black; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/division-in-assignment.css���������������������������������������0000664�0000000�0000000�00000000025�14205426364�0024272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { height: 6px; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/division-in-assignment.scss��������������������������������������0000664�0000000�0000000�00000000124�14205426364�0024455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $em-scale: 12px / 1em; p { height: 0.5em * $em-scale; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/division-vs-literal-slash.css������������������������������������0000664�0000000�0000000�00000000237�14205426364�0024715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1 { font: 3px / 0; } h2 { border-radius: 10px 9px 8px 7px / 6px 5px 4px 3px; } h3 { line-height: 2; } h4 { line-height: 2; } h5 { line-height: 2; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/division-vs-literal-slash.scss�����������������������������������0000664�0000000�0000000�00000001267�14205426364�0025104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; // http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#division-and-slash // "by default, if two numbers are separated by / in SassScript, then they will // appear that way in the resulting CSS." h1 { font: 3px/0; } h2 { border-radius: 10px 9px 8px 7px / 6px 5px 4px 3px; } // "However, there are three situations where the / will be interpreted as // division." // 1. If the value, or any part of it, is stored in a variable. $denom: 5; h3 { line-height: 10 / $denom; } // 2. If the value is surrounded by parentheses. h4 { line-height: (10 / 5); } // 3. If the value is used as part of another arithmetic expression. h5 { line-height: 10 / 5 + 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-child-selector.css����������������������������������������0000664�0000000�0000000�00000000064�14205426364�0024065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.child, .parent > .other-child { color: yellow; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-child-selector.scss���������������������������������������0000664�0000000�0000000�00000000115�14205426364�0024245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.child { color: yellow; } .parent > .other-child { @extend .child; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-common-prefix-complex.css���������������������������������0000664�0000000�0000000�00000002337�14205426364�0025421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#one #two #three a, #one #two #three b { key: value; } #one #three c, #one #two #three d { key: value; } #one #two #three e, #one #two #three f { key: value; } #one.x #two.y #three.z g, #one.x #two.y #three.z h { key: value; } #one #two #three i, #one.x #two.y #three.z j { key: value; } #one #two k, #one #two #three l { key: value; } #two #three m, #one #two #three n { key: value; } #one #two #three o, #one #two #three #four p { key: value; } #one #two #three #four q, #one #two #three #four r { key: value; } #one #two #four s, #one #two #three #four t, #one #three #two #four t { key: value; } #one #three #five u, #one #two #three #five #four v, #one #two #three #four #five v, #two #one #three #five #four v, #two #one #three #four #five v { key: value; } #one #two #four #five w, #one #two #three #four #five x, #one #three #two #four #five x { key: value; } one two one three one four one y, one two five one three one four one six z, one two five one three one six four one z, five one two one three one four one six z, five one two one three one six four one z { key: value; } five one three one six aa, five one two one three one four one six bb, one two five one three one four one six bb { key: value; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-common-prefix-complex.scss��������������������������������0000664�0000000�0000000�00000002316�14205426364�0025601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; #one #two #three a { key: value; } #one #two #three b { @extend a; } #one #three c { key: value; } #one #two #three d { @extend c; } #one #two #three e { key: value; } #one #three f { @extend e; } #one.x #two.y #three.z g { key: value; } #one #two #three h { @extend g; } #one #two #three i { key: value; } #one.x #two.y #three.z j { @extend i; } #one #two k { key: value; } #two #three l { @extend k; } #two #three m { key: value; } #one #two n { @extend m; } #one #two #three o { key: value; } #one #two #three #four p { @extend o; } #one #two #three #four q { key: value; } #one #two #three r { @extend q; } #one #two #four s { key: value; } #one #three #four t { @extend s; } #one #three #five u { key: value; } #two #three #four v { @extend u; } #one #two #four #five w { key: value; } #one #three #four #five x { @extend w; } // DEVIATION from ruby sass one two one three one four one y { key: value; } five one three one six z { @extend y; } // DEVIATION from ruby sass five one three one six aa { key: value; } one two one three one four one bb { @extend aa; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-common-prefix.css�����������������������������������������0000664�0000000�0000000�00000000155�14205426364�0023750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#content .error, #content .seriouserror { font-size: 10px; } #content .seriouserror { font-size: 33px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-common-prefix.scss����������������������������������������0000664�0000000�0000000�00000000234�14205426364�0024131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; #content { .error { font-size: 10px; } .seriouserror { @extend .error; font-size: 33px; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-selector-order.css����������������������������������������0000664�0000000�0000000�00000000151�14205426364�0024112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.nav-pills > li { float: left; } .nav-justified > li, .nav-tabs.nav-justified > li { float: none; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/extend-selector-order.scss���������������������������������������0000664�0000000�0000000�00000000242�14205426364�0024276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.nav-tabs { &.nav-justified { @extend .nav-justified; } } .nav-pills { > li { float: left; } } .nav-justified { > li { float: none; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/for-to-vs-through.css��������������������������������������������0000664�0000000�0000000�00000000160�14205426364�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { prop: 1; prop: 2; prop: 3; prop: 4; } b { prop: 1; prop: 2; prop: 3; prop: 4; prop: 5; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/for-to-vs-through.scss�������������������������������������������0000664�0000000�0000000�00000000267�14205426364�0023401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// `to` excludes the upper bound, but `through` does not a { @for $var from 1 to 5 { prop: $var; } } b { @for $var from 1 through 5 { prop: $var; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/if-with-parentheses.css������������������������������������������0000664�0000000�0000000�00000000052�14205426364�0023562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a:hover { text-decoration: underline; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/if-with-parentheses.scss�����������������������������������������0000664�0000000�0000000�00000000140�14205426364�0023743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { @if(true) { &:hover { text-decoration: underline; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/interpolation-timing.css�����������������������������������������0000664�0000000�0000000�00000000034�14205426364�0024050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: "value"; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/interpolation-timing.scss����������������������������������������0000664�0000000�0000000�00000000345�14205426364�0024240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin content_value($value) { content: $value; } div { // only exists in this block, so if the interpolation is evaluated /later/, // $local won't exist $local: value; @include content_value("#{$local}"); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/names-equivalence.css��������������������������������������������0000664�0000000�0000000�00000000024�14205426364�0023275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { width: 7em; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/names-equivalence.scss�������������������������������������������0000664�0000000�0000000�00000000273�14205426364�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $foo_bar: 1em; @function add_numbers($number_one, $number_two: $foo-bar) { @return $number-one + $number-two + $foo-bar; } p { width: add-numbers(5em); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/selectors-adjacent-is-not-include.css����������������������������0000664�0000000�0000000�00000000037�14205426364�0026301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p + h4 { margin-top: 28px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/selectors-adjacent-is-not-include.scss���������������������������0000664�0000000�0000000�00000000110�14205426364�0026454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; p { + h4 { margin-top: 28px; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/trailing-combinators.css�����������������������������������������0000664�0000000�0000000�00000000252�14205426364�0024025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div ~ p, div ~ blockquote { background-color: blue; } div > p, div > blockquote { background-color: blue; } div + p, div + blockquote { background-color: blue; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/trailing-combinators.scss����������������������������������������0000664�0000000�0000000�00000000272�14205426364�0024212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div ~ { p, blockquote { background-color: blue; } } div > { p, blockquote { background-color: blue; } } div + { p, blockquote { background-color: blue; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/unit-float-precision.css�����������������������������������������0000664�0000000�0000000�00000000026�14205426364�0023750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { width: 702px; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/unit-float-precision.scss����������������������������������������0000664�0000000�0000000�00000000435�14205426364�0024137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// A number of pixels is actually stored internally as millimeters, which // causes some slight precision issues in corner cases. In this case, the // answer came out as 701px rather than 702px, because the subtraction yielded // 701.99999999px. a { width: floor(742px - 40px); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/variables-font-face-default.css����������������������������������0000664�0000000�0000000�00000000223�14205426364�0025126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@font-face { font-family: "DaxlinePro-Thin"; } .title-thin { font-family: "DaxlinePro-Thin", "Helvetica Neue", Arial, Helvetica, sans-serif; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/bugs/variables-font-face-default.scss���������������������������������0000664�0000000�0000000�00000000357�14205426364�0025321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $helvetica-font-fallbacks: "Helvetica Neue", Arial, Helvetica, sans-serif !default; @font-face { font-family: "DaxlinePro-Thin"; } .title-thin { font-family: "DaxlinePro-Thin", $helvetica-font-fallbacks; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/compass/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017672�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/compass/current-color.css���������������������������������������������0000664�0000000�0000000�00000000116�14205426364�0023200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { background-image: linear-gradient(to top, transparent, currentColor); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/compass/current-color.scss��������������������������������������������0000664�0000000�0000000�00000000235�14205426364�0023365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { // currentColor is not actually a SCSS color value, but should be left alone background-image: linear-gradient(to top, transparent, currentColor); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/compass/gradients.css�������������������������������������������������0000664�0000000�0000000�00000004125�14205426364�0022366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.bg-shortcut-linear-gradient { background: #fff linear-gradient(top left, #ddd, #aaa); } .bg-shortcut-radial-gradient { background: #fff radial-gradient(center center, #ddd, #aaa 100px); } .bg-linear-gradient-angle-svg { background-image: linear-gradient(-45deg, blue, black); } .bg-linear-gradient-angle2-svg { background-image: linear-gradient(top left, blue, black); } .bg-linear-gradient { background-image: linear-gradient(top left, #ddd, #aaa); } .bg-linear-gradient-pixel-stop-from-top { background-image: linear-gradient(top, #ddd 10px, #aaa 40px); } .bg-linear-gradient-pixel-stop-from-left { background-image: linear-gradient(left, #ddd 10px, #aaa 40px); } .transparent-in-linear-gradient { background-image: #fff linear-gradient(top left, transparent, #aaa); } .bg-radial-gradient { background-image: radial-gradient(center center, #ddd, transparent 100px); } .bg-linear-gradient-with-angle { background-image: linear-gradient(-45deg, #ddd, #aaa); } .bg-radial-gradient-with-angle-and-shape { background-image: radial-gradient(ellipse cover, #ddd, #aaa 100px); } .bg-all-gradient-types { background-image: linear-gradient(top left, #ddd, #aaa); background-image: radial-gradient(center center, #ddd, #aaa 100px); } .border-image-gradient { border-image: radial-gradient(#0f0, #f00 100px) 100 stretch; } .direct-list-image-with-gradient { list-style-image: radial-gradient(lime, red 10px); } .shorthand-list-image-with-gradient { list-style: outside radial-gradient(lime, red 10px); } .content-with-gradient { content: radial-gradient(lime, red 10px); } .bg-linear-gradient-no-position { background-image: linear-gradient(#ddd, #aaa); } .bg-radial-gradient-no-position { background-image: radial-gradient(#ddd, #aaa 100px); } .cross-fade { background-image: cross-fade(radial-gradient(#ddd, #aaa 100px), url("4x6.png")); } .bg-radial-gradient-at { background: radial-gradient(circle at center, red, green); } .bg-linear-gradient-to { background: linear-gradient(to right, red, green); } .panel { background-image: linear-gradient(to bottom, red, green); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/compass/gradients.scss������������������������������������������������0000664�0000000�0000000�00000005255�14205426364�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Borrowed from Compass's actual test suite, but cut down to just the gradient // calls, and with some editing to e.g. preserve color formatting: // https://github.com/chriseppstein/compass/blob/stable/test/fixtures/stylesheets/compass/sass/gradients.sass // Similarly, the expected results have been trimmed to just the standard // syntax, since this file doesn't use any of Compass's background() calls etc. // TODO maybe it should, since we try to support all that .bg-shortcut-linear-gradient { background: #fff linear-gradient(top left, #ddd, #aaa); } .bg-shortcut-radial-gradient { background: #fff radial-gradient(center center, #ddd, #aaa 100px); } .bg-linear-gradient-angle-svg { background-image: linear-gradient(-45deg, blue, black); } .bg-linear-gradient-angle2-svg { background-image: linear-gradient(top left, blue, black); } .bg-linear-gradient { background-image: linear-gradient(top left, #ddd, #aaa); } .bg-linear-gradient-pixel-stop-from-top { background-image: linear-gradient(top, #ddd 10px, #aaa 40px); } .bg-linear-gradient-pixel-stop-from-left { background-image: linear-gradient(left, #ddd 10px, #aaa 40px); } .transparent-in-linear-gradient { background-image: #fff linear-gradient(top left, transparent, #aaa); } .bg-radial-gradient { background-image: radial-gradient(center center, #ddd, transparent 100px); } .bg-linear-gradient-with-angle { background-image: linear-gradient(-45deg, #ddd, #aaa); } .bg-radial-gradient-with-angle-and-shape { background-image: radial-gradient(ellipse cover, #ddd, #aaa 100px); } .bg-all-gradient-types { background-image: linear-gradient(top left, #ddd, #aaa); background-image: radial-gradient(center center, #ddd, #aaa 100px); } .border-image-gradient { border-image: radial-gradient(#0f0,#f00 100px) 100 stretch; } .direct-list-image-with-gradient { list-style-image: radial-gradient(lime, red 10px); } .shorthand-list-image-with-gradient { list-style: outside radial-gradient(lime, red 10px); } .content-with-gradient { content: radial-gradient(lime, red 10px); } .bg-linear-gradient-no-position { background-image: linear-gradient(#ddd, #aaa); } .bg-radial-gradient-no-position { background-image: radial-gradient(#ddd, #aaa 100px); } .cross-fade { background-image: cross-fade(radial-gradient(#ddd, #aaa 100px), url("4x6.png")); } /* New tests of our own */ // Valid CSS3, used to come out with the first argument doubled .bg-radial-gradient-at { background: radial-gradient(circle at center, red 0%, green 100%); } .bg-linear-gradient-to { background: linear-gradient(to right, red 0%, green 100%); } // Issue #404 .panel { background-image: linear-gradient(to bottom, red 0, green 100%); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/cursors/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017725�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/cursors/fake.base64.txt�����������������������������������������������0000664�0000000�0000000�00000000150�14205426364�0022453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ODYzNzR0b213ZHQzNDV2MzRmNWRtODR0dXJlOGc4OXVpaDQzNTh5M3Y0Nzh0dzRwOTh0dWc5OGRmeWdlcjY4N3lldWl5N2VyeXQ4Nw==������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/cursors/fake.cur������������������������������������������������������0000664�0000000�0000000�00000000114�14205426364�0021342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������86374tomwdt345v34f5dm84ture8g89uih4358y3v478tw4p98tug98dfyger687yeuiy7eryt87����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017356�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/bgrove.base64.txt�����������������������������������������������0000664�0000000�0000000�00000060640�14205426364�0022474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AAEAAAAOAIAAAwBgRkZUTVRX4doAAEkcAAAAHE9TLzJXOYGVAAABaAAAAFZjbWFwo9b83AAAA5wAAAGCY3Z0IAAhAnkAAAUgAAAABGdhc3D//wADAABJFAAAAAhnbHlmHjQt6QAABhQAADqcaGVhZO/rWMkAAADsAAAANmhoZWEG3gJsAAABJAAAACRobXR44bASCgAAAcAAAAHca2VybgkODBcAAECwAAACpmxvY2FEK1KSAAAFJAAAAPBtYXhwAMYAngAAAUgAAAAgbmFtZXbvKHoAAENYAAAD/3Bvc3Q8IkO/AABHWAAAAbwAAQAAAAYAAJqBq3tfDzz1AAsD6AAAAADG9QrgAAAAAMb1CuD/C/6AA9IDpAAAAAgAAgAAAAAAAAABAAADpP6AAFoD/v8L/3YD0gABAAAAAAAAAAAAAAAAAAAAdwABAAAAdwBtAA0AAAAAAAIAAAABAAEAAABAAC4AAAAAAAEB1gH0AAUACAKKArsAAACMAooCuwAAAd8AMQECAAACAAYDAAAAAAAAAAAAAwAAAAgAAAAAAAAAAFBmRWQAQAAgISIC7v8GAFoDpAGAAAAAAQAAAAAAAAFsACECrwA8AU0AAAGqAAAAxwAuARUANAIZAC8CKQAoApsAKwI4ACgAkQA0ANoANADa/9MB7wAuAe8ALwC2//4B7wAvAMcALgIzAC4CAAA0AUkAKAHtACgB5wAoAggAKAHzADQB9AA0Aj4ALgIVACgB6wArAL8AKgC4//4B4QAoAe8ALwHhAC4B5wAoApcAKAKvADQCpQA0Ak4AKAJAADQB+QA0AfkANAKGACgCqQA0AUMALgJNACgCYAA0AfgANAKtADQCAQA0ApcAKAHzADQCmwAoAfkANAIqACgB8wAuAq8ANAKpAC4CsAA0AgQALgKrADICCwAsAJYANAIzAC4Alf+6AfAALQHXACkAhQAuAfQAKAH0ADQBpwAoAfMAKAHnACgCUwAuAfQAKAIAADQBQwAuAOv/HwH3ADQBQwAuArUAPAH/ADQB5wAoAfMANAHsACgB2QA0AZ4ALQH0AC4B/wA0AiQALQKwADQB8gAuAgAANAHzAC4BGQAtAKEAPAEZ/7gBvQAyALsAMAGnADAAmQBCAf4APAKjADACuQA8AU8AKgH/ADYB5wAwAfEANgH+ADwB8gA2AgwANAMuADwD/gAwAVMANgDZ/wwCiAA8AqUALgK0ADYCvwA8AAAAAwAAAAMAAAAcAAEAAAAAAHwAAwABAAAAHAAEAGAAAAAUABAAAwAEAAAAfgCiAKcAqQCuALEAvyEi//8AAAAAACAAoQCmAKkArgCwAL8hIv//AAH/4//B/77/vf+5/7j/q99OAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaGMAZQAAAGdmcAAAAAAAAGkAAAAAAAAAAAAAAAAAAGpiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAnkAAAAqAFwAXABcAIYAogEqAaYB8AJQAmICjAK2A0ADcgOgA7YD1APyBDwEcgS8BSAFZgWuBfQGOAZ+BtIHCAdQB4IHpgfYCCoIogjQCS4JXgmQCcwKDApUCpIKvgr2Cz4Lbgu4C/YMGAxODKYM/g1KDXYNog3YDiYOdg66DwgPMA9OD3YPrg/CD9QQChBKEH4QvBD6EToRhhHCEhISXhKoEtQTJBNSE3ITshP2FDAUdBSwFOYVEhVaFc4WGBZoFqgWuhcEF0IXaheyF84YMBh8GNAY7hkuGX4ZshnoGhwaVhqqGx4bbhvAHC4cjBzWHU4AAgAhAAABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6MfHApr9ZiECWAAAAgA8//8ChQMZAA8AHwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCaeAYUpOTkp/nsoOjoBrf57FyIiFwGFFyEhAxk5Kf2qKTk5KQJWKTkqIRf9qhchIRcCVhchAAMALv/kAJkDGQAJABMAGwAAExEUIyI1ETQzMgIyFhQGIyImNTQXIhUUMzI1NHgUFRUUKiwfHxYXHzYNDQwDB/2lERECWxL9Nh8uHh8WFwoNDAwNAAIANAIZAOEC8wAIABEAABMyHQEUIj0BNDMyHQEUIj0BNEkUKZgVKQLzErYSErYSErYSErYSAAAAAgAvAG4B7AItAFwAbAAAEjIWHQEUFjsBMjY9ATQ2FhcVFBY7ATIWFAYrASIGHQEUFjsBMhYUBisBIgYdAQ4BIiY9ATQmKwEiBh0BFAYiJj0BNCYrASImNjsBMjY9ATQmKwEiJjY7ATI2PQE0FyIGHQEUFjsBMjY9ATQmI6kRDAwGagYLFRQBCgZMCQkJCUwGCgoGTAkJCQlMBgoBDBEMDAZpBgwMEQwLBkwLCgoLTAYLCwZMCwoKC0wGCzsGDAwGagYLCwYCLAkJTAYLCwZMDAkJDEwGCwwRDAsHawYKDBEMCwZMCQkJCUwGCwsGTAkJCQlMBgsUFQoGawcLFRQLBkwJjwsGagcLCwdqBgsAAAAFACj/2wIBA0AAPwBHAE4AUgBZAAATMh0BMzU0MzIdAR4BFRQGIiY1NCYnER8BHgEVFAYHFRQiPQEjFRQiPQEuATU0NjMyFhUUFhcRJy4BNTQ2NzU0FwcRFxEiJiMHDgEVFB8CETMRFxE+ATU0J9sUQxUUQlQMEQw9MEEWIi1gRilDKUNVCwgJDT4xSSYvW0M2DUMCCAJgM0U7PSlDKTZKPANAEhcXEhIeEW5GCQoKCTVUEf6VJg4UUy1GaAUSEhISEhISGBFuRwoKCwk1VREBcCsWUzBFZQgYElIB/ssmAVsBAgdNNEcqI0j+oAE6GP7fBU42RisAAAUAKwAFAnADDQAHABYAHgAmAC4AABIyFhQGIiY0JDIWFRQHAQYjIiY1NDcBBCIGFBYyNjQSMhYUBiImNDYiBhQWMjY0dmhLS2hLAe8UDgL+UQUKCQ4CAa/+uEgyMkgyvGpKSmpKo0gyMkgyAw1LaEtLaEsMCAUE/SgIDAgFBALYITJIMjJI/lFLaEtLaCIySDIySAADACj//wIMAxkAKQA1AEIAABM0NjMyFhUUDwETNjU0JyY1NDMyFhUUBxcWFRQGIi8BBiMiJjQ/AScuATciBhUUHwE3NjU0JgMHDgQVFBYzMjdcY0hHYEdptww2Dw8aSBw3Aw8RBS5Eal6EQlpHDBWqN0kSTms0Sl80ARQXGBBqTF42AnBGY2lEUjNK/vkcIEUzDw4QZEE2L04FBQgNB0NLe7A9QWYNN55NMyQeb0sqOzNO/pYlAQ4WIC8bR2NGAAABADQCGQBdAvMACAAAEzIdARQiPQE0SRQpAvMSthISthIAAAABADT/rAEIA2UAGgAAEzQ+AzMyFRQHDgEdARQWFxYVFCMiJy4BNTQiMTgsDBARSFFcPREQBwpUXgH0Rn9SPhwQEAsruF/ZdqwlChEQBTDLcgAAAAAB/9P/rACnA2UAGwAAExQOAyMiNTQ3PgE9ATQmJyY1NDMyHgMVpiIxOSwLEBFGU1RFERAMLDgyIQEfR39TPhsQEQoqtWjZZbQpCxAQHD5TfkYAAAAFAC4BYgHCAvcAJwA3AEcAVwBmAAATNDYyFh0BFBY7ATIWFAYrASIGHQEUBiImPQE0JisBIiY0NjsBMjY1JyY1NDYzMh8BFhUUBiMiJzc2MzIWFRQPAQYjIiY1NDcHNjMyFhcUDwEGIyImNTQ3PgEyHwEWFRQGIyIvASY14wwRDAcEmQgJCQiZBAcMEQwHA5kJCQkJmQMHfAUOCQYFOgYMCQkFygUHCQ0FOQYJCQsFkAYICAwBBjoFBgkOBcULEgY5BQ0JBwU6BQLkCQkJCZkDBwwRDAcDmQkJCQmZAwcMEQwHA1UFBwgOBToFCQkLBVcFDggHBToFCwkJBZAGCwkJBjoFDggHBTQLBToFBwgOBToFCQABAC8AXgHAAe4AIwAAEzQ2Fh0BFBY7ATIWBisBIgYdARQGJj0BNCYrASImNjsBMjY14xUUBwSZCwkJC5kEBxQVBwOZCwoKC5kDBwHeCwkJC5kEBhUVBgSZCwkJC5kEBhUVBgQAAv/9/5wAjwBQABQAHQAAFzI+ATU0LgE1NDYyFhUUBiMiJjQ+ASIGFRQzMjY0EBAeEBUVHi0gSzQJCQlXCwYMBQg7DA0EAwkYFBcfHxc0Sg0QDGIIBQwHCgAAAAABAC8BEQHAATsACQAAEyEyFgYjISImNkABcAsJCQv+kAsKCgE7FRUVFQAAAAIALv/lAJkAUAAJABEAADcyFhQGIiY1NDYXFDMyNTQjImQWHx8sIB8KDQwMDVAeLh8fFxYfNQ0NDAAAAAEALgAOAgYDDQAPAAABNjMyFhUUBwEGIyImNTQ3Ad8FCgkOA/5SBQkJDwIDBAgMCAUE/SgIDAgFBAAAAAMANAACAcwDGQAUACEAMAAAEjIWFREOASImJzQmNTQ2NRE0JjU0JCIGFREeATMyNjURNAcyFhUUDwEGIiY1ND8BNquqdwR2pHYDAQEBARCIXgJeQkRfOAgOBdYEEA4G1gUDGXZV/nZRcXJSAgQCAQMBAXYBAwFVTV5E/nlBW19EAYBDkg4JBwXHBA4IBwbGBQAAAAABACgAAwEbAxwAJQAAEyImNTQ2MzIWFREzMhYdARQGKwEiJj0BNDY7AREOARUUHgEVFAZcDiZKNQsJVQQHBwTSBAcHBFQcJQ8PCwI8OyY1SggM/SQGBBUEBgYEFQQGAsUHLx4VHhEHCA4AAAABACgAAQHAAxgANgAAEjIWFRQOBg8CBgcGFRQWMyEyHQEUIyEiJjU0PgU/ATY1NCYjIgYHFAYiJjU0nqp3BAgIDAkMBwUEG6tQEjIlAQ0KCv7yNEsECggRBxMB/C9fRENeAQwRDAMYdlUPHhgWEw4OBwQEGZVQFSEkMgoVCks0DRgVDxIIEQHlL0RDX15ECQoKCVUAAQAo//8BvwMYAEgAABMUHwEUBiMiJyY1NDYzMhYXFQYHBgcGFRQfARYXFQ4BIyImNTQ3NjMyFhUHBhUUFjMyNj0BNC8BJjU0Nz4CPwE2PQE0JiMiBlEHBw8JCwQQd1VRdQUFIg8tDg08IwUFdVFVdxAECwkPBwdfRENfEz8fHAcOEQUVFV9DRF8CTBcXFwgNCyYpVXdwUBUxIRAsERkYEDsgMxZQcHdVKSYLDQgXFxdDYF9EAR8WPx8sKx4GDhEFFhgfAURfXwACACj//gHaAxkAIQAwAAAAMhYVAzMyHQEUKwERFAYrASImNREjIiY1ND4FPwEXIgcjDgEHBhUUFjsBESYBMi4fAVIKClIGBBUEBq41SgUKCRAIEgG4JgQDAQHEGRIyJa0CAxkfFv6yChUK/pwEBwcEAWRLNA4YFg8SCA8BqRoDAbIZFSAkMgFQCgAAAAEANP//AcsDFAA1AAATMzIVFCsBIgYXFRQVHAEVFBY7ATIWFAYiJjU0NzYzMhYVFAcGFRQWMzI2NTQmKwEuAT0BNDaw7BIS7CAzATUbUlV2dqp3EAQMCQ4BDV9EQ19eRE4xTEkDFBQVMx4CCA4CYDgdNXaqd3dVKSYLDAgEAx8gQ2BfRENfAUYtuTBJAAAAAAIANAAAAc0DFwALADEAAAEiBgcVFBYzMjY0JjcVFAYiJjU0JiIGHQEUFzI/AT4BMzIWFAYjIiY1NDYxETQ2MzIWAQBCXwFfQ0RfX4gNEAxfh18DAgIIE1AwVXd3VVR4AXZVUXsBblxCBUNfX4df6AoICgoIQ19eRPMKAQIIFyh2qnd2VAICAX5VdnUAAQAu//8CEwMXAC8AAAEUBg8BAzMyFCsBAwYdARQGKwEiJj0BNDc2PwEjIjU0OwETNjU0IyEiPQE0MyEyFgITBQICmS8SEkehEwYEFQQGCglQSikSEkGoAQz+WgoKAacWHgLhCQ4EA/7/Kf7wIRVJBAcHBEkYGRKGfRQVARoBBA0KFQogAAAAAAMAKP/+Ae0DIQAdACUALQAABCImNTQ2NzY0Jy4BNTQ2MhYVFAYHBhQXHgMVFAQyNjQmIgYUEjI2NCYiBhQBaLyETSYEBCFShLyFUyAEBAohKh7+0Zhra5hqaphra5hqAntYQ2YPAQoCDWNIWHt7WEdkDQIKAQQZLEcoWFJkjGRjjgEaZIxkY44AAAAAAgAr//4BxAMdACAANwAAAR4BFRQHAwcGIyIvASY1NDcTNiYPAQYjIiY1NDc+ATMyFyYjIgYHBhUUFhcWMzI2NzI2MTY1NCYBbCotJdxxAgcEAhEEAvwHCwgXCAhacyUdWTFAHSkzJ0cYHiQhKjQmRRcBAh0kAvcdWjFANP7JogQCCwMGBAIBZgoCAwMBe1JANCktRh0kISozJ0YYHiIgBCkzKEcAAAAABAAq//8AlQHKAAkAEQAbACMAABMyFhQGIiY1NDYXIhUUMzI1NAMyFhQGIiY1NDYXIhUUMzI1NGAWHx8sIB8XDQ0MDBYfHywgHxcNDQwByh4uHx8XFh8pDA0NDP7JHi4fHxcWHykMDQ0MAAAABP/9/7wAjwHPAAcAEAAoADAAABIyFhQGIiY0FyIGFBYyNjU0AzI+ATU0LgE1NDYyFh0BDgEjJjU0NjMyNyIGFBYzMjRDLR8fLR82BgcHCwdVER4PFhUfLR8DSTMSCQkBSQYHBwYMAc8eLh8gLAoHCggIBQz+Pw0NAgILGRMWHx4XAzNIAhIIDWEHCgcYAAAAAQAo//8BtQMNABwAAAEyFhUUBwEGFRQeAR8BARYVFAYjIicBJjU0NwE2AZ0JDgX+uRcJBwkIAT0GDwgHBf6zHSMBRwUDDQ8IBwX+yhcXCxQJCAf+0wUHCA8FAT0dKC4dATcFAAIALwC4AcABmAAJABMAABMhMhYGIyEiJjYXIR4BBiMhIiY2QAFwCwkJC/6QCwoKCwFwCwkJC/6QCwoKAZgVFBQVtgEUFRUUAAEALv//AboDDQAcAAATMhcBFhUUBwEGIyImNTQ3ATI+AjU0JwEmNTQ2RQUFAUgiIf63BQYIDgUBPQEQBwgW/rkFDgMNBf7JHC8pIf7IBQ8IBwUBLQ4JFQsYFgE2BQcIDwAAAAADACj/5AG/AxgAKAAyADoAABMUFjEUBiMiJyY1NDYyFhUUBgcGBwYXFRQiPQE0PgM3PgE1NCYiBhIyFhUUBiMiJjQXIhUUMzI1NFEODwgLBRB3qnZGNhYKGgEpERUcDAQsN16IX40uHh8WFx82DQ0MAk0XLwgNCyYqVXZ2VT9mFwsKGiKTEhKSGSoZFQUCE1AzQ19f/b8fFhcfICwKDA0NDAAAAAIAKAAAAm8DFgBOAFgAACUUDgMjIiYQNjMyHgEXFBYdARQGIyInDgEjIiY0NjMyFzc+AjMyFhUUDgEHFAYVFBYVFAYVFBYyNjU0LgEjIgYQFjMyPgI3NjMyFic0JiMiBhQWMjYCQBUrN1IreaureVCDSAcBOSkrHBJDKTpSUjpDKgECAwgFCQ8EBgIBAgEiLiI4dkxok5NoK00zGwkEDwgKlT8kKTk6UDq9CSo3MSLoAUboap9ZBA4DCik5HiozYoxhPgQEBAUMBwIKHRcEDAMEDAQCBAIXISIXTZpx0P7c0CY7KBMKCtE/PERiRUEAAAIANAAAAnsDFwAVABsAAAEyFhURFCsBIjURIREUKwEiJjURPgEWIgYHISYBWHmqChUK/gsKFAQHBqfcypIDAfQDAxfno/59CgoBZP6cCgYEAYOl5SnIj48AAAAAAwA0AAECfQMZAB8ALwBAAAATNjMwFzM3HgEVFA4BDwEGFhcWFxYVFAYjIS4BJxE0NhciBh0BFBYzITI/ATY0JiMDIgYdAR4BMzIzITI2NTQmJ68JDDxsAVN1Ex8GHQMDBEUjMXdV/v4ySAFIOCQzDAkBFRMRMTBfRPcJDAEwIAEBAQhBW1U+AxgBAQEBeFMYMTUPHQMNARcqOUtVdwJGMgIeNEknMiTtBw4RMjCGX/5/DwjbIjBhQj9cBgABACgAAQIhAxgAHwAAASYjIgYQFjMyNzYzMhYVFAcGIyImNTQ2MzIXFhQGIyIB/UtmaJOUZ2hJBwoICwdUenmrq3l6VAYMBwoCh2jQ/tzRaAoLCQkKdOiko+h0CBIMAAACADQAAAIYAxYADwAdAAATMx4BFRQGByMuAScTIzQ2FyIGFREeARczMjYQJiOsU3WkqXhKMkYBAQFFOyQzATAhRWiTk2gDFgbmn6PmAghCMAIdM0glMiT94yEuAtABJNAAAAAAAQA0AAIBywMZACoAABMhMh0BFCMhIgYdARQWOwEyHQEUKwEGHQEeATMhMhYdARQGIyEiJicRNDazAQ0KCv7zJDIJBdgKCtgOAjIjAQwEBwcE/vM0SQJLAxkKFQozJPMECQoVCgQL5CMvBgQVBAZHMwIdNUsAAAAAAQA0AAABywMXAC8AABMhMhYdARQGIyEiJxUiBh0BFBY7ATIWHQEUBisBBhURFCsBIiY1ETQxNyM0NjMVNrgBCAQHBwT++AMBJDMKBdcEBwcE1w8KFAQHAQFLNQEDFwYEFQQGAQEyJPMECgYEFAQHBAv+qwoGBAKLAQI0SwEBAAABACgAAAJeAxcAMQAAJTI2NzU2NTY1NCYnISImPQE0MyEeARUUDwIOASMiJjU0NjMyFxYUBiMiJyYjIgYQFgFMSH0hAQIvIv79BAYKAQUyRgIDASWTVHmrq3lzWwcNCAkGS2Zok5Qpb2oCAgEMBSMyAQcEFAoCSjMRCAwBdX3opKPodAkQCwdo0P7c0QAAAAABADQAAAJ1AxgALAAAEzMyFhURFBYzITI2NRE0NjsBMhYVERQrASImNRE0JiMhIgYVERQrASI1ETQ2PhUEBgkHAdAFCgcEFAMHChQEBwkG/jAGCgoVCgYDGAgD/psGCwoHAWUEBwgD/P0KBgQBVQYJCgX+qwoKAwMEBwAAAQAuAAABFQMXAB8AABMzMhYdARQGKwERMzIWHQEUBisBIj0BNDsBESMiPQE0ONIEBwcEVFQEBwcE0goKVVUKAxcGBBUEBv07BgQVBAYKFQoCxQoVCgAAAAEAKAABAh8DGAAnAAATITIWHQEUBisBEQ4BIyImJzU0NjsBMhYdAR4BMzI2NREjIiY9ATQ2+QEbBAcHBFQCd1NUdwEHBBQEBgFfQ0RfngQHBwMYBgQVBAb92FJ0dlQGBAcHBAZDXmBDAiIGBBUEBgABADT//wIzAxkAMQAAATIWFRQPAwYUHwEBFhUUBiMiLwImKwEiBhURFCsBIjURNDY7ATIXERQ7ATI3ATYCGgkPA4jPCwgIDAFWAxEIBQOH3QgJMAYJChUKBgQVBQUPGwwIAXYDAxkQCAUDh9AKCQUIC/6pAwQJEAOI3AgKBf6qCgoDAwQHC/6cEQgBdgMAAAABADQAAAHKAxgAHgAAEzMyFh8BER4BFyEyFh0BFA4BBwYjIiYrASImJxE0Nj8UAgUCAQIxIQEOBAcEBgEBHhJdEmsySwMHAxgFAwL9bCEuAQYEFQIEAwEBAUUyApYEBgABADQAAAJ5AxgAMwAAATI+ATU3PgEzMhYVERQrASI1ETQjIgYPAQ4BIiYvASYnJhURFCsBIjURNDsBMhYfAh4BAVcYKBBPCEQtBAYKFQoDCR8ITgo+YEMJSw0gBgoVCgkBLEQJTAQIKAGIGhkG/SI4CAP8/QoKAtkDHRb/HTg5JvUjEAMG/ScKCgMDCzYk9gsTIgAAAQA0AAEBzQMZACgAABMyFhcTFhcWMjY1ETQ2OwEyFhURFAYjIiYnAy4BJyYVERQrASI1ETQ2PjFCB7kOGQMFBAYEFQQGBgQqRAy5CBMSBgoVCgYDGT0d/ackDQIDAwLVBAcHBPz9AwczJwJZFhQJAwb9JwoKAwMDCAAAAAIAKAABAm8DGAAIABEAABIyFhAGIiY1NCUiBhAWMjYQJtPyqqryqwEkaJOUzpOTAxjn/rjo6KSjv9D+3NHRASTQAAAAAgA0AAABywMXABUAJQAAEzMeAR0BDgErASIGFREUKwEiNRE0NhciBh0BFBY7ATI2PQE0JiOwVFN0AXdUlgUHChUKSDYjMgcFlkNgYEMDFwJ2UxJUeAgE/qgKCgKONEknMyP0BQhgQxJDXwAAAgAo//8CcAMWACAAQAAABSIuAyMiDgIjIiY1NDYyFhUUDgMVFBYzMhYUBicyFhUXFRQxMj4BNTQmIyIGEBYzMjc2PQE0JiMiJjQ2AlwXJhcRCAEDHSQ+IHmrq/KqFB0dFC0iCQsL3jZEAQUfIJNnaJOUZ05AAzIkCgsLAQ0SEw0UFxTopKPo56Q3ZUIxGgINKwwRDPxIFQEBATp3P5LQ0P7c0UADCAkkMgwRDAAAAAACADQAAQHMAxkAMQBAAAATNDYzOgE7AR4BHQEOASsBFhcBFhUUBiMiJwEuBCc0JjUnNDU0IyIGFREUKwEiNRMiBh0BFDsBMjY9ATQmIzRPMQEPBjpTcwF2VGoDFgEaAxAJBAP+5gkNBgMDAQEBAwUHChUKfiMyDJZDX19DApk4RwJ1UxNUdx8W/uYDBAkQAwEaChEQCQ8DAQQBAQEBAwkE/qgKCgLkMyP0DF9DEkNfAAEAKAAAAgIDGQA2AAAlMjY1NCclLgE1NDY7AR4BFRQGIiY1NCYrAQciBhUUFwUXHgIVFAYjNSMiJjU0NjMyFhUUFjMBTztSPf7eJi9oSldRbwwRDF9DKiI6UjwBEhYNHyRqSlRVdwsICQ1fRCpQOUUsqRZTMEppBXVSCQoKCURfAVA5RiufDggdRyhKagF3VQoKCwlDYAAAAQAuAAIBxQMbAB0AABMhMhYdARQGKwEiBhURFAYrASImNRE0JisBIj0BNDgBggQHBwSWCQ0GBBUEBg0JlwoDGwYEFQQGDwj9MgQHBwQCzggPChUKAAAAAAEANAAAAnsDFwAbAAABETQ2OwEyFREOASMiJjURNDY7ATIVERceATI2AlIHBBQKBqZ3easHBBQKAQOSypIBfwGOBAYK/n2l5eejAYMEBgr+nCqPx8cAAAABAC7//QJ8AxsAIAAAATIWFRQVAw4BIyImJwMmNTQ2MzIXEx4BMzI+AzcTNgJlBw/MCDUiITQIxAENCQ4EwQQiEw0WCwgCAcsEAxoLCQMC/UchKiUdAsMDAggLDf1JFhoLDRIHAgK0DQAAAAABADQAAAJ8AxsANwAAJQ4CKwEuATURNDY7ATIWFREeATsBPgE1ETQ7ATIVERQWFzMyNjURNDY7ATIWFREOAgcjIi4BAVgPLhwJJkFbBgQVBAYCSDIYIjAKFQowIhkzSQYEFQQGATlEHyQKHC46FxwHBF9CAmsEBwcE/ZEyRgIyIgEQCgr+8CMyAUkzAmsEBwcE/ZY2TyABBh0AAAABAC7//gHXAxgAMwAAEzIXExYyNxM2MzIWFRQHAwcGFRQXExYVFAYjIicDJyYiBwMGIyImNTQ3EzY1NCcDJjU0NkYMBKICEQKhBQoJDwKhDQYHrgIPCAsFlgwCEgKiBQoJDwKuBwauAg4DFwn+wAQEAUAJDAkDBP7BGAoNDwz+qQQECAwJASkWBQX+wQkMCAQEAVcMDw0KAVcEBAgMAAAAAQAy//8CegMYADEAAAE0NTA1NDsBMhYdARQGBw4BFREWBisBIiY1ETQmJy4BPQI0NjsBMhYdARceAjI+AQJQChUEBpBqCQwBBwQVAwcNCGuPBwMVBAYBAkRxhXJDAr8MHiMLBwRBlN0WAg4H/t0EBwcEASMHDgIV3ZQBQQQHBwQjKl2eW1ueAAEALP/+Ad8DFAA2AAATIR4BFRQHFQcDMzIVFCsBAw8BBhUUMyEyFh0BFAYjIS4BNTQ3EyMiNDsBEzc1NzY1NCMhIjU0RQFmFh4HAqMvEhJHwwEBAQ0BbAQHBwT+kRYdCbY/EhJXrgMBAQz+mw0DFAIeFRALAQL+7BQV/rYBAQEECwcEFQQGAh4VEQ0BMykBJwQBAQEEDBUUAAAAAAEANP+DANwDlwAZAAATMhUUKwEiBgcRFBY7ATIVFCsBLgE1ETQ2N8oSEhciMwEyJBcSEho0SEkzA5cUFTEg/OUkMhQVAkk0AxsyRgIAAAAAAQAuAA4CBgMNAA8AABMmNTQ2MzIXARYVFAYjIicxAw8JCgUBrwIPCQkFAu8EBQgMCP0oBAUIDAgAAAAAAf+6/4MAYQOXABkAAAMeARURFAYHIyI1NDsBMjY1ES4BKwEiNTQzGzNJSDQaEREXJDIBMyIXEREDlwJGMvzlNEkCFRQyJAMbIDEVFAAAAAABAC0BeQHEAxIAIQAAEyImMScmNTQ3EzYzMhcTFhUUDwEGJicDLgE1LgEHAwYjIkcBARMFAbgGDQ4FtwEFEwMKAZ0BAQMDBKIDBwEBegEJAgcDAgF3CQn+iQIDBwIJAQMDAUABAwEIAQX+twYAAAAAAQAp/+YBsAACAAoAACQUKwIiJjY7AgGwDLi4CAYGCLi4AhwODgAAAAEALgIZAFcC8wAIAAATMh0BFCI9ATRDFCkC8xK2EhK2EgAAAAIAKAAAAcABmAAbACMAABMyFhc1NDY7ATIWFREUBisBIiY9AQ4BIyImNDYWIgYUFjI2NPQxVhwGBBUEBgYEFQQGHFYxVXd3mYhfX4hfAZgsJUYEBwcE/n4EBwcERiUsd6p3KV+IX1+IAAAAAAIANAABAcwDFgAfACsAABMzMhYVETYzMhYUBiMiJxUUBisBIiY9ATQmNDY1ETQ2EyIGBxUeATMyNjQmPxUEBjxmVXd3VWU9BgQVBAYBAQbFQF0FBV1ARF9fAxYHBP49UHaqd1FFBAcHBLUBCAQHAQI0BAf+WVdAFkBYYIZfAAAAAQAoAAABewGYACEAABMyFhUUDwEGIyIuASMiBhQWMzI2NzYfARYVFA4BIyImNDb0LVkDDgMDBh0wHERfX0QdPAwICA4EJUEhVXd3AZgpDgUDDQISE1+IXxgMBgYNBAMIGhd3qncAAAACACgAAQG/AxYAGwAoAAABMhYVERQGKwEiJj0BDgEjIiY0NjMyFhcRNDYzAyIGFRQWMzI2NzUuAQG1BAYGBBUEBhxWMVV2dlUxVhwGBK1DX19DQF4FBV4DFgcE/QIEBwcERSUsd6p2KyUBwwQH/llfQ0RfWEAWQFcAAAAAAQAoAAIBvwGZACsAABMyFh0BFCMhIiY9ATQ2OwEuASMiBhQWOwE2NzYzMh8BFhUUBw4BByMiJjQ29FR3Cf7sBAcHBPIJWzxEX19EGEAtDwgCAhIFERJKMBpVd3cBmXdUCQgGBBUEBjtPYIZfBi0UAQkDBQcVFCsDdqp3AAEALgABAiwDGQAvAAABMhYXFRQGKwEiJj0BLgEjIgYdATMyFh0BFAYrAREUBisBIiY1ESMiPQE0OwE1PgEBYVR2AQYEFQQGAV5DRF/8BAcHBPwGBBUEBl0KCl0CdwMZdVQGBAcHBAZDXV9DtgYEFQQG/p0EBwcEAWMKFQq8UnMAAgAo/oIBwAGZACgANAAAEzIXNTQ2OwEyFhURBw4BIyImJzU0NjsBMhYdAR4BMzI2NREGIyImNDYXIgYUFjMyNjc1LgH0ZT0HBBQEBwECdlNUdwEGBBUEBgFfQ0RePWVVd3dVRF9fREBdBQVdAZlRRQQHBwT9wAZSc3VUBgQHBwQGQ11fQwEFUXeqdylghmBYQBZAWAAAAAABADT//wHMAxMAKgAAEzMyFhURNjMyFhcVFAYrASImPQEuASMiBgcVFAYrASImPQE0JjQ2NRE0Nj8VBAY9ZVR3AQYEFQQGAV9DQF0FBgQVBAYBAQYDEwcE/j1Rd1TBBAcHBMFDX1hAywQHBwS2AQcECAECMwQHAAACAC4AAQEWAiQADwA7AAATMzIWBxUWBicjIiY9ATQ2BzMyFhURFBY7ATIWHQEUBisCIjEjIiY9ATQ2OwEyNicRNCYrASImPQE0NooeBQoBAQoFHgUJCTBXBAcKBUUEBwgDXxQBXgQHBwREBwoBCAYqAwgHAiQKBR0FCwEKBR0FCosHBP6rBQkHBBQEBwcEFAQHCAYBKQUJBgQVAwcAAAAAAv8f/oIAtwIjAA8ANgAAEzMyFgcVFgYrASImPQE0NgMiJjU0NjsBMhYdAR4BMzI2NRE0JisBIiY9ATQ2OwEyFxYVEQ4Cix0FCgEBCgUdBgkJmlF7BwMVBAYBX0NDXwgGKgMIBwRXCAECAj9ZAiMLBB0FCwsFHQUK/F9zXQQHBwQGQ11fQwITBggHAxUEBggIu/6BP2AtAAABADT//gHKAxgAMwAAEzMyFhURFBUUMzI/ATYyHwEWDwEGFRQXBRYVFA8BBisBIi8BJSYjIhcVFAYrASImNRE0Nj4VBAYFAhXkAwoCDggJ5xIMAToEAgcEBA8BBAL+0QsFCAEGBBUEBgYDGAcE/lYDAhETzQIDDwgH0BAKCQn2AwYEAggGAgLtChLcBAcHBAMBBAcAAQAuAAABFQMZAB4AACEjIiY1ES4BKwEiJj0BNDsBMhYVER4BOwEyFh0BFAYBCgE0SQIvIQIDBwoBNEgCMCECAwgHSzUCHiIwBgQVCko1/eEhMQYEFQQGAAEAPP/+AoEBlgA7AAATMzIWFQc2MzIXFjMyPgI3MzIWFxUUKwEiJj0BNCYjIgYVERQGKwEiJj0BNCYjIgYVERQrASImNRE0NkcVBAYBLDllKQICBBIXMB4GTFcBChUEBkk4KDwGBBQEB0g4KTwJFQQHBwGWBwQgKTwDExcUAVBQ6wsHBOs+OTYn/vsEBwcE6z45Nif++wsHBAGCBAcAAAABADQAAAHLAZcAHwAAEzMyHQE+ATMyFhcVFCsBIj0BLgEjIgYHFRQrASI1ETQ+FQocVjFUdgEKFQoBXkNAXgUKFQoBlwpHJSt2VMIKCsJDXldAzAoKAYMKAAAAAAIAKAABAb8BmAAHABEAABIyFhQGIiY0JCIGFBYzMjY1NJ+qdnaqdwEQiF9fRENfAZh2qnd3qk1fhmBfREMAAAACADT+gwHLAZgAHwArAAATIiY1ETQmNDY9ATQ2OwEyFh0BNjMyFhQGIyInERQGIxMyNjQmIyIGBxUeAT8EBgEBBgQVBAY9ZVV2dlVmPAYErEReX0NAXQUFXf6DBwQCNAEHBAgBtQQHBwRFUXeqdlD+PQQHAadeiF9YQBZAVwAAAAIAKP6BAncBmAAkADAAABMyFzU0OwEyHQEUFhQGFREUFjMyMzIWFRQGIyImJxEGIyImNDYXIgYUFjMyNjc1LgH0ZjwKFQoBAV5DAQEJCwoKVHcBPGZVd3dVRF9fREBdBQVdAZhQRQoKtgEHBAgB/otDYA0JCAt2VAEGUHeqdilfhmBXQBdAVwABADQAAgGsAZoAKQAAATIeAxUUBiMiJy4BIyIGBxUUBisBIiY9ATQmNDY9ATQ2OwEyFh0BNgEAHzonHg0QCQgEFUcqQF0FBgQVBAYBAQYEFQQGPAGYEhkcFQUIDQYgJ1dAywQHBwS1AQgEBwG4BAcHBEdQAAEALQAAAXEBmAAvAAABNCYjIgYVFBYXFh8BHgEVFAYiJjU0MzIWFRQWMzI2NTQnJi8BJjU0NjIWFRQjIiYBSUkxMkc5TRUMETAzX4ZfFAgNRzIxSDQWSRR0X4ZfEwgNASsdJygcHxwSBQMEDjcgLUBALQ4HBxwoJx0kEwgRBSFILUBALQ4HAAABAC4AAgHGAlYALQAAEzMyFh0BMzIWHQEUBisBFRQWFRQWMzIzMhYVFAYjIiYnNSMiJj0BNDY7ATU0Nu8VBAatBAcHBK0BXkIBAQkLCgpUdwGsBAcHBKwGAlYHBIcGBBUEBr0CCwNDYA0JCAt1VNAGBBUEBocEBwABADQAAAHLAZgAJQAAISMiJj0BDgEjIiYnNTQ2OwEyFh0BHgEzMjY3NTQ2OwEyFhURFAYBwRUEBhxWMVR2AQYEFQQGAV5DQF4FBgQVBAYGBwRHJSt2VMEEBwcEwUNeV0DLBAcHBP5+BAcAAAABAC3//gH4AZsAGwAAEyY1NDYzMhcTMB4BMzI3EzYzMhYVFAcDBiMiJy8CDwkKBbMDBAQGBbMFCgkPArENJSMOAX4EBAgNCv6eBQMIAWIJDAgEBP6hISEAAQA0//8CfAGZADUAACUOASsBLgE9ATQ2OwEyFh0BHgE7AT4BPQE0OwEyHQEUFhczMjY1Jz0BNDY7ATIWHQEUBgcjJgFYFzkSJkFbBgQUBAcCRzIZIjAKFQowIhkzSQEHBBQEB2U4Jj45IRkEX0LnBAcHBOsyRgIyIkcKCkciMgJJMwEB6QQGBgTsR1sCAwAAAQAuAAABxQGYAFkAAAEzMhYxHwEWFTAWFRQGFCIxDwEGHwEWHQEUFjEUByMPATAGKwEwJiImIycmDwEGIwYrASIvAiY9AjQ/ATYvASY9ATQyNT8BMjYxMzIWMTIfARY/ATQ7ATYBqQUBAgEPAgEBAQGmBQWmAgECAQ8BAgEDAwEBAacEB6UBAQQCAwIBAQ8CAqYFBaYCAQEQAQIDAQMCAqUFBqYBAgEBmAEBDwIBBAEBAgICpwUFpwIBBAECAgIQAQEBAagEBKcBAgECDwIBAgYBAqcFBacCAQgBAQIQAQECpgQEpgIBAAEANP6CAcwBmwA2AAATMzIWHQEUFhUUFjMyNjc1NDY7ATIWFREHDgEjIiYnNTQ2OwEyFh0BHgEzMjY1EQYjIiY9ATQ2PhUEBgFfQ0BdBQcEFAQHAQJ2U1R3AQYEFQQGAV9DRF49ZVV3BgGbBwS7AQYBRF9YQMsEBwcE/cAGUnN1VAYEBwcEBkNdX0MBBVF3VcMEBwABAC4AAgHFAZkAOwAAJSEiPQE0PwE2JisBIiY9ATQ2OwEyPwI2JiMhIj0BNDMhMh0BFA8BBhY7ATIdARQrASIPAQYzITIdARQBu/59CgSVAQIBLAQHBwRWBgl0CQICBP7BCgoBgwoDjwECASIKCkwGBooGBwFFCgIKFQQEkAEDBgQVBAYJcAgCBwoVCgoVBAOKAQIKFQoGhgYKFQoAAAAAAQAt/4EBYQOVAC8AADM1NCYjIiY0NjMyNjcRNDY3MzIVFCsBIgYHERQGIyIUMzIWFxEUFjsBMhUUKwEuAbkyJBcfHxcjMQJJMxoSEhciMwFLNA0NMkwBMiQXEhIaNEj8JDMfLB8xIwEKMkYCFBUyIP73MksYSC/++yQyFRQCSQABADz/6gBlAywACAAAEzIVERQiNRE0UBUpAywS/OISEgMeEgAB/7j/gQDsA5cANgAAAzQ2MzIWMx4BFREeATsBMhYUBisBIgYdARQGByMiNTQ7ATI2NRE+ATsBMjQrASImNREuASsBIkgTBgQNAjNJAjEjARceHhcBJDJINBoSEhckMgFMMgEMDAE0SwEzIhcSA4EGEAICRjL+9iMxHywfMyT8NEkCFBUyJAEFL0gYSzIBCSAyAAAAAQAyAbUBiwJLACsAABMiNTQ2MzIXHgIXMzI2NTQmNTQ2MzIXFhUUBiMiJy4CJyMiBhUUFhUUBkcVPCgqHwgRFhUFGCEEEAkMAwY9KC0cBxEXFQUXIgQPAb0sKjgjCSkWAiIXBg8BCAoJEBEpNyIJKBcCIhcIDgEIDAAAAAMAMAAAAJsDNQAHABEAGQAANxQiNRE0MhU2IiY0NjMyFhUUJzI1NCMiFRR6KSkCLCAfFxYfNQwMDRISEgJbEhJdICwfHxYXCg0MDA0AAAAAAgAwAAMBggIZACoAMAAAEzIdAR4BFRQPAQYvASYnET4CMzIfARYVFAYHFRQjIj0BLgE9ATQ2NzU0FQ4BFBYX+RQnTgMOCQoMHCkdKRMEAwQOA0wpFBVMaGhMPE9PPAIZEikEJg8DAw0ICgkSBf69BBIPAw0DAw8lBDMSEjMJc04BTnMJKhJmCFt6XAgAAAAAAgBC/+gAawMqAAcADwAAEzQyFREUIjURNDIVERQiNUIpKSkpAVQSEv6mEhIDHhIS/sESEgAAAAACADz+gAHUAxcAOQBGAAATPgEzMhYXFRQGKwEiJj0BLgEjIgYVETYzMhYVFAYVEQ4BIyImJzU0NjsBMhYdAR4BMjY1EQYjIiY1ITQmIgYHFRQWMzI2NzwDe05UdwEGBBUEBgFfQ0RfPWZXdQEEe0xUdwEGBBUEBgFfhl89ZVh0AW5fhl8BYENFXAECTF5tdVQGBAcHBAZDXV9D/vtQe1ACCAH+i2BsdlQGBAcHBAZDXl9EAQVRfFBEXl9CAURfYUEAAAAAAwAwAMcCfQMUAAcADwA0AAASMhYUBiImNCQiBhQWMjY0JzIWFRQPAQYjIi4BIyIGFRQWMzI+ATMyHwEWFRQGIyImPQE0Nt30rKz0rQGQ0pWV0pT+LFsDDwMDBRswH0RfX0QfMBsFAwMPAlcvVXd3AxSs9K2t9IOU0pWV0mIoEQMDDQISE19DRF8TEgINAgQQKXZVAVV2AAAEADwAxwKJAxQABwAPACwAOQAAEjIWFAYiJjQkIgYUFjI2NCUzMhYUBiMiJyYVFxYVFAYjIi8BFRQrASI1ETQ2FyMiBh0BHgEzMjY0Jun0rKz0rQGQ0pWV0pT+xUw1Sko1HxwFsAUPCAcFqAoVCh9gTAQGAjIiJDIyAxSs9K2t9IOU0pWV0n1KakoOAgO0BwUIDgWtowoKAYYUHikHBFAiLzJIMgAAAAACACoCFgEoAxUABwAPAAASMhYUBiImNDYiBhQWMjY0dWhLSmpKo0gyMkgyAxVLakpKaiIzSDIySAAAAAABADYAVQHKAesALwAAEzQ2MhYdARQWOwEyFhQGKwEiBh0BMzIWFAYjISImNDY7ATU0JisBIiY0NjsBMjY16w0RDAYEmQgKCgiZBAajCAkJCP6QCQkJCaMGBJkICgoImQQGAdkICgoImQQHDBANBgSDDBEMDBEMgwQGDRAMBwQAAAMAMP//AccDMwAmADAAOAAABCImNTQ+ATc+ASc1NDIdARQHDgEVFBYzMjY1NCcmNTQ2MzIXFhUUAyImNDYyFhUUBicyNTQjIhUUAVGqdxI+MRcfASlTI0BfRENfDAEPCQsED8wXHx8uHh8WDAwNAXdVH0BLFAorGpMSEpNUIw9MO0NgX0QjHAMDCA4LJCxVAlIgLB8fFhcfKQ0MDA0AAAABADb//wHMAxcAIwAANxwBFRQGKwEiJj0BNDcBNjU0IyEiPQE0MyEeARUUBwEOA18EBxQEBhMBWQEM/qkKCgFYFh4I/q0BCgMEUwshBRUOBwRJJB8CRgEEDQoVCgEfFhEN/cYBEgcSAAIAPP//AdQDFwAQACIAAAUiJjURNDYyFh0BBxEWDgIDIgYVER4BMzI2NRE3NCY1NCYBCFZ2d6p3AQEUK1Y3RF8CX0JDXwEBXwF4VAGAVXd3VQQB/n4TPEUxAu9gQ/56QVxfRAF7AQECAURfAAEANgACAc0BmQAhAAAlISI9ATQ3ATYmIyEiPQE0MyEyFh0BFAcBBjMhMhYdARQGAcL+fgoEAUkCAgT+wQoKAYIEBwT+tAYHAUQEBwcCChUEBAE+AgcKFQoGBBUDBP6+BgYEFQQGAAAAAQA0AAAB6AMXACYAADMiJjU0NwE2NTQjISImPQE0NjMhHgEVFAcBBhUUFjMhMhYdARQGI2oQJQkBfwIM/pMEBwcEAW4WHgr+gwMHBgFsBAcHBBsbDw8ChwQDDAYEFQQGAR4WEBD9ewYBBQcGBBUEBwAAAAANADz+gAMEAxQAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwAAEyERIRMRMxEzETMRMxEzEQEVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNQURMxEzETMRMxEzETwCyP04CaYIqgXg/cOmCKoF4P3DpgiqBeD9w6YIqgXgAxT7bASO/owBdP6MAXT+jAF0/oPGxsbGxsbNxsbGxsbGy/6OAXL+jgFy/o4BcgACADABewPSA6QATQBZAAABMh4DMzI+AjczMhYXFRQrASImPQE0JiMiBhURFAYrASImPQE0JiMiBhURFAYrASImJzUjIiY9ATQ2OwE1NDsBMh0BMzIWHQE+ATMFFRQWFRQWFxE0JiMCGx8zHhULAgQSFzAeBktYAQoVBAZIOSg8BgQVBAZIOSg8BgQXVHcBjgQHBwSOChUKoA0XGCoi/tgBWkAMBwMSDRMTDRMYFAFRUOsLBwTrPjk2J/77BAcHBOs+OTYn/vsEB3VUpgYEFQQGhwoKhxQQBxYUKJMCCwNBXwMBMQcOAAAAAwA2AAABHgJTAAcADQA6AAASMhYUBiImNBY0IyIUMwczMhYVERQWOwEyFh0BFAYnIwciNDEjBiY9ATQ2OwEyNicRNCYrASImPQE0Nn8sICAsIEIMDAw4VwQHCgVFBAcIA18UAV4EBwcERAcKAQgGKgMIBwJTICwfHywiGBh5BwT+qwUJBwMVBAcBAQEBBwQVAwcIBgEpBQkGBBUEBgAAAAP/C/6BAK4CUgAHAA8APwAAEjIWFAYiJjQWIgYUFjI2NAc7AjIVMB0DBw4BIyImJzU0NjsBMhYdAR4BMzI2PQQ0JisCIiY9ATQ2YiwgICwfOgoHBwoHQ0MRAwsBAndSVHcBBgQVBAYBX0NDXwgGDhwDCAcCUiAsHx8sCgcKBwcKiQvByllcBlJ0dlQGBAcHBAZDXV9DXFnKlQUIBwQUBAcAAAAAAgA8AAECYwMZADUAVQAAEyEyFh0BFAYnISIGFRQdARQWOwEyFh0BFAYrAQ4BHQEeATsCMhYdARQGIyEiJicRNDU0NjMXMzIWHQEzMhYdARQGKwEVFBUUFjcyFgYjIiYnPQE0NsABCAMHBwP+8yMzCQXYAwcHA9gFCQIyI22fAwgIA/7zM0oCSzTSFAQHrAQHBwSsYEMLDAoNVHgBBwMZBwMVBAcBMyQBAfEECQYEFQQGAggF5CMvBwMVBAZHMwIbAQE1S8MIA7IGBBUEBpIHCURgARUUdlOl2wQHAAEALv//AngBmQBJAAATMh8FPwE2Mh8CPwQ2MzIVFDEGFQ8JBiMiLwUmIhUPBAYjIi8KNCc0MTRCEwQECBEiKj4/BR0FPz4pIxEIBAQTFAECBQgRIh4OCAMCAhARBlIXCwYDAQQDBgsXUgYSDwICBAcOHiIRCAUCAQGZCw4aNWuBe3wJCXx7gWs1Gg4LDAEDAQcNGzVqXC4XDAYHDaEsFwsFAgIFCxcsoQ0HBgwXLlxqNRsNBwEDAQwAAAAAAQA2//0CfwMaAC4AABMmNjMyFxMWMzI3Ez4BMzIWFxMWMzI3EzYzMhYHAw4BIyImJwMmIgcDDgEjIiYnNgEOCRECfQEKCwIxBB0UFR0EMQELCgJ8AxAKDgJ8Ax4UFR4CMQMUAjEDHhUUHgMDBAkMD/0mCQsBHhQZGxX+5QsJAtoPDAn9JxMbHBQBGg0N/uYUHBsTAAEAPAABAoQDGgBaAAATMzIWHQEcARUWFRYXFhceAjI+ATc2NzY3NjU8ATc1NDY7ATIWFRkBFAYrASImPQQ0JhUGBwYHBgcOASImJyYnJi8BLgEVBh0EFAYrASImNRkBNDZGFQQGAQEDBQoTRVxmW0YTCQUDAQEBBgQVAwcHAxUEBgUBBAUGCw0oa3dqKQwLBgUFAQMBBgQVAwcHAxkHAxICBgEcCiMoSUSG0XV10YZESSgjChwCDQQIAwcHA/5+/n8EBwcEvWYsFgIBAgYPFBMnI216em0jJhMVFAMBAgECFi1kvQQHBwQBgQGCAwcAAAEAAAAAAAEAAAKeAAIAAAAYAWAB/AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fv+1/6v/q/+r/6v/sP+r/5wAAAAAAAD/q/+//7//tf+w/6v/v/+w/5wAAAAAAAD/q//Y/87/zv/O/9j/yf/O/5wAAAAAAAD/zgAAAAD/zgAA/5L/tf9RAAD/0/+DAAD/5wAAAAD/5wAA/87/0/+1AAD/5//JAAAAAAAAAAAAAAAAAAAAAAAA/78AAAAAAAAAAP/nAAAAAP/d/9P/0/+//84AAP/OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAA/87/0/+1AAAAAP+/AAD/3QAAAAD/3QAA/8T/3f+1AAD/5//OAAD/zv/nAAAAAAAAAAAAAAAA/5wAAAAAAAD/5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yf+DABEATAFIABAAoAEAABAAoAAQAKAAoABYAKAAWAAQABAAEAAQABAAEAAQABAAEACgAKAAEAAoAKAAEAAQABAAEABwABAAEACgAFgAEAAQABAAKACgAEAAEAAQAEAAEAAQABAAEAAQABAAEADQALgA0AAQALgAKADQAOgBAAAQABAAiADoAOgAuAC4ANAA0AC4ATAA0AEYANAAEADQAA8ATwASAAAAEgAAABQAAAAAABQAFgAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAgACAA4AAgAAAAQABAAAAAAABgAGAAIABgAAAAYAAgAQAAgADAAIAAoAAAAKAAAAAAAOAK4AAQAAAAAAAACwAWIAAQAAAAAAAQANAi8AAQAAAAAAAgAGAksAAQAAAAAAAwAmAqAAAQAAAAAABAAOAuUAAQAAAAAABQAQAxYAAQAAAAAABgANA0MAAwABBAkAAAFgAAAAAwABBAkAAQAaAhMAAwABBAkAAgAMAj0AAwABBAkAAwBMAlIAAwABBAkABAAcAscAAwABBAkABQAgAvQAAwABBAkABgAaAycAQwByAGUAYQB0AGUAZAAgAGIAeQAgAE4AYQB0AGgAYQBuACAARQBhAGQAeQAsACAAdQBzAGkAbgBnACAASQBuAGsAcwBjAGEAcABlACAAKABoAHQAdABwADoALwAvAHcAdwB3AC4AaQBuAGsAcwBjAGEAcABlAC4AbwByAGcAKQAgAGEAbgBkACAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgACgAaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGYAbwByAGcAZQAuAHMAZgAuAG4AZQB0ACkALgAgACAAVABoAGkAcwAgAGYAbwBuAHQAIABoAGEAcwAgAGIAZQBlAG4AIAByAGUAbABlAGEAcwBlAGQAIABpAG4AdABvACAAdABoAGUAIABwAHUAYgBsAGkAYwAgAGQAbwBtAGEAaQBuACAAYgB5ACAAdABoAGUAIABhAHUAdABoAG8AcgAuAABDcmVhdGVkIGJ5IE5hdGhhbiBFYWR5LCB1c2luZyBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcpIGFuZCBGb250Rm9yZ2UgMi4wIChodHRwOi8vZm9udGZvcmdlLnNmLm5ldCkuICBUaGlzIGZvbnQgaGFzIGJlZW4gcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbiBieSB0aGUgYXV0aG9yLgAAQgBsAG8AbwBtAGkAbgBnAEcAcgBvAHYAZQAAQmxvb21pbmdHcm92ZQAATQBlAGQAaQB1AG0AAE1lZGl1bQAARgBvAG4AdABGAG8AcgBnAGUAIAA6ACAAQgBsAG8AbwBtAGkAbgBnACAARwByAG8AdgBlACAAOgAgADkALQAxADAALQAyADAAMAA5AABGb250Rm9yZ2UgOiBCbG9vbWluZyBHcm92ZSA6IDktMTAtMjAwOQAAQgBsAG8AbwBtAGkAbgBnACAARwByAG8AdgBlAABCbG9vbWluZyBHcm92ZQAAVgBlAHIAcwBpAG8AbgAgADAAMAA2AC4AMAAwADAAIAAAVmVyc2lvbiAwMDYuMDAwIAAAQgBsAG8AbwBtAGkAbgBnAEcAcgBvAHYAZQAAQmxvb21pbmdHcm92ZQAAAAIAAAAAAAD/nAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAQIAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAowCEAOgAhgCLAIoAgwCTAKIBAwEEAQUBBgEHAIwBCAEJAQoBCwEMAQ0HdW5pMDAwMA91bmNyb3NzZWRfc2V2ZW4OdW5jcm9zc2VkX3plcm8LdW5jcm9zc2VkX3oLdW5jcm9zc2VkX1oVZ2x5cGhfZGVzaWduX3RlbXBsYXRlD2lfYWx0ZXJuYXRlLjI2Mg9qX2FsdGVybmF0ZS4yNjMGRXQuMjY0D3dfYWx0ZXJuYXRlLjI2NQ9XX2FsdGVybmF0ZS4yNjYPTV9hbHRlcm5hdGUuMjY3AAAAAf//AAIAAAABAAAAAMbCNwkAAAAAxr0CEAAAAADG2KjA������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/bgrove.ttf������������������������������������������������������0000664�0000000�0000000�00000044470�14205426364�0021372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`FFTMTW��I���OS/2W9��h���Vcmap����cvt �!y�� ���gasp���I���glyf4-����:headX������6hheal��$���$hmtx ����kern  ��@��locaD+R��$���maxp����H��� namev(z��CX��post<"C��GX��������{_<� ���� ���� ��������������Z v����������������w����w�m� ������������@�.�������������1�����������������������PfEd�@� !"�Z���������l�!�<M������.�4�/)�(�+8�(��4��4��.�/��/��.3�.��4I�(�(�(�(�4�4>�.�(�+��*��(�/�.�(�(�4�4N�(@�4�4�4�(�4C�.M�(`�4�4�4�4�(�4�(�4*�(�.�4�.�4�.�2 �,��43�.��-�)��.�(�4�(�(�(S�.�(��4C�.��4C�.�<�4�(�4�(�4�-�.�4$�-�4�.��4�.�-��<�2��0�0��B�<�0�<O�*�6�0�6�<�6 �4.�<�0S�6� �<�.�6�<���������������|�������`���������~������!"����� ������!"�N����������������������������������������������������  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a����������������������������������hc�e���gfp������i��������������jb�����������������������������������������������������������������!y���*�\�\�\��*Pb@r<r f8~P* . ^ T > n  N J v &v0Nv J~:^$Rr0tZhBj0|.~Vn.N��!��*���.�/<�2<�2��/<�2<�23!'3#! f!X���<����!2#!"&546!"3!2654&)99){(::{""!!9))99)V)9*!!!V!��.�� ����#"54322#"&54"3254x*,6 [6. ��4�����2"=432"=4I))����/�n-�\�l��2;26=46;2+";2+""&=4&+""&=4&+"&6;26=4&+"&6;26=4";26=4&# j  L L L L   i  L L L L ; j , L L L  k  L L L L  k  L j j ����(@�?�G�N�R�Y��235432"&54&'"=#"=.54632'.546754"&#3>54'CBT  =0A"-`F)C)CU  >1I&/[C6 C`3E;=)C)6J<@nF 5T&S-FhnG 5Up+S0EeR&[M4G*#H:N6F+���+�p ����&�.��2"&4$2#"&547"2642"&46"264vhKKhKQ H22H2jJJjJH22H2 KhKKhK ( !2H22HQKhKKh"2H22H��( �)�5�B��4632654'&5432"/#"&4?'.7"7654&327\cHG`Gi 6H7.Dj^BZG 7INk4J_4jL^6pFciDR3J E3dA6/N CK{=Af 7M3$oK*;3N% /GcF���4�]���2"=4I)����4e���4>32#"'.54"18, HQ\= T^FR> +_v% 0r�����e���#"547>=4&'&5432"19, FSTE ,82!GS> *he) >S~F����.b�'�7�G�W�f��462;2+""&=4&+"&46;265'&54632#"'7632#"&547632#"&547>2#"/&5      | :  9  :  9 :      U: W:  :4 :: ��/�^�#��46;2+"&=4&+"&6;265    ���P����2>54.5462#"&4>"3264- K4 W  ;  4J  b  �����/;� ��!2#!"&6@p ;����.��P� ���72"&5463254#"d,  P.5 ����.� ���632#"&547 R  ( ����4���!�0��2"&'4&54654&54$"326542"&54?6wvv^^BD_8vUvQqrRvUM^DyA[_DC �����(��%��"&5463232+"&=46;\&J5 UT% <;&5J $/����(��6��23!2#!"&54>?654&#""&54w P2% 4K /_DC^  vUP!$2  K4 /DC_^D U��(�H��#"'&54632#"&547632326=4/&547>?6=4&#"Q wUQu"- <#uQUw _DC_?_CD_L &)UwpP1!,; 3PpwU)& C`_D?,+D__��(�!�0���232++"&5#"&54>?"#;&2.R R5J &2%  dK4 $2P ����4�5��32+";2"&54763232654&+.=46 35RUvvw  _DC_^DN1LI3`85vwwU)&  C`_DC_F-0I�����4��� �1��"3264&7"&54&"2?>32#"&54614632�B__CD__  __P0UwwUTxvUQ{n\BC___  C_^D (vwvT~Uvu��.�/��32++"&=476?#"54;654#!"=43!2/G PJ)A Z  )!II}  �����(!��%�-��"&546764'.5462264&"264&"hM&!RS  !*јkkjjkkj{XCf  cHX{{XGd  ,G(XRddcddc�����+� �7��#"/&5476&#"&547>32&#"3267261654&l*-%q Zs%Y1@)3'G$!*4&E$Z1@4ɢ f {R@4)-F$!*3'F" )3(G�����*�� ���#��2"&546"32542"&546"3254`,  ,  .) .) �������(�0��2"&4"26542>54.5462#&546327"324C--6 U-I3 I . ,   ?  3H a ����( ���2#"'&5476   =#G   =(.7��/�� ���!2#!"&6!#!"&6@p p ��. ���2#"&5472>54'&546EH"!= /)!-  6�����(�(�2�:��1#"'&5462"=4>7>54&"2#"&4"3254Q wvF6 ) ,7^_.6 M/ &*UvvU?f "*P3C__ , ����(��o�N�X��%#"&632#"'#"&46327>322654.#"32>7632'4&#"26@+7R+yyPH9)+C):RR:C* "."8vLhh+M3  ?$)9:P: *71"FjY )9*3ba>    !"Mq&;( ?"!&Xy  ʒ} d )ȏ�����4�}��/�@��63037#!.'46"3!2?64&#"323!2654&' xS15 *9KUwF24I'2$20_"0aB?\��(�!���&#"327632#"&54632#"KfhghI  TzyyzT  hh t褣t ���4������3#.'#46"326&#SuxJ2FE;$30!Ehh柣B03H%2$!.$�����4��*��!2#!";2+3!2#!"&'46 $2  2# 4IK  3$   #/G35K�����4���/��!2#!"'";2++"&5417#4636$3  K52$  4K���(��^�1��%267565654&'!"&=43!#"&54632#"'&#"LH}!/" 2F%Tyys[  Kfh)oj #2 J3 u}褣t  h�����4��u�,��323!26546;2+"&54&#!"+"546>    0   e U  ���.�����32+32+"=4;#"=48TT UU ;    ����(��'��!2+#"&'546;23265#"&=46TwSTw_CD_RtvTC^`C"��43�1��2#"/&+"+"546;2;276   V 0   v      v����4�����32!2#"&+"&'46?1!]k2Kl!.E2��4��y�3��2>57>32+"54#""&/&'&+"54;2W(OD-   N >`C K   ,D L("8 89&#'  6$ "���4��(��226546;2#"&'.'&+"546>1B*D   =$ 3'Y ' ����(�o����2"&54%"26&$hΓ褣$����4����%��3+"+"546";26=4&#TStwT  H6#2C``CvSTx 4I'3#`CC_���(p� �@��".#"#"&546232'212>54&#"3276=4&#"&46\&$> y-" 6D ghgN@2$   褣7eB1 +  H:w?@ $2  �����4��1�@��463:;+#"'.'4&5'454#"+"5";26=4O1:SsvTj    ~#2 C__C8GuSTw     3# _CC_��(���6��%2654'%.546;"&54&+"#5#"&546323O;R=&/hJWQo  _C*":R< $jJTUw  _D*P9E,S0JiuR D_P9F+G(JjwU C`���.����!2+"+"&54&+"=48  2  �����4��{���46;2#"&546;226R wy ʒ } *����.|� ��2#"&'&5463232>76e5"!4 "   G!*% I  �����4��|�7��%+.546;2;>54;2326546;2#".X. &A[H2"0  0"3I9D$ .:_Bk2F2" #2I3k6O ����.�3��227632#"''&"#"&547654'&546F       @    ) W  W ����2z�1��45054;2+"&54&'.=46;22>P j  kDqrC # A#ݔA#*][[��,�6��!32+3!2#!.547#"4;757654#!"54Ef/G l ?W    3)' �����4����2+";2+.5467"32$4HI31 $2I42F�����.� ���&54632#"'1   ( �����a���#"54;265.+"5433IH4$23"F24I2$ 1�����-y�!��"&1'&547632&'.5.#"G  z w  @�����)�� ��$+"&6; ����.�W���2"=4C)����(����#��2546;2+"&=#"&46"2641VV1Uww___,%F~F%,ww)___�����4���+��32632#"'+"&=4&46546"3264&?aTv^CD_] ]wuTC]_Cc  Rs��(�(�4��2546;2#"&'546;23265#"&46"32675.e=vSTw_CD^=eUwwUD__D@]]QERsuTC]_CQww)``X@@X�����4�*��32632+"&=.#"+"&=4&46546?=eTw_C@]=QwTC_X@3���.�$��;��32'#"&=4632;2+"1#"&=46;26'4&+"&=46   0W E_^D *$     ) �����#��6��32+"&=46"&546;232654&+"&=46;2   Q{_CC_*W?Y#   _s]C]_C?`-���4�3��3232?62+"/%&#"+"&546>   : V  ��.�����!#"&5.+"&=4;2;2 4I/! 4H0!K5"0 J5!1��<�;��3263232>732+"&=4&#"+"&=4&#"+"&546G,9e)0LW I8(<H8)<  )<PP >96'>96' ����4�����32>32+"=.#"+"54> V1Tv  ^C@^   G%+vT C^W@  �����(�����2"&4$"32654vvw__DC_vwwM_`_DC����4��+��"&54&46=46;2632#"'#264&#"?=eUvvUf<D^_C@]]4EQwvP=^_X@@W����(w�$�0��254;23232#"&'#"&46"32675.f<  ^C Tw=4;23265'=46;2#&X9&A[G2"0  0"3Ie8&>9!_B2F2"G G"2I3G[���.���Y��3210"11#0+0&"&#'&#+"/&=4?6/&=425?2613212?4;6��4�6��323267546;2#"&'546;23265#"&=46>_C@]vSTw_CD^=eUwD_X@RsuTC]_CQwU��.��;��%!"=4?6&+"&=46;2?6&#!"=43!2;2+"3!2} ,V t   " LE   p      �����-a�/��354&#"&46326746732+"#"32;2+.2$#1I3"3K4 2L2$4H$3,1# 2F2 2KH/$2I��<�e,���2"54P),���6��46323;2+"#"54;265>;24+"&5.+"H 3I1#$2H4$2L2 4K3"F2#1,3$4I2$/HK2 2����2K�+��"5463232654&54632#"'.'#"G<(*! =(-",*8# )" )7" (" ����0���5�����7"5426"&4632'254#"z)), 5 [] , �����0��*�0��2/&'>32#"=.=46754'N ))L)LhhL32+"&=.#"632#"&'546;2265#"&5!4&"3267<{NTw_CD_=fWu{LTw__=eXtn__`CE\L^muTC]_CP{P`lvTC^_DQ|PD^_BD_aA�����0�}���4��2"&4$"264'2#".#"32>32#"&=46ҕҔ,[0D__D0W/Uwwҕb( _CD_ )vUUv���<����,�9��2"&4$"264%32#"'&#"/+"546#"3264&ҕҔL5JJ5  `L2"$22ҕ}JjJ )P"/2H2�����*(����2"&46"264uhKJjJH22H2KjJJj"3H22H�����6�U�/��462;2+"32#!"&46;54&+"&46;265              ���03�&�0�8��"&54>7>'54232654'&54632"&462'254#"Qw>1)S#@_DC_  . wU@K +T#L;C`_D# $,UR ,) ����6�#��7+"&=47654#!"=43!_Y X S !I$F   ��<��"��"&5462"326574&54&Vvww+V7D__BC__xTUwwU~  ����4���&��3"&547654#!"&=463!3!2#j%  n l {���� �<��� ������#�'�+�/�3��!!33333353353353533533533333<8 æææltttrrr��0{�M�Y��232>732+"&=4&#"+"&=4&#"+"&'5#"&=46;54;232>34&#3 0KX H9(<H9(<Tw  *"Z@   QP >96'>96'uT ( A_1����6��S�� �:��2"&44#"332;2'#"41#&=46;26'4&+"&=46, , B 8W E_^D *S ,,"y ) ��� �R���?��2"&4"264;20#"&'546;2326=4&+"&=46b, ,:  CC wRTw_CC_R ,,   Y\RtvTC]_C\Yʕ�����<�c�5�U��!2'!";2+;2#!"&'454633232+72#"&'=46#3  2#m3JK4`C Tx3$ #/G35K D`vS��.x�I��2?62?6321 #"/&"#"/ 4'414B"*>??>)#"R  R" 5k{| |{k5  5j\.  ,  ,  .\j5  �����6�.��&632327>32327632#"&'&"#"&'6 } 11 | |11 &   ' ��<��Z��322>7676765<7546;2+"&=4&"&'&'&/.+"&546F E\f[F  (kwj)  #(IDuuцDI(#  ~f,'#mzzm#&-d�������������`���������������������������~������������������������Q����������������������������������������������������������������������������������������������������������������������������������������������������������LH���������X��X�������������(������p����X����(��@���@�������������(�������������0������O����������������������������������������������������������������������������������������������������������������������������� �� ��� ��������������b������� /�������K�������&��������������������� C�� ��`���� ���� �� =�� ��LR�� ���� �� �� ��'�C�r�e�a�t�e�d� �b�y� �N�a�t�h�a�n� �E�a�d�y�,� �u�s�i�n�g� �I�n�k�s�c�a�p�e� �(�h�t�t�p�:�/�/�w�w�w�.�i�n�k�s�c�a�p�e�.�o�r�g�)� �a�n�d� �F�o�n�t�F�o�r�g�e� �2�.�0� �(�h�t�t�p�:�/�/�f�o�n�t�f�o�r�g�e�.�s�f�.�n�e�t�)�.� � �T�h�i�s� �f�o�n�t� �h�a�s� �b�e�e�n� �r�e�l�e�a�s�e�d� �i�n�t�o� �t�h�e� �p�u�b�l�i�c� �d�o�m�a�i�n� �b�y� �t�h�e� �a�u�t�h�o�r�.��Created by Nathan Eady, using Inkscape (http://www.inkscape.org) and FontForge 2.0 (http://fontforge.sf.net). This font has been released into the public domain by the author.��B�l�o�o�m�i�n�g�G�r�o�v�e��BloomingGrove��M�e�d�i�u�m��Medium��F�o�n�t�F�o�r�g�e� �:� �B�l�o�o�m�i�n�g� �G�r�o�v�e� �:� �9�-�1�0�-�2�0�0�9��FontForge : Blooming Grove : 9-10-2009��B�l�o�o�m�i�n�g� �G�r�o�v�e��Blooming Grove��V�e�r�s�i�o�n� �0�0�6�.�0�0�0� ��Version 006.000 ��B�l�o�o�m�i�n�g�G�r�o�v�e��BloomingGrove����������2���������������������w���������� � � � � ������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a����������     uni0000uncrossed_sevenuncrossed_zero uncrossed_z uncrossed_Zglyph_design_templatei_alternate.262j_alternate.263Et.264w_alternate.265W_alternate.266M_alternate.267�����������7 ����ƽ����ب��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/fonts.css�������������������������������������������������������0000664�0000000�0000000�00000001420�14205426364�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@font-face { font-family: 'FontSheet'; src: url(static/assets/fontsheet-g7MrCA_HKKgVf2zD68L54g.eot); src: url(static/assets/fontsheet-g7MrCA_HKKgVf2zD68L54g.eot) format('embedded-opentype'), url(static/assets/fontsheet-g7MrCA_HKKgVf2zD68L54g.woff) format('woff'), url(static/assets/fontsheet-g7MrCA_HKKgVf2zD68L54g.ttf) format('truetype'), url(static/assets/fontsheet-g7MrCA_HKKgVf2zD68L54g.svg?#iefix&#fontsheet) format('svg'); font-weight: normal; font-style: normal; } .icon { display: inline-block; font-family: FontSheet; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon-doctor:before { content: ""; } .icon-donative:before { content: ""; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/fonts.scss������������������������������������������������������0000664�0000000�0000000�00000001017�14205426364�0021403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$font: font-sheet("fontsheet/*.svg", $cache-buster: false); @font-face { font-family: 'FontSheet'; src: font-url($font, 'eot', $cache-buster: false); src: $font; font-weight: normal; font-style: normal; } .icon { display: inline-block; font-family: FontSheet; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @each $glyph in glyphs($font) { .icon-#{$glyph}:before { content: glyph-code($font, $glyph); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/���������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0020645�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/assets/��������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0022147�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/assets/.placeholder��������������������������������������0000664�0000000�0000000�00000000000�14205426364�0024420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/fontsheet/�����������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0022644�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/fontsheet/doctor.svg�������������������������������������0000664�0000000�0000000�00000005112�14205426364�0024656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/fonts/static/fontsheet/donative.svg�����������������������������������0000664�0000000�0000000�00000003506�14205426364�0025202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/�����������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0020302�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/copy-tests-from-sassc.py�����������������������������������0000664�0000000�0000000�00000006525�14205426364�0025051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 """Run me with the path to a sassc checkout, and I'll copy over all the tests that are viable to copy. """ # TODO: # - huge.scss takes ages to run # - extraneous files: # - spec/scss/guard_assign (sassc_output.css, sass_output.css) # - spec/basic/14_imports (a.scss, b.scss, d.scss, sub) # - spec/basic/12_pseudo_classes_and_elements (notes.txt) # - spec/todo/options_passed_to_script (options.cfg) # - spec/todo/newlines_removed_from_selectors_when_compressed (options.cfg) # - files that ruby sass fails to compile: # - spec/todo/variables_in_media.scss # - spec/todo/css_error_with_windows_newlines.scss # - tests/charset.scss # - tests/warnings.scss # - tests/another-gradient-test.scss # - tests/media.scss # - tests/empty-properties.scss # - tests/for_in_function.scss # - tests/directives-in-propsets.scss # - tests/trace.scss # - tests/empty-rule.scss import os import os.path import shutil import subprocess import sys def compile_with_ruby_sass(infile): outfile = os.path.splitext(infile)[0] + '.css' with open(outfile, 'w') as outf: # "expanded" is pretty close to what pyscss spits out, but it # includes extra blank lines between nested blocks, so remove those # with a quick grep scss_proc = subprocess.Popen(['scss', '--style=expanded', infile], stdout=subprocess.PIPE) grep_proc = subprocess.Popen(['grep', '.'], stdin=scss_proc.stdout, stdout=outf) ret = grep_proc.wait() if ret != 0: print("...whoops, bailing on {}".format(infile)) os.unlink(infile) try: os.unlink(outfile) except OSError: pass def sync_tests(sassc_root): target_dir = os.path.dirname(__file__) # Grab all the input/output pairs from `spec` spec_dir = os.path.join(sassc_root, 'spec') for dirpath, dirnames, filenames in os.walk(spec_dir): fileset = set(filenames) try: fileset.discard('input.scss') infile = 'input.scss' except KeyError: continue path = os.path.relpath(dirpath, sassc_root) if 'output.css' in fileset: outfile = 'output.css' elif 'expected_output.css' in fileset: outfile = 'expected_output.css' else: print("can't find an output file in {}, skipping".format(path)) continue fileset.discard(outfile) test_name = path.replace('/', '-') print("cool, found a test pair:", path) if fileset or dirnames: # TODO print("... extra files i don't know how to handle, skipping -- {!r} {!r}".format(fileset, dirnames)) continue shutil.copyfile( os.path.join(dirpath, infile), os.path.join(target_dir, test_name + '.scss')) compile_with_ruby_sass(os.path.join(target_dir, test_name + '.scss')) # Grab the extra tests from `tests` (but don't recurse) tests_dir = os.path.join(sassc_root, 'tests') for fn in os.listdir(tests_dir): path = os.path.join(tests_dir, fn) if not os.path.isfile(path) or not path.endswith('.scss'): continue target = os.path.join(target_dir, 'tests-' + fn) shutil.copyfile(path, target) compile_with_ruby_sass(target) if __name__ == '__main__': sync_tests(*sys.argv[1:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-00_empty.css������������������������������������0000664�0000000�0000000�00000000000�14205426364�0024446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-00_empty.scss�����������������������������������0000664�0000000�0000000�00000000000�14205426364�0024631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-01_simple_css.css�������������������������������0000664�0000000�0000000�00000000025�14205426364�0025461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: blue; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-01_simple_css.scss������������������������������0000664�0000000�0000000�00000000024�14205426364�0025643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: blue; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-02_simple_nesting.css���������������������������0000664�0000000�0000000�00000000033�14205426364�0026340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div img { border: 0px; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-02_simple_nesting.scss��������������������������0000664�0000000�0000000�00000000044�14205426364�0026525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { img { border: 0px; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-03_simple_variable.css��������������������������0000664�0000000�0000000�00000000024�14205426364�0026457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: red; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-03_simple_variable.scss�������������������������0000664�0000000�0000000�00000000044�14205426364�0026644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$color: red; a { color: $color; }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-04_basic_variables.css��������������������������0000664�0000000�0000000�00000000134�14205426364�0026435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: red; background: "blue"; } foo { a: 1 2 before; } foo { a: 1 2 before; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-04_basic_variables.scss�������������������������0000664�0000000�0000000�00000000257�14205426364�0026626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$color: "black"; $color: red; $background: "blue"; a { color: $color; background: $background; } $y: before; $x: 1 2 $y; foo { a: $x; } $y: after; foo { a: $x; }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-05_empty_levels.css�����������������������������0000664�0000000�0000000�00000000401�14205426364�0026032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div span { color: red; background: blue; } div { color: gray; } div empty span { color: red; background: blue; } empty1 empty2 div { blah: blah; } empty1 empty2 div { bloo: blee; } empty1 empty2 div empty3 span { blah: blah; blah: blah; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-05_empty_levels.scss����������������������������0000664�0000000�0000000�00000000562�14205426364�0026225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { span { color: red; background: blue; } } div { color: gray; empty { span { color: red; background: blue; } } } empty1 { empty2 { div { blah: blah; } } } empty1 { empty2 { div { bloo: blee; empty3 { span { blah: blah; blah: blah; } } } } } ����������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-06_nesting_and_comments.css���������������������0000664�0000000�0000000�00000001500�14205426364�0027522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* top level comment -- should be preserved */ div { /* another comment that should be preserved */ color: red; background: blue; /* the next selector should be indented two spaces */ margin: 10px 5px; } div span { font-weight: bold; /* yet another comment that should be preserved */ display: inline-block; } div span a { text-decoration: none; /* where will this comment go? */ color: green; /* what about this comment? */ border: 1px bloo blee red; } div empty not_empty { blah: blah; bloo: bloo; } div p { padding: 10px 8%; -webkit-box-sizing: hux; } div h1 { color: "a 'red' and \"blue\" value"; } /* last comment, top level again -- compare the indentation! */ div { f: g; } div empty span { a: b; } div empty_with_comment { /* hey now */ } div empty_with_comment span { c: d; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-06_nesting_and_comments.scss��������������������0000664�0000000�0000000�00000001672�14205426364�0027717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$blah: bloo blee; $blip: "a 'red' and \"blue\" value"; /* top level comment -- should be preserved */ div { /* another comment that should be preserved */ color: red; background: blue; $blux: hux; // gone! span { font-weight: bold; a { text-decoration: none; /* where will this comment go? */ color: green; /* what about this comment? */ border: 1px $blah red; } /* yet another comment that should be preserved */ display: inline-block; } // gone! /* the next selector should be indented two spaces */ empty { not_empty { blah: blah; // gone! bloo: bloo; } } p { padding: 10px 8%; -webkit-box-sizing: $blux; } margin: 10px 5px; h1 { color: $blip; } } /* last comment, top level again -- compare the indentation! */ div { f: g; empty { span { a: b; } } empty_with_comment { /* hey now */ span { c: d; } } }����������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-07_nested_simple_selector_groups.css������������0000664�0000000�0000000�00000001054�14205426364�0031463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a, b { color: red; background: blue; } c, d { color: gray; } c e, c f, d e, d f { background: blue; padding: 10px 5px; } c g, c h, d g, d h { blah: blah; bloo: bloo; } c i, c j, d i, d j { foo: goo; } c i k, c i l, c j k, c j l, d i k, d i l, d j k, d j l { hoo: boo; } c i k m, c i k n, c i k o, c i l m, c i l n, c i l o, c j k m, c j k n, c j k o, c j l m, c j l n, c j l o, d i k m, d i k n, d i k o, d i l m, d i l n, d i l o, d j k m, d j k n, d j k o, d j l m, d j l n, d j l o { wow: we are far inside; but: it still works; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-07_nested_simple_selector_groups.scss�����������0000664�0000000�0000000�00000000473�14205426364�0031652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a, b { color: red; background: blue; } c, d { color: gray; e, f { background: blue; padding: 10px 5px; } g, h { blah: blah; bloo: bloo; } i, j { foo: goo; k, l { m, n, o { wow: we are far inside; but: it still works; } hoo: boo; } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-08_selector_combinators.css���������������������0000664�0000000�0000000�00000000146�14205426364�0027553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b > c { color: red; background: gray; } a + b > c d e { color: blue; background: white; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-08_selector_combinators.scss��������������������0000664�0000000�0000000�00000000151�14205426364�0027732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b > c { d e { color: blue; background: white; } color: red; background: gray; }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-09_selector_groups_and_combinators.css����������0000664�0000000�0000000�00000000212�14205426364�0031767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b, c { blah: blah; bleh: bleh; } a + b d e, a + b f ~ g + h, a + b > i, c d e, c f ~ g + h, c > i { bloo: bloo; blee: blee; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-09_selector_groups_and_combinators.scss���������0000664�0000000�0000000�00000000144�14205426364�0032156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b, c { blah: blah; bleh: bleh; d e, f ~ g + h, > i { bloo: bloo; blee: blee; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-10_classes_and_ids.css��������������������������0000664�0000000�0000000�00000000270�14205426364�0026440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b, .class { blah: blah; bleh: bleh; } a + b d #id, a + b f ~ g.other + h, a + b > i#grar, .class d #id, .class f ~ g.other + h, .class > i#grar { bloo: bloo; blee: blee; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-10_classes_and_ids.scss�������������������������0000664�0000000�0000000�00000000166�14205426364�0026627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a + b, .class { blah: blah; bleh: bleh; d #id, f ~ g.other + h, > i#grar { bloo: bloo; blee: blee; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-11_attribute_selectors.css����������������������0000664�0000000�0000000�00000000167�14205426364�0027416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[hey='ho'], a > b { blah: blah; } [hey='ho'] c, [hey='ho'] [hoo*="ha"], a > b c, a > b [hoo*="ha"] { bloo: bloo; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-11_attribute_selectors.scss���������������������0000664�0000000�0000000�00000000124�14205426364�0027572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[hey = 'ho'], a > b { blah: blah; c, [hoo *= "ha" ] { bloo: bloo; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-13_back_references.css��������������������������0000664�0000000�0000000�00000000131�14205426364�0026422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hey, ho { blah: blah; } hey > boo, foo hey.goo, ho > boo, foo ho.goo { bloo: bloo; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-13_back_references.scss�������������������������0000664�0000000�0000000�00000000104�14205426364�0026605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hey, ho { & > boo, foo &.goo { bloo: bloo; } blah: blah; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-15_arithmetic_and_lists.css���������������������0000664�0000000�0000000�00000001050�14205426364�0027515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: 3; b: 3.75; c: 1; /* shouldn't eval the following "300" */ d: 300; /* increasingly jacked-up edge cases that combine arithmetic with lists */ e: 10.5 2 3; f: 123 4 5 6; g: 112 8 9 6; /* shouldn't perform the following division */ h: 15 / 3 / 5; /* should perform the following division now */ i: 1; /* this too */ j: 1; /* and this */ k: 5; l: 1; m: 1/2, 1 2 3 url("www.foo.com/blah.png") blah blah; n: 1 2 3, 1 2 3 4 5 6, 7 8 9; o: 9px; p: 5px; q: 2; r: 64em; s: 2.5em; t: 120.750.8 6/7; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-15_arithmetic_and_lists.scss��������������������0000664�0000000�0000000�00000001323�14205426364�0027703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$stuff: 1 2 3; $three: 3; div { a: 1 + 2; b: 3 + 3/4; c: 1/2 + 1/2; /* shouldn't eval the following "300" */ d: 300; /* increasingly jacked-up edge cases that combine arithmetic with lists */ e: 1 + (5/10 2 3); f: 1 + ((2+(3 4) 5) 6); g: 1 + ((1+(14/7 8) 9) 6); /* shouldn't perform the following division */ h: 15 / 3 / 5; /* should perform the following division now */ i: (15 / 3 / 5); /* this too */ j: (15 / 3) / 5; /* and this */ k: 15 / $three; l: 15 / 5 / $three; m: 1/2, $stuff url("www.foo.com/blah.png") blah blah; n: 1 2 3, $stuff 4 5 (6, 7 8 9); o: 3px + 3px + 3px; p: 4 + 1px; q: (20pt / 10pt); r: 16em * 4; s: (5em / 2); t: 1 + (2 + (3/4 + (4/5 6/7))); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-16_hex_arithmetic.css���������������������������0000664�0000000�0000000�00000000522�14205426364�0026325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { p01: #abc; p02: #aabbcc; p03: #aabbcchello; p04: #abbccd; p05: #aabbdd; p06: #0101ff; p07: blue; p08: cyan; p09: #000000; p10: black; p11: black; p12: yellow; p13: #020202; p14: black; p15: 10-#222222; p16: black; p17: magenta; p18: 10 #232323; p19: 10/#222222; p20: #0b0a0b; p21: white; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-16_hex_arithmetic.scss��������������������������0000664�0000000�0000000�00000001246�14205426364�0026514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { p01: #abc; p02: #aabbcc; p03: #abc + hello; p04: #abc + 1; // add 1 to each triplet p05: #abc + #001; // triplet-wise addition p06: #0000ff + 1; // add 1 to each triplet; ignore overflow because it doesn't correspond to a color name p07: #0000ff + #000001; // convert overflow to name of color (blue) p08: #00ffff + #000101; // aqua p09: #000000; p10: #000000 - 1; // black p11: #000000 - #000001; // black p12: #ffff00 + #010100; // yellow p13: (#101010 / 7); p14: #000 + 0; p15: 10 - #222; p16: #000 - #001; p17: #f0f + #101; p18: 10 #222 + 1; p19: (10 / #222); p20: rgb(10,10,10) + #010001; p21: #010000 + rgb(255, 255, 255); }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-17_basic_mixins.css�����������������������������0000664�0000000�0000000�00000000535�14205426364�0026005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { hey: ho; hugabug: third second; hugabug: kwd-y kwd-x; goo: boo hoo; no: parameters here; /* end of hux */ flugablug: pug flug glug; flugablug: pug mug glug; } a div, a span { some: nested stuff; } a div foo, a div bar, a span foo, a span bar { more: stuff so forth; blah: blah; } div { blah: blah from a variable blah; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-17_basic_mixins.scss����������������������������0000664�0000000�0000000�00000000744�14205426364�0026172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo($x, $y) { hugabug: $y $x; } @mixin bar($a, $b: flug) { flugablug: $a $b glug; } @mixin hux() { no: parameters here; div, span { some: nested stuff; foo, bar { more: stuff so forth; blah: blah; } } /* end of hux */ } a { hey: ho; @include foo(second, third); @include foo($y: kwd-y, $x: kwd-x); goo: boo hoo; @include hux; @include bar(pug); @include bar(pug, mug); } $x: from a variable; div { blah: blah $x blah; }����������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-18_mixin_scope.css������������������������������0000664�0000000�0000000�00000000303�14205426364�0025644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: global x; b: global y; f-a: arg; f-b: global y; f-a: local x changed by foo; f-b: global y changed by foo; f-c: new local z; a: global x; b: global y changed by foo; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-18_mixin_scope.scss�����������������������������0000664�0000000�0000000�00000000370�14205426364�0026033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: global x; $y: global y; @mixin foo($x) { f-a: $x; f-b: $y; $x: local x changed by foo; $y: global y changed by foo; $z: new local z; f-a: $x; f-b: $y; f-c: $z; } div { a: $x; b: $y; @include foo(arg); a: $x; b: $y; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-19_full_mixin_craziness.css���������������������0000664�0000000�0000000�00000001762�14205426364�0027571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { /* begin foo */ margin: 1 2; /* end foo */ /* begin foo */ margin: 1 3; /* end foo */ margin: 1 2 zee; margin: 1 kwd-y kwd-z; } div blip { hey: now; } div blip { hey: now; } div { /* begin hux */ color: global-y; /* begin foo */ margin: called-from-hux global-y; /* end foo */ /* end hux */ } div blip { hey: now; } div { /* begin hux */ color: calling-hux-again; /* begin foo */ margin: called-from-hux calling-hux-again; /* end foo */ /* end hux */ } div blip { hey: now; } div { blah: original-bung; } div { blah: redefined-bung; } div { /* calls to nullary mixins may omit the empty argument list */ blah: redefined-bung; } div { /* begin foo */ margin: kwdarg1 kwdarg2; /* end foo */ } div blip { hey: now; } hoo { color: boo; } div { blah: boogoo some other default; } div { value: original; } div { value: no longer original; } div { arg: changed local x; blarg: changed global y; a: global-x; b: changed global y; } ��������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-19_full_mixin_craziness.scss��������������������0000664�0000000�0000000�00000002503�14205426364�0027746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: global-x; $y: global-y; $z: global-z; @mixin foo($x, $y) { /* begin foo */ margin: $x $y; blip { hey: now; } /* end foo */ } @mixin foogoo($x, $y, $z) { margin: $x $y $z; } @mixin hux($y) { /* begin hux */ color: $y; @include foo(called-from-hux, $y: $y); /* end hux */ } div { @include foo(1, 2); @include foo(1, 3); @include foogoo(1, 2, $z: zee); @include foogoo(1, $y /* blah */ : kwd-y, $z: kwd-z); } div { @include hux($y: $y); } $y: different-global-y; div { @include hux(calling-hux-again); } @mixin bung() { blah: original-bung; } div { @include bung(); } @mixin bung() { blah: redefined-bung; } div { @include bung(); } div { /* calls to nullary mixins may omit the empty argument list */ @include bung; } div { @include foo($x: kwdarg1, $y: kwdarg2); } @mixin ruleset() { hoo { color: boo; } } @include ruleset(); $da: default argument; @mixin default_args($x, $y: $da) { blah: $x $y; } $da: some other default; div { @include default_args(boogoo); } @mixin original() { value: original; } div { @include original(); } @mixin original() { value: no longer original; } div { @include original(); } @mixin set-x($x) { $x: changed local x; arg: $x; $y: changed global y; blarg: $y; } div { @include set-x(blah); a: $x; b: $y; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-20_scoped_variables.css�������������������������0000664�0000000�0000000�00000000244�14205426364�0026631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������outer { /* assigning to $x */ blah: blah; } outer inner { /* begin foo */ /* assigning to $x */ x: inside foo; /* end foo */ x: inside outer scope; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-20_scoped_variables.scss������������������������0000664�0000000�0000000�00000000335�14205426364�0027015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo() { /* begin foo */ /* assigning to $x */ $x: inside foo; x: $x; /* end foo */ } outer { /* assigning to $x */ $x: inside outer scope; blah: blah; inner { @include foo(); x: $x; } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-21_one_builtin_function.css���������������������0000664�0000000�0000000�00000000060�14205426364�0027535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: yellow; background: #7b2d06; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-21_one_builtin_function.scss��������������������0000664�0000000�0000000�00000000121�14205426364�0027716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: rgb(255, $blue: 0, $green: 255); background: rgb(123, 45, 6); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-22_colors_with_alpha.css������������������������0000664�0000000�0000000�00000000411�14205426364�0027023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: yellow; background: #7b2d06; flah: #111111; grah: rgba(255, 0, 238, 0.5); blah: rgba(1, 2, 3, 0.6); floo: cyan; bloo: rgba(0, 255, 255, 0.7); groo: cyan; hoo: 123; moo: 45; poo: 6; goo: rgba(63, 0, 191, 0.75); boo: #edcba9; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-22_colors_with_alpha.scss�����������������������0000664�0000000�0000000�00000000611�14205426364�0027210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: rgb(0, 255, 255); div { color: rgb(255, $blue: 0, $green: 255); background: rgb(123, 45, 6); flah: rgba(0, 0, 0, 1) + #111; grah: rgba(#f0e, $alpha: .5); blah: rgba(1,2,3,.6); floo: $x; bloo: rgba($x, 0.7); groo: $x; $x: rgb(123, 45, 6); hoo: red($x); moo: green($x); poo: blue($x); goo: mix(rgba(255, 0, 0, 0.5), #00f); boo: invert(#123456); } �����������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-23_basic_value_interpolation.css����������������0000664�0000000�0000000�00000000131�14205426364�0030546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: helloworld; a: hello world; b: 123; b: string; b: 123; b: string; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-23_basic_value_interpolation.scss���������������0000664�0000000�0000000�00000000200�14205426364�0030726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: hello#{world}; a: hello #{world}; b: 12#{3}; b: type-of(12#{3}); b: #{12 + 111}; b: type-of(#{12 + 111}); }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-24_namespace_properties.css���������������������0000664�0000000�0000000�00000000307�14205426364�0027540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a-p1: q; a-b-p2: q; a-p3: q; } foo { bar: baz; bar-bip: bop; bar-bing: string; bar-bang: 3; bar-bung: bap; bar-bong: bup; bar-bong-x: x; bar-bong-y: y; bar-bong-z: z; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-24_namespace_properties.scss��������������������0000664�0000000�0000000�00000000343�14205426364�0027723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: { p1: q; b: { p2: q; } p3: q; } } foo { bar: baz { bip: bop; bing: type-of("hello"); bang: 1 + 2; bung: bap; bong: bup { x: x; y: y; z: z; } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-25_basic_string_interpolation.css���������������0000664�0000000�0000000�00000000060�14205426364�0030743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { blah: "hello 4 world px bloo\n blah"; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-25_basic_string_interpolation.scss��������������0000664�0000000�0000000�00000000104�14205426364�0031125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { blah: "hello #{2+2} world #{unit(23px)} #{'bloo\n'} blah"; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-26_selector_interpolation.css�������������������0000664�0000000�0000000�00000000223�14205426364�0030116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo, bar { p: 1; } foo baz, foo hux, bar baz, bar hux { q: 2; } foo baz mumble4, foo hux mumble4, bar baz mumble4, bar hux mumble4 { r: 3; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-26_selector_interpolation.scss������������������0000664�0000000�0000000�00000000177�14205426364�0030311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: oo, ba; $y: az, hu; f#{$x}r { p: 1; b#{$y}x { q: 2; mumble#{length($x) + length($y)} { r: 3; } } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-27_media_queries.css����������������������������0000664�0000000�0000000�00000000366�14205426364�0026154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a b c { blee: blee; blah: blah; } a b c d e f { blah: blah; bloo: bloo; } @media print and (foo: 1 2 3), (bar: 3px hux(muz)), not screen { a b c g h, a b c i j { hey: ho; } a b c g h k l m, a b c i j k l m { hee: fee; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-27_media_queries.scss���������������������������0000664�0000000�0000000�00000000351�14205426364�0026331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a b c { blee: blee; d e f { blah: blah; bloo: bloo; } g h, i j { @media print and (foo: 1 2 3), (bar: 3px hux(muz)), not screen { hey: ho; k l m { hee: fee; } } } blah: blah; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-28_url.css��������������������������������������0000664�0000000�0000000�00000001214�14205426364�0024134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: url(bloo/blah.css); bar: url(http://foo/bar/hux.css); foo: url(fudgepop.css); bar: url("http://fudgepop/styles.css"); hux: url(http://box_123////fudgepop.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-1.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-2.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-3.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-4.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-5.css); gloo: url("hey3.css"); floo: url(hadoop-444.css); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-28_url.scss�������������������������������������0000664�0000000�0000000�00000000625�14205426364�0024324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: pop; $y: 123; div { foo: url(bloo/blah.css); bar: url(http://foo/bar/hux.css); foo: url(fudge#{$x}.css); bar: url("http://fudge#{$x}/styles.css"); hux: url(http://box_#{$y}////fudge#{$x}.css); @each $i in (1 2 3 4 5) { hux: url(http://box_#{$y}////fudge#{$x}.css); foo: url(http://blah.com/bar-#{$i}.css); } gloo: url("hey#{1+2}.css"); floo: url(hadoop-#{$y+321}.css); } �����������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-29_if.css���������������������������������������0000664�0000000�0000000�00000000123�14205426364�0023727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { background: gray; } div { background: blue; } div { background: red; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-29_if.scss��������������������������������������0000664�0000000�0000000�00000000655�14205426364�0024124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: a, b, 1+2; @if type-of(nth($x, 3)) == number { div { background: gray; } } @if type-of(nth($x, 2)) == number { div { background: gray; } } @else if type-of(nth($x, 2)) == string { div { background: blue; } } @if type-of(nth($x, 2)) == number { div { background: gray; } } @else if type-of(nth($x, 2)) == color { div { background: blue; } } @else { div { background: red; } }�����������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-30_if_in_function.css���������������������������0000664�0000000�0000000�00000000130�14205426364�0026310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: foo; content: bar; content: foo; content: bar; content: bar; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-30_if_in_function.scss��������������������������0000664�0000000�0000000�00000000374�14205426364�0026505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: true; @function foobar() { @if $x { $x: false; @return foo; } @else { $x: true; @return bar; } } div { content: foobar(); content: foobar(); content: foobar(); content: foobar(); $x: false; content: foobar(); }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-31_if_in_mixin.css������������������������������0000664�0000000�0000000�00000000110�14205426364�0025606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: foo; content: bar; content: foo; content: foo; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-31_if_in_mixin.scss�����������������������������0000664�0000000�0000000�00000000345�14205426364�0026003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: true; @mixin foobar() { @if $x { $x: false; content: foo; } @else { $x: true; content: bar; } } div { @include foobar(); @include foobar(); @include foobar(); $x: true; @include foobar(); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-32_percentages.css������������������������������0000664�0000000�0000000�00000000221�14205426364�0025622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { width: 30%; height: -10%; width: 20%; width: 20%; height: 0%; height: 0%; blah: 5; flah: 900%; grah: 900%; nyah: 5%; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-basic-32_percentages.scss�����������������������������0000664�0000000�0000000�00000000337�14205426364�0026015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { width: 10% + 20%; height: 10% - 20%; width: 10% + 10; width: 10 + 10%; height: 10% - 10; height: 10 - 10%; blah: (20% / 4%); flah: 12 * 75%; grah: 75% * 12; // hwah: (24 / 8%); nyah: (35% / 7); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������spec-scss-almost_ambiguous_nested_rules_and_declarations.css����������������������������������������0000664�0000000�0000000�00000000320�14205426364�0034331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�pyScss-1.4.0/scss/tests/files/from-sassc�������������������������������������������������������������������������������������������������������������������������������foo { bar: baz bang bop biddle woo look at all these elems; } foo bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses { a: b; } foo bar:baz bang bop biddle woo look at all these elems { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������spec-scss-almost_ambiguous_nested_rules_and_declarations.scss���������������������������������������0000664�0000000�0000000�00000000303�14205426364�0034515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�pyScss-1.4.0/scss/tests/files/from-sassc�������������������������������������������������������������������������������������������������������������������������������foo { bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses {a: b}; bar:baz bang bop biddle woo look at all these elems {a: b}; bar:baz bang bop biddle woo look at all these elems; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_function.css�������������������������������0000664�0000000�0000000�00000000020�14205426364�0025673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bar { a: 3; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_function.scss������������������������������0000664�0000000�0000000�00000000072�14205426364�0026065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@function foo() { @return 1 + 2; } bar { a: foo(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_mixins.css���������������������������������0000664�0000000�0000000�00000000030�14205426364�0025356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bar { a: b; c: d; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_mixins.scss��������������������������������0000664�0000000�0000000�00000000063�14205426364�0025547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo {a: b} bar { @include foo; c: d; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_prop_name_interpolation.css����������������0000664�0000000�0000000�00000000026�14205426364�0031003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar3: blip; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_prop_name_interpolation.scss���������������0000664�0000000�0000000�00000000030�14205426364�0031161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo {bar#{1 + 2}: blip} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_selector_interpolation.css�����������������0000664�0000000�0000000�00000000030�14205426364�0030636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo.bar baz { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-basic_selector_interpolation.scss����������������0000664�0000000�0000000�00000000030�14205426364�0031021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#{"foo"}.bar baz {a: b} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-block_comment_in_script.css����������������������0000664�0000000�0000000�00000000023�14205426364�0027576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 1bar; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-block_comment_in_script.scss���������������������0000664�0000000�0000000�00000000035�14205426364�0027764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo {a: 1 + /* flang */ bar} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-comment_after_if_directive.css�������������������0000664�0000000�0000000�00000000062�14205426364�0030252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: b; /* This is a comment */ c: d; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-comment_after_if_directive.scss������������������0000664�0000000�0000000�00000000112�14205426364�0030431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { @if true {a: b} @else {x: y} /* This is a comment */ c: d } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_basic_scss.css�������������������������������0000664�0000000�0000000�00000000020�14205426364�0025671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sel { p: v; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_basic_scss.scss������������������������������0000664�0000000�0000000�00000000020�14205426364�0026054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sel { p: v; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_block_directive_with_semicolon.css�����������0000664�0000000�0000000�00000000042�14205426364�0032014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo { a: b; } @bar { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_block_directive_with_semicolon.scss����������0000664�0000000�0000000�00000000043�14205426364�0032200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo { a: b; } @bar { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_cdo_and_cdc_ignored_at_toplevel.css����������0000664�0000000�0000000�00000000074�14205426364�0032073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; } bar { bar: baz; } baz { bar: baz; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_cdo_and_cdc_ignored_at_toplevel.scss���������0000664�0000000�0000000�00000000076�14205426364�0032260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; } bar { bar: baz; } baz { bar: baz; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_crazy_comments.css���������������������������0000664�0000000�0000000�00000000534�14205426364�0026624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This is a CSS comment. */ .one { color: green; } /* Another comment */ /* The following should not be used: .two {color: red;} */ .three { color: green; /* color: red; */ } /** .four {color: red;} */ .five { color: green; } /**/ .six { color: green; } /*********/ .seven { color: green; } /* a comment **/ .eight { color: green; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_crazy_comments.scss��������������������������0000664�0000000�0000000�00000000541�14205426364�0027005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This is a CSS comment. */ .one { color: green; } /* Another comment */ /* The following should not be used: .two {color: red;} */ .three { color: green; /* color: red; */ } /** .four {color: red;} */ .five { color: green; } /**/ .six { color: green; } /*********/ .seven { color: green; } /* a comment **/ .eight { color: green; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_empty_declarations.css�����������������������0000664�0000000�0000000�00000000024�14205426364�0027447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_empty_declarations.scss����������������������0000664�0000000�0000000�00000000024�14205426364�0027632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_empty_rule.css�������������������������������0000664�0000000�0000000�00000000000�14205426364�0025740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_empty_rule.scss������������������������������0000664�0000000�0000000�00000000000�14205426364�0026123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_import_directive.css�������������������������0000664�0000000�0000000�00000000026�14205426364�0027133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url(foo.css); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_import_directive.scss������������������������0000664�0000000�0000000�00000000025�14205426364�0027315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url(foo.css);�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_invisible_comments.css�����������������������0000664�0000000�0000000�00000000020�14205426364�0027446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: d; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_invisible_comments.scss����������������������0000664�0000000�0000000�00000000020�14205426364�0027631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: d; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_nth_selectors.css����������������������������0000664�0000000�0000000�00000000037�14205426364�0026441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������:nth-child(2n + 3) { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_nth_selectors.scss���������������������������0000664�0000000�0000000�00000000037�14205426364�0026624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������:nth-child(2n + 3) { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_property_comments.css������������������������0000664�0000000�0000000�00000000046�14205426364�0027356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo * Bar */ a: b; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_property_comments.scss�����������������������0000664�0000000�0000000�00000000046�14205426364�0027541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo * Bar */ a: b; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_rule_comments.css����������������������������0000664�0000000�0000000�00000000042�14205426364�0026435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Foo * Bar */ .foo { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_rule_comments.scss���������������������������0000664�0000000�0000000�00000000042�14205426364�0026620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Foo * Bar */ .foo { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_selector_comments.css������������������������0000664�0000000�0000000�00000000037�14205426364�0027312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo #bar:baz(bip) { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_selector_comments.scss�����������������������0000664�0000000�0000000�00000000037�14205426364�0027475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo #bar:baz(bip) { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_selector_hacks.css���������������������������0000664�0000000�0000000�00000000022�14205426364�0026550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������> > E { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_selector_hacks.scss��������������������������0000664�0000000�0000000�00000000022�14205426364�0026733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������> > E { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_spaceless_combo_selectors.css����������������0000664�0000000�0000000�00000000022�14205426364�0031003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������E + F { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_spaceless_combo_selectors.scss���������������0000664�0000000�0000000�00000000022�14205426364�0031166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������E + F { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_unary_ops.css��������������������������������0000664�0000000�0000000�00000000103�14205426364�0025576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: -0.5em; b: 0.5em; c: -foo(12px); d: +foo(12px); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-css_unary_ops.scss�������������������������������0000664�0000000�0000000�00000000103�14205426364�0025761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: -0.5em; b: 0.5em; c: -foo(12px); d: +foo(12px); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-each_directive.css�������������������������������0000664�0000000�0000000�00000000135�14205426364�0025652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { b: 1px; b: 2px; b: 3px; b: 4px; } c { d: foo; d: bar; d: baz; d: bang; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-each_directive.scss������������������������������0000664�0000000�0000000�00000000174�14205426364�0026040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { @each $number in 1px 2px 3px 4px { b: $number; } } c { @each $str in foo, bar, baz, bang { d: $str; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-for_directive.css��������������������������������0000664�0000000�0000000�00000000061�14205426364�0025536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { a: 1; a: 2; a: 3; a: 4; a: 5; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-for_directive.scss�������������������������������0000664�0000000�0000000�00000000061�14205426364�0025721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { @for $var from 1 through 5 {a: $var;} } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-function_args.css��������������������������������0000664�0000000�0000000�00000000020�14205426364�0025546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bar { a: 3; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-function_args.scss�������������������������������0000664�0000000�0000000�00000000124�14205426364�0025736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@function plus($var1, $var2) { @return $var1 + $var2; } bar { a: plus(1, 2); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-if_directive.css���������������������������������0000664�0000000�0000000�00000000020�14205426364�0025341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bar { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-if_directive.scss��������������������������������0000664�0000000�0000000�00000000063�14205426364�0025533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@if "foo" != "foo" {foo {a: b}} @else {bar {a: b}} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-interpolation.css��������������������������������0000664�0000000�0000000�00000000047�14205426364�0025605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ul li#foo a span.label { foo: bar; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-interpolation.scss�������������������������������0000664�0000000�0000000�00000000067�14205426364�0025772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$bar : "#foo"; ul li#{$bar} a span.label { foo: bar; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-interpolation_with_bracket_on_next_line.css������0000664�0000000�0000000�00000000032�14205426364�0033066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a.foo b { color: red; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-interpolation_with_bracket_on_next_line.scss�����0000664�0000000�0000000�00000000032�14205426364�0033251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a.#{"foo"} b {color: red} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-keyword_args_in_functions.css��������������������0000664�0000000�0000000�00000000056�14205426364�0030174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.keyed { color: rgba(170, 119, 204, 0.4); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-keyword_args_in_functions.scss�������������������0000664�0000000�0000000�00000000062�14205426364�0030354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.keyed { color: rgba($color: #a7c, $alpha: 0.4) } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-line_comment_in_script.css�����������������������0000664�0000000�0000000�00000000025�14205426364�0027435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 1blang; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-line_comment_in_script.scss����������������������0000664�0000000�0000000�00000000041�14205426364�0027616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo {a: 1 + // flang } blang } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mix.css������������������������������������������0000664�0000000�0000000�00000000050�14205426364�0023505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { roo: #7f007f; doo: #3f00bf; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mix.scss�����������������������������������������0000664�0000000�0000000�00000000075�14205426364�0023677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { roo: mix(#f00, #00f); doo: mix(#f00, #00f, 25%); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixin_with_keyword_args.css����������������������0000664�0000000�0000000�00000000114�14205426364�0027650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.mixed { required: foo; arg1: default-val1; arg2: non-default-val2; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixin_with_keyword_args.scss���������������������0000664�0000000�0000000�00000000270�14205426364�0030036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin(foo, $arg2: non-default-val2); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixins_with_args.css�����������������������������0000664�0000000�0000000�00000000036�14205426364�0026272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { a: bar; b: 12px; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixins_with_args.scss����������������������������0000664�0000000�0000000�00000000111�14205426364�0026447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo($a, $b) { a: $a; b: $b; } .foo {@include foo(bar, 12px)} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixins_with_empty_args.css�����������������������0000664�0000000�0000000�00000000021�14205426364�0027502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-mixins_with_empty_args.scss����������������������0000664�0000000�0000000�00000000052�14205426364�0027671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo {a: b} .foo {@include foo();} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-multiline_var.css��������������������������������0000664�0000000�0000000�00000000050�14205426364�0025562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 3; b: false; c: a b c; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-multiline_var.scss�������������������������������0000664�0000000�0000000�00000000161�14205426364�0025750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { $var1: 1 + 2; $var2: true and false; $var3: a b c; a: $var1; b: $var2; c: $var3; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-namespace_properties.css�������������������������0000664�0000000�0000000�00000000066�14205426364�0027127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang-bip: 1px; bang-bop: bar; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-namespace_properties.scss������������������������0000664�0000000�0000000�00000000072�14205426364�0027307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang: { bip: 1px; bop: bar;}} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-namespace_properties_with_value.css��������������0000664�0000000�0000000�00000000065�14205426364�0031355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bar-bip: bop; bar-bing: bop; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-namespace_properties_with_value.scss�������������0000664�0000000�0000000�00000000063�14205426364�0031536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz { bip: bop; bing: bop; }} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_namespace_properties.css������������������0000664�0000000�0000000�00000000115�14205426364�0030464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang-bip: 1px; bang-bop: bar; bang-blat-baf: bort; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_namespace_properties.scss�����������������0000664�0000000�0000000�00000000116�14205426364�0030650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang: { bip: 1px; bop: bar; blat:{baf:bort}}} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules.css���������������������������������0000664�0000000�0000000�00000000061�14205426364�0025406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo bar baz { a: b; } foo bang bip { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules.scss��������������������������������0000664�0000000�0000000�00000000056�14205426364�0025575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar {baz {a: b}} bang {bip {a: b}}} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules_with_declarations.css���������������0000664�0000000�0000000�00000000233�14205426364�0031172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { ump: nump; grump: clump; } foo bar { blat: bang; habit: rabbit; } foo bar baz { a: b; } foo bar bip { c: d; } foo bibble bap { e: f; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules_with_declarations.scss��������������0000664�0000000�0000000�00000000211�14205426364�0031351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { ump: nump; grump: clump; bar { blat: bang; habit: rabbit; baz {a: b} bip {c: d}} bibble { bap {e: f}}} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules_with_fancy_selectors.css������������0000664�0000000�0000000�00000000103�14205426364�0031701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo .bar { a: b; } foo :baz { c: d; } foo bang:bop { e: f; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-nested_rules_with_fancy_selectors.scss�����������0000664�0000000�0000000�00000000065�14205426364�0032073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { .bar {a: b} :baz {c: d} bang:bop {e: f}} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-newlines_in_selectors.css������������������������0000664�0000000�0000000�00000000101�14205426364�0027302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo bang, foo bip bop, bar baz bang, bar baz bip bop { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-newlines_in_selectors.scss�����������������������0000664�0000000�0000000�00000000051�14205426364�0027471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo, bar baz { bang, bip bop {a: b}} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-no_namespace_properties_without_space.css��������0000664�0000000�0000000�00000000034�14205426364�0032554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo bar:baz { bip: bop; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-no_namespace_properties_without_space.scss�������0000664�0000000�0000000�00000000042�14205426364�0032736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar:baz { bip: bop }} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-one_line_comments.css����������������������������0000664�0000000�0000000�00000000044�14205426364�0026410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo bar[val="//"] { baz: bang; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-one_line_comments.scss���������������������������0000664�0000000�0000000�00000000050�14205426364�0026570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo bar[val="//"] { baz: bang; //} } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-parent_selectors.css�����������������������������0000664�0000000�0000000�00000000056�14205426364�0026272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo:hover { a: b; } bar foo.baz { c: d; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-parent_selectors.scss����������������������������0000664�0000000�0000000�00000000053�14205426364�0026452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { &:hover {a: b} bar &.baz {c: d}} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-passing_all_as_keyword_args_in_opposite_order.css0000664�0000000�0000000�00000000120�14205426364�0034250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.mixed { required: foo; arg1: non-default-val1; arg2: non-default-val2; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������spec-scss-passing_all_as_keyword_args_in_opposite_order.scss����������������������������������������0000664�0000000�0000000�00000000334�14205426364�0034363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�pyScss-1.4.0/scss/tests/files/from-sassc�������������������������������������������������������������������������������������������������������������������������������@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin($arg2: non-default-val2, $arg1: non-default-val1, $required: foo); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-passing_required_args_as_a_keyword_arg.css�������0000664�0000000�0000000�00000000110�14205426364�0032645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.mixed { required: foo; arg1: default-val1; arg2: default-val2; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-passing_required_args_as_a_keyword_arg.scss������0000664�0000000�0000000�00000000252�14205426364�0033037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin($required: foo); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-prop_name_interpolation_after_hyphen.css���������0000664�0000000�0000000�00000000025�14205426364�0032375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { -foo-bar: b; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-prop_name_interpolation_after_hyphen.scss��������0000664�0000000�0000000�00000000030�14205426364�0032554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { -#{"foo"}-bar: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-prop_name_only_interpolation.css�����������������0000664�0000000�0000000�00000000031�14205426364�0030677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bazbang: blip; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-prop_name_only_interpolation.scss����������������0000664�0000000�0000000�00000000036�14205426364�0031067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo {#{"baz" + "bang"}: blip} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-property_interpolation_at_dashes.css�������������0000664�0000000�0000000�00000000035�14205426364�0031561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { -foo-a-b-foo: foo; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-property_interpolation_at_dashes.scss������������0000664�0000000�0000000�00000000062�14205426364�0031744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$a : a; $b : b; div { -foo-#{$a}-#{$b}-foo: foo } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-sass_script.css����������������������������������0000664�0000000�0000000�00000000061�14205426364�0025247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 3; b: -1; c: foobar; d: 12px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-sass_script.scss���������������������������������0000664�0000000�0000000�00000000104�14205426364�0025430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 1 + 2; b: 1 - 2; c: foo + bar; d: floor(12.3px); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_attr_beginning.css�����0000664�0000000�0000000�00000000026�14205426364�0033240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[zzz=foo] { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_attr_beginning.scss����0000664�0000000�0000000�00000000043�14205426364�0033422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$zzz: zzz; [#{$zzz}=foo] { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_class_begininng.css����0000664�0000000�0000000�00000000021�14205426364�0033366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.zzz { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_class_begininng.scss���0000664�0000000�0000000�00000000036�14205426364�0033557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$zzz: zzz; .#{$zzz} { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_id_begininng.css�������0000664�0000000�0000000�00000000021�14205426364�0032655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#zzz { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_id_begininng.scss������0000664�0000000�0000000�00000000036�14205426364�0033046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$zzz: zzz; ##{$zzz} { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_pseudo_begininng.css���0000664�0000000�0000000�00000000026�14205426364�0033565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������:zzz::zzz { a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_at_pseudo_begininng.scss��0000664�0000000�0000000�00000000047�14205426364�0033753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$zzz: zzz; :#{$zzz}::#{$zzz} { a: b; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_in_pseudoclass.css��������0000664�0000000�0000000�00000000036�14205426364�0032576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo:nth-child(5n) { a: b; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-selector_interpolation_in_pseudoclass.scss�������0000664�0000000�0000000�00000000041�14205426364�0032755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo:nth-child(#{5 + "n"}) {a: b} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-several_namespace_properties.css�����������������0000664�0000000�0000000�00000000134�14205426364�0030644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang-bip: 1px; bang-bop: bar; buzz-fram: "foo"; buzz-frum: moo; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-several_namespace_properties.scss����������������0000664�0000000�0000000�00000000151�14205426364�0031026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz; bang: { bip: 1px; bop: bar;} buzz: { fram: "foo"; frum: moo; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-star_plus_and_parent.css�������������������������0000664�0000000�0000000�00000000031�14205426364�0027116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������* + html foo { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-star_plus_and_parent.scss������������������������0000664�0000000�0000000�00000000026�14205426364�0027305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo {*+html & {a: b}} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-url_import.css�����������������������������������0000664�0000000�0000000�00000000031�14205426364�0025103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url(fonts.sass); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-url_import.scss����������������������������������0000664�0000000�0000000�00000000030�14205426364�0025265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url(fonts.sass);��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-variables.css������������������������������������0000664�0000000�0000000�00000000030�14205426364�0024656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 2; b: 6; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-variables.scss�����������������������������������0000664�0000000�0000000�00000000112�14205426364�0025042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { $var: 2; $another-var: 4; a: $var; b: $var + $another-var;} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-weird_added_space.css����������������������������0000664�0000000�0000000�00000000031�14205426364�0026315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: -moz-bip; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-weird_added_space.scss���������������������������0000664�0000000�0000000�00000000056�14205426364�0026507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$value : bip; foo { bar: -moz-#{$value}; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-while_directive.css������������������������������0000664�0000000�0000000�00000000051�14205426364�0026057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { a: 1; a: 2; a: 3; a: 4; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-scss-while_directive.scss�����������������������������0000664�0000000�0000000�00000000103�14205426364�0026240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$i: 1; .foo { @while $i != 5 { a: $i; $i: $i + 1; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_bizarrely_formatted_comments.css�������������0000664�0000000�0000000�00000000050�14205426364�0031527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo Bar Baz */ a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_bizarrely_formatted_comments.scss������������0000664�0000000�0000000�00000000050�14205426364�0031712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo Bar Baz */ a: b; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_blockless_directive_without_semicolon.css����0000664�0000000�0000000�00000000014�14205426364�0033424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo "bar"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_blockless_directive_without_semicolon.scss���0000664�0000000�0000000�00000000014�14205426364�0033607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo "bar"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������spec-todo-css_closing_line_comment_end_with_compact_output.css��������������������������������������0000664�0000000�0000000�00000000037�14205426364�0034676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�pyScss-1.4.0/scss/tests/files/from-sassc�������������������������������������������������������������������������������������������������������������������������������/* foo */ bar { baz: bang; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������spec-todo-css_closing_line_comment_end_with_compact_output.scss�������������������������������������0000664�0000000�0000000�00000000035�14205426364�0035057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�pyScss-1.4.0/scss/tests/files/from-sassc�������������������������������������������������������������������������������������������������������������������������������/* foo */ bar { baz: bang; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_directive_with_lots_of_whitespace.css��������0000664�0000000�0000000�00000000014�14205426364�0032524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo "bar"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_directive_with_lots_of_whitespace.scss�������0000664�0000000�0000000�00000000014�14205426364�0032707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo "bar"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_empty_block_directive.css��������������������0000664�0000000�0000000�00000000011�14205426364�0030115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_empty_block_directive.scss�������������������0000664�0000000�0000000�00000000010�14205426364�0030277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo {} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_ms_long_filter_syntax.css��������������������0000664�0000000�0000000�00000000364�14205426364�0030173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_ms_long_filter_syntax.scss�������������������0000664�0000000�0000000�00000000364�14205426364�0030356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_multiple_comments.css������������������������0000664�0000000�0000000�00000000052�14205426364�0027314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo Bar */ /* Baz Bang */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_multiple_comments.scss�����������������������0000664�0000000�0000000�00000000052�14205426364�0027477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo { /* Foo Bar */ /* Baz Bang */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_unicode.css����������������������������������0000664�0000000�0000000�00000000055�14205426364�0025205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "UTF-8"; foo { bar: föö bâr; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-css_unicode.scss���������������������������������0000664�0000000�0000000�00000000055�14205426364�0025370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "UTF-8"; foo { bar: föö bâr; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-directive_interpolation.css����������������������0000664�0000000�0000000�00000000033�14205426364�0027630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo bar12 qux { a: b; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-directive_interpolation.scss���������������������0000664�0000000�0000000�00000000045�14205426364�0030016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$baz: 12; @foo bar#{$baz} qux {a: b} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-empty_content.css��������������������������������0000664�0000000�0000000�00000000016�14205426364�0025574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { b: c; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-empty_content.scss�������������������������������0000664�0000000�0000000�00000000064�14205426364�0025762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo { @content } a { b: c; @include foo {} } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-http_import.css����������������������������������0000664�0000000�0000000�00000000075�14205426364�0025262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import "http://fonts.googleapis.com/css?family=Droid+Sans"; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-http_import.scss���������������������������������0000664�0000000�0000000�00000000074�14205426364�0025444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import "http://fonts.googleapis.com/css?family=Droid+Sans";��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-import_with_interpolation.css��������������������0000664�0000000�0000000�00000000102�14205426364�0030214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url("http://fonts.googleapis.com/css?family=Droid+Sans"); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-import_with_interpolation.scss�������������������0000664�0000000�0000000�00000000142�14205426364�0030403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$family: unquote("Droid+Sans"); @import url("http://fonts.googleapis.com/css?family=#{$family}"); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-media_import.css���������������������������������0000664�0000000�0000000�00000000034�14205426364�0025355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import "./fonts.sass" all; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-media_import.scss��������������������������������0000664�0000000�0000000�00000000033�14205426364�0025537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import "./fonts.sass" all;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-media_interpolation.css��������������������������0000664�0000000�0000000�00000000031�14205426364�0026727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@media bar12 { a: b; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-media_interpolation.scss�������������������������0000664�0000000�0000000�00000000043�14205426364�0027115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$baz: 12; @media bar#{$baz} {a: b} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-mixin_content.css��������������������������������0000664�0000000�0000000�00000000220�14205426364�0025557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.parent { background-color: red; border-color: red; } .parent .child { background-color: yellow; color: blue; border-color: yellow; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-mixin_content.scss�������������������������������0000664�0000000�0000000�00000000357�14205426364�0025755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$color: blue; @mixin context($class, $color: red) { .#{$class} { background-color: $color; @content; border-color: $color; } } @include context(parent) { @include context(child, $color: yellow) { color: $color; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-namespace_properties_with_script_value.css�������0000664�0000000�0000000�00000000071�14205426364�0032730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: bazbang; bar-bip: bop; bar-bing: bop; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-namespace_properties_with_script_value.scss������0000664�0000000�0000000�00000000072�14205426364�0033114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { bar: baz + bang { bip: bop; bing: bop; }} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_interpolation_before_element_name.css���0000664�0000000�0000000�00000000027�14205426364�0033530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo barbaz { a: b; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_interpolation_before_element_name.scss��0000664�0000000�0000000�00000000034�14205426364�0033711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#{"foo" + " bar"}baz {a: b} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_interpolation_in_string.css�������������0000664�0000000�0000000�00000000047�14205426364�0031553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo[val="bar foo bar baz"] { a: b; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_interpolation_in_string.scss������������0000664�0000000�0000000�00000000054�14205426364�0031734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo[val="bar #{"foo" + " bar"} baz"] {a: b} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_only_interpolation.css������������������0000664�0000000�0000000�00000000024�14205426364�0030533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo bar { a: b; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-selector_only_interpolation.scss�����������������0000664�0000000�0000000�00000000031�14205426364�0030714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#{"foo" + " bar"} {a: b} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-trailing_comma_in_selector.css�������������������0000664�0000000�0000000�00000000070�14205426364�0030257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#foo #bar, #baz #boom { a: b; } #bip #bop { c: d; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-trailing_comma_in_selector.scss������������������0000664�0000000�0000000�00000000066�14205426364�0030447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#foo #bar,, ,#baz #boom, {a: b} #bip #bop, ,, {c: d} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-unicode_variables.css����������������������������0000664�0000000�0000000�00000000023�14205426364�0026360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������blat { a: foo; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/spec-todo-unicode_variables.scss���������������������������0000664�0000000�0000000�00000000035�14205426364�0026546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$vär: foo; blat {a: $vär} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-append.css�������������������������������������������0000664�0000000�0000000�00000000041�14205426364�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: c d; bar: list; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-append.scss������������������������������������������0000664�0000000�0000000�00000000106�14205426364�0023603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { $l: append(a b, c d); foo: nth($l, 3); bar: type-of($l); }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-arg_eval.css�����������������������������������������0000664�0000000�0000000�00000000230�14205426364�0023727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: foobar(3 3/4 11, orange); content: 3 2/3 11 orange; content: 3 2/3 11; content: number; content: color; content: 3 3/4 11; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-arg_eval.scss����������������������������������������0000664�0000000�0000000�00000000342�14205426364�0024116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@function foo() { @return 1+2 3/4 5+6; } div { content: foobar(1+2 3/4 5+6, orange); content: append(1+2 2/3 5+6, orange); content: 1+2 2/3 5+6; content: type-of(2/3); content: type-of(orange); content: foo(); }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-arithmetic.css���������������������������������������0000664�0000000�0000000�00000000026�14205426364�0024303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { margin: -5px; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-arithmetic.scss��������������������������������������0000664�0000000�0000000�00000000042�14205426364�0024464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$a: 10px; p { margin: -$a / 2; }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-backrefs_in_selector_groups.css����������������������0000664�0000000�0000000�00000000030�14205426364�0027712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a:c, a d { hey: ho; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-backrefs_in_selector_groups.scss���������������������0000664�0000000�0000000�00000000043�14205426364�0030101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { &:c, & d { hey: ho; } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-classes_and_ids.css����������������������������������0000664�0000000�0000000�00000000147�14205426364�0025274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div.foo { color: red; } div.foo #hux buz { width: auto; } div.foo > .mux { text-align: center; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-classes_and_ids.scss���������������������������������0000664�0000000�0000000�00000000142�14205426364�0025452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div.foo { color: red; #hux buz { width: auto; } > .mux { text-align: center; } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-colors.css�������������������������������������������0000664�0000000�0000000�00000000030�14205426364�0023446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: #ff8000; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-colors.scss������������������������������������������0000664�0000000�0000000�00000000040�14205426364�0023632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: rgb(255, 128, 0); }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-compact.css������������������������������������������0000664�0000000�0000000�00000000141�14205426364�0023576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: compact(yellow, false, false, false, false); content: string; content: 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-compact.scss�����������������������������������������0000664�0000000�0000000�00000000311�14205426364�0023760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: compact(yellow, false, false, false, false); content: type-of(compact(yellow, false, false, false, false)); content: length(type-of(compact(yellow, false, false, false, false))); }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-comparable.css���������������������������������������0000664�0000000�0000000�00000000313�14205426364�0024256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.color-functions { hue: 0deg; hue-type: number; hue-unit: "deg"; hue-comparable: true; x: true; x: true; x: true; y: number; y: number; z: 50%; z: number; z: number; z: true; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-comparable.scss��������������������������������������0000664�0000000�0000000�00000000630�14205426364�0024443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.color-functions { $color: red; hue: hue($color); hue-type: type-of(hue($color)); hue-unit: unit(hue($color)); hue-comparable: comparable(hue($color), hue($color)); x: comparable(10fu, 10fu); x: comparable(10px, 10px); x: comparable(10, 10); y: type-of(10px); y: type-of(10deg); z: lightness(red); z: type-of(lightness(red)); z: type-of(50%); z: comparable(lightness(red), 50%); }��������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-cons-up.css������������������������������������������0000664�0000000�0000000�00000000542�14205426364�0023541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"]; content: hello; content: 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-cons-up.scss�����������������������������������������0000664�0000000�0000000�00000001525�14205426364�0023726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$inputs-list: 'input[type="email"]', 'input[type="number"]', 'input[type="password"]', 'input[type="search"]', 'input[type="tel"]', 'input[type="text"]', 'input[type="url"]', // Webkit & Gecko may change the display of these in the future 'input[type="color"]', 'input[type="date"]', 'input[type="datetime"]', 'input[type="datetime-local"]', 'input[type="month"]', 'input[type="time"]', 'input[type="week"]'; $unquoted-inputs-list: (); @each $input-type in $inputs-list { $unquoted-inputs-list: append($unquoted-inputs-list, unquote($input-type), comma); } div { content: $unquoted-inputs-list; content: append((), hello); content: length(()); }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-directives.css���������������������������������������0000664�0000000�0000000�00000000131�14205426364�0024310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo div foo(bar) { huz: buz; } div { hey: ho; } 1+2 type-of("hello") { hey: ho; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-directives.scss��������������������������������������0000664�0000000�0000000�00000000217�14205426364�0024500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@foo div foo(bar) { huz: buz; } div { hey: ho; } // @boo 1+2 type-of("hello") div:nth-of-type(2n+1); 1+2 type-of("hello") { hey: ho; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-each_in_function.css���������������������������������0000664�0000000�0000000�00000000253�14205426364�0025447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: 0; b: global each 50% 50% type1 number type2 number each cover circle type1 string type2 string each red blue type1 color type2 color; c: a, b, color, d; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-each_in_function.scss��������������������������������0000664�0000000�0000000�00000000564�14205426364�0025637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$GLOBAL: global; @function foo($g1, $g2, $g3) { @each $value in $g1, $g2, $g3 { $GLOBAL: $GLOBAL each $value; $GLOBAL: $GLOBAL type1 type-of(nth($value, 1)); $GLOBAL: $GLOBAL type2 type-of(nth($value, 2)); } @return 0; } div { a: foo(50% 50%, cover circle, red blue); b: $GLOBAL; $colors: red green blue; c: a, b, type-of(nth($colors, 2)), d; }��������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-eq.css�����������������������������������������������0000664�0000000�0000000�00000000124�14205426364�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: true; foo: true; foo: a b false b c; foo: false; foo: false; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-eq.scss����������������������������������������������0000664�0000000�0000000�00000000263�14205426364�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: center == "center"; foo: (a b c) == (a b c); foo: a b c == a b c; foo: compact(1 2 false 4) == compact(1 2 4); foo: compact(1 2 4) == compact(1 2 4, false); }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-extend.css�������������������������������������������0000664�0000000�0000000�00000000102�14205426364�0023434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#a, #b { color: black; } #a > div, #b > div { color: white; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-extend.scss������������������������������������������0000664�0000000�0000000�00000000114�14205426364�0023622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#a { color: black; > div { color: white; } } #b { @extend #a; }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-for.css����������������������������������������������0000664�0000000�0000000�00000000455�14205426364�0022746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: 3 thing 1; } div { content: 3 thing 2; } div { content: 3 thing 3; } div { content: 3 thing 4; } div { content: 3 thing 5; } div { content: 3 thing 6; } div { content: 3 thing 7; } div { content: 3 thing 8; } div { content: 3 thing 9; } div { content: 3 thing 10; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-for.scss���������������������������������������������0000664�0000000�0000000�00000000164�14205426364�0023126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$limit: 10; @for $x from 1 through $limit { $limit: 4; div { $limit: 3; content: $limit thing $x; } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-huge.css���������������������������������������������0000664�0000000�0000000�00003236000�14205426364�0023110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: red; width: 100%; } div div { color: red; width: 100%; } div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p empty not-empty div { color: red; width: 100%; } div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p empty not-empty div div { color: red; width: 100%; } div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div { color: red; width: 100%; } div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div { color: red; width: 100%; } div p a div div { color: red; width: 100%; } div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div div p empty not-empty div { color: red; width: 100%; } div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div div p empty not-empty div div { color: red; width: 100%; } div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div div div { color: red; width: 100%; } div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div p empty not-empty div { color: red; width: 100%; } div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div p empty not-empty div div { color: red; width: 100%; } div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p a div div { color: red; width: 100%; } div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p empty not-empty { background: lightgray; border: 1px solid blue; } div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p empty not-empty div { color: red; width: 100%; } div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div p empty not-empty div div { color: red; width: 100%; } div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div { color: red; width: 100%; } div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div { color: red; width: 100%; } div div p div div { color: red; width: 100%; } div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div { color: red; width: 100%; } div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div { color: red; width: 100%; } div div p div p a div div { color: red; width: 100%; } div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div div div { color: red; width: 100%; } div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div p empty not-empty div { color: red; width: 100%; } div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p a div div { color: red; width: 100%; } div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p empty not-empty div { color: red; width: 100%; } div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div p empty not-empty div div { color: red; width: 100%; } div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div { color: red; width: 100%; } div div p div div div { color: red; width: 100%; } div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p empty not-empty div { color: red; width: 100%; } div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div div { color: red; width: 100%; } div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div { color: red; width: 100%; } div div p div div p a div div { color: red; width: 100%; } div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div div div { color: red; width: 100%; } div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p a div div { color: red; width: 100%; } div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div { color: red; width: 100%; } div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div { color: red; width: 100%; } div div p div div div p div div { color: red; width: 100%; } div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div div div { color: red; width: 100%; } div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div { color: red; width: 100%; } div div p div div div p div p a div div { color: red; width: 100%; } div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div div div { color: red; width: 100%; } div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p a div div { color: red; width: 100%; } div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div div p div div { color: red; width: 100%; } div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div p div div { color: red; width: 100%; } div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div { color: red; width: 100%; } div div div div { color: red; width: 100%; } div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p empty not-empty div { color: red; width: 100%; } div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div div { color: red; width: 100%; } div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div { color: red; width: 100%; } div div div p a div div { color: red; width: 100%; } div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div div p empty not-empty div { color: red; width: 100%; } div div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div div div { color: red; width: 100%; } div div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div p empty not-empty div { color: red; width: 100%; } div div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div p empty not-empty div div { color: red; width: 100%; } div div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p a div div { color: red; width: 100%; } div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p empty not-empty div { color: red; width: 100%; } div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div p empty not-empty div div { color: red; width: 100%; } div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div { color: red; width: 100%; } div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div { color: red; width: 100%; } div div div div p div div { color: red; width: 100%; } div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div { color: red; width: 100%; } div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div { color: red; width: 100%; } div div div div p div p a div div { color: red; width: 100%; } div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div div div { color: red; width: 100%; } div div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p a div div { color: red; width: 100%; } div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div { color: red; width: 100%; } div div div div p div div div { color: red; width: 100%; } div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div div { color: red; width: 100%; } div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div { color: red; width: 100%; } div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div { color: red; width: 100%; } div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p a div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div p empty not-empty div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div p empty not-empty div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div div p div div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div div p div div div div div p div div div div p div div { color: red; width: 100%; } div div div div p div div div p div div div div div p div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div div p div div div div div p div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div div p div div div div div p div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } div div div div p div div { color: red; width: 100%; } div div div div p div div p { margin: a b c; padding: 10px 5px; foo: "hello"; } div div div div p div div p a { display: inline-block; padding: 5px; color: goodbye; } div div div div p div div p empty not-empty { background: lightgray; border: 1px solid blue; } div div div div p div div p empty not-empty span { display: block; -webkit-box-sizing: border-box; } pyScss-1.4.0/scss/tests/files/from-sassc/tests-huge.scss-disabled�����������������������������������0000664�0000000�0000000�00007104777�14205426364�0025063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } $blah: a b c; $bloo: "hello"; div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } } } } } } } } } } } div { color: red; width: 100%; p { margin: $blah; $blee: goodbye; padding: 10px 5px; a { display: inline-block; padding: 5px; color: $blee; } foo: $bloo; empty { not-empty { background: lightgray; border: 1px solid blue; span { display: block; -webkit-box-sizing: border-box; } } } } } } } } } } }�pyScss-1.4.0/scss/tests/files/from-sassc/tests-ie-hex-str.css���������������������������������������0000664�0000000�0000000�00000000071�14205426364�0024137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: #FFFF0000bar; color: "foo #FFA52A2A"; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-ie-hex-str.scss��������������������������������������0000664�0000000�0000000�00000000116�14205426364�0024322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: ie-hex-str(red) + "bar"; color: "foo " + ie-hex-str(brown); }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if.css�����������������������������������������������0000664�0000000�0000000�00000000123�14205426364�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { background: gray; } div { background: blue; } div { background: red; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if.scss����������������������������������������������0000664�0000000�0000000�00000000655�14205426364�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: a, b, 1+2; @if type-of(nth($x, 3)) == number { div { background: gray; } } @if type-of(nth($x, 2)) == number { div { background: gray; } } @else if type-of(nth($x, 2)) == string { div { background: blue; } } @if type-of(nth($x, 2)) == number { div { background: gray; } } @else if type-of(nth($x, 2)) == color { div { background: blue; } } @else { div { background: red; } }�����������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_function.css�����������������������������������0000664�0000000�0000000�00000000130�14205426364�0025137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: foo; content: bar; content: foo; content: bar; content: bar; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_function.scss����������������������������������0000664�0000000�0000000�00000000374�14205426364�0025334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: true; @function foobar() { @if $x { $x: false; @return foo; } @else { $x: true; @return bar; } } div { content: foobar(); content: foobar(); content: foobar(); content: foobar(); $x: false; content: foobar(); }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_mixin.css��������������������������������������0000664�0000000�0000000�00000000110�14205426364�0024434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: foo; content: bar; content: foo; content: foo; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_mixin.scss�������������������������������������0000664�0000000�0000000�00000000345�14205426364�0024631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: true; @mixin foobar() { @if $x { $x: false; content: foo; } @else { $x: true; content: bar; } } div { @include foobar(); @include foobar(); @include foobar(); $x: true; @include foobar(); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_propset.css������������������������������������0000664�0000000�0000000�00000000104�14205426364�0025007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { prop-a: "hello"; prop-b: "goodbye"; prop-c: "badbye"; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-if_in_propset.scss�����������������������������������0000664�0000000�0000000�00000000137�14205426364�0025200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { prop: { a: "hello"; b: "goodbye"; @if true { c: "badbye"; } } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-index.css��������������������������������������������0000664�0000000�0000000�00000000052�14205426364�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: 2; bar: false; baz: 3; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-index.scss�������������������������������������������0000664�0000000�0000000�00000000230�14205426364�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: index(hello goodbye futz, goodbye); bar: index(hello goodbye futz, badbye); baz: index((hello world) (my name) (is aaron), is aaron); }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-inheritance.css��������������������������������������0000664�0000000�0000000�00000001565�14205426364�0024454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������main content a box, main content a supplemtal text b sidebar, supplemtal text b main content a sidebar { border: solid; } supplemtal text b sidebar { background: gray; } /********/ mammal, human { blood: warm; } mammal.furry.quadruped, human.furry.quadruped, dog.furry { fur: lots; legs: 4; } human { says: "hello"; } dog { says: "woof"; } /********/ region.country inhabitant.mouse, region.country citizen.mouse, region.country tax-payer.mouse { eats: cheddar; } region.city inhabitant.mouse, region.city region.country citizen.mouse, region.country region.city citizen.mouse, region.city tax-payer.mouse { eats: camembert; } region.country citizen { ssn: 123 45 6789; } region tax-payer { rate: 17%; } /********/ foo, .a.bar, hux { color: red; } .a.bar { background: gray; } /********/ foo, .a.bar, hux { color: red; } hux, .bar.a { background: blue; } �������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-inheritance.scss�������������������������������������0000664�0000000�0000000�00000001335�14205426364�0024632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������main content a box { border: solid; } supplemtal text b sidebar { @extend box; background: gray; } /********/ mammal { blood: warm; } mammal.furry.quadruped { fur: lots; legs: 4; } human { @extend mammal; says: "hello"; } dog { says: "woof"; @extend mammal.quadruped; } /********/ region.country { inhabitant.mouse { eats: cheddar; } } region.city { inhabitant.mouse { eats: camembert; } } region.country citizen { @extend inhabitant; ssn: 123 45 6789; } region tax-payer { @extend inhabitant; rate: 17%; } /********/ foo { color: red; } .a.bar { @extend fo#{o}; background: gray; } /********/ foo { color: red; } hux, .bar.a { @extend foo; background: blue; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-lang.css���������������������������������������������0000664�0000000�0000000�00000002625�14205426364�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1:lang(as), h1:lang(bn), h1:lang(gu), h1:lang(hi), h1:lang(kn), h1:lang(ml), h1:lang(mr), h1:lang(or), h1:lang(pa), h1:lang(sa), h1:lang(ta), h1:lang(te) { line-height: 1.5em !important; } h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as), h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn), h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu), h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi), h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn), h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml), h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr), h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or), h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa), h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa), h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta), h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) { line-height: 1.2em; } ol:lang(bcc) li, ol:lang(bqi) li, ol:lang(fa) li, ol:lang(glk) li, ol:lang(kk-arab) li, ol:lang(mzn) li { list-style-type: -moz-persian; list-style-type: persian; } ol:lang(ckb) li { list-style-type: -moz-arabic-indic; list-style-type: arabic-indic; } ol:lang(as) li, ol:lang(bn) li { list-style-type: -moz-bengali; list-style-type: bengali; } ol:lang(or) li { list-style-type: -moz-oriya; list-style-type: oriya; } �����������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-lang.scss��������������������������������������������0000664�0000000�0000000�00000002453�14205426364�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1:lang(as),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ml),h1:lang(mr),h1:lang(or),h1:lang(pa),h1:lang(sa),h1:lang(ta),h1:lang(te) { line-height:1.5em !important } h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te) { line-height:1.2em } ol:lang(bcc) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(mzn) li { list-style-type:-moz-persian;list-style-type:persian } ol:lang(ckb) li { list-style-type:-moz-arabic-indic;list-style-type:arabic-indic } ol:lang(as) li,ol:lang(bn) li{ list-style-type:-moz-bengali;list-style-type:bengali } ol:lang(or) li { list-style-type:-moz-oriya;list-style-type:oriya }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-list_evaluation.css����������������������������������0000664�0000000�0000000�00000000325�14205426364�0025356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: red 2/3 blue; content: 2/3; content: number; content: color; /**** 4 ****/ content: 0.5 3/40.83333 7/8; /**** ****/ foo: 1; bar: 2; foo: 2; bar: 3; foo: 0.75; bar: 1.75; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-list_evaluation.scss���������������������������������0000664�0000000�0000000�00000000431�14205426364�0025537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { $things: red 2/3 blue; content: $things; content: nth($things, 2); content: type-of(nth($things, 2)); content: type-of(nth($things, 3)); /**** #{2+2} ****/ content: (1/2 3/4) + (5/6 7/8); /**** ****/ @each $x in 1 2 3/4 { foo: $x; bar: $x + 1; } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-lists.css��������������������������������������������0000664�0000000�0000000�00000000306�14205426364�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: false; content: true; content: var 1/2 3 4; content: lit 0.5 3 4; content: true; /***/ content: 3; content: number; content: 1/2; content: 1/2; content: true; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-lists.scss�������������������������������������������0000664�0000000�0000000�00000000535�14205426364�0023500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { $list: append(1/2 3, 4); content: (1 2 3) == (1, 2, 3); content: (1 2 3) == (1 2 3); content: var $list; content: lit (1/2 3 4); content: (1/2 3 4) == $list; /***/ content: length($list); content: type-of(nth($list, 1)); content: nth($list, 1); content: nth(1/2 3 4, 1); $a: 1 2 3; $b: (1 2 3); content: $a == $b; }�������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-long-selector.css������������������������������������0000664�0000000�0000000�00000003602�14205426364�0024732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, ab, br, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, su, b, sup, var, b, u, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, tab, le, caption, tbody, tfoot, thead, tr, th, td { border: 0; font-size: 100%; font: inherit; margin: 0; padding: 0; vertical-align: baseline; } html hey, html ho, html hoo, body hey, body ho, body hoo, div hey, div ho, div hoo, span hey, span ho, span hoo, iframe hey, iframe ho, iframe hoo, h1 hey, h1 ho, h1 hoo, h2 hey, h2 ho, h2 hoo, h3 hey, h3 ho, h3 hoo, h4 hey, h4 ho, h4 hoo, h5 hey, h5 ho, h5 hoo, h6 hey, h6 ho, h6 hoo, p hey, p ho, p hoo, blockquote hey, blockquote ho, blockquote hoo, pre hey, pre ho, pre hoo, a hey, a ho, a hoo, ab hey, ab ho, ab hoo, br hey, br ho, br hoo, address hey, address ho, address hoo, cite hey, cite ho, cite hoo, code hey, code ho, code hoo, del hey, del ho, del hoo, dfn hey, dfn ho, dfn hoo, em hey, em ho, em hoo, img hey, img ho, img hoo, ins hey, ins ho, ins hoo, kbd hey, kbd ho, kbd hoo, q hey, q ho, q hoo, samp hey, samp ho, samp hoo, small hey, small ho, small hoo, strong hey, strong ho, strong hoo, su hey, su ho, su hoo, b hey, b ho, b hoo, sup hey, sup ho, sup hoo, var hey, var ho, var hoo, b hey, b ho, b hoo, u hey, u ho, u hoo, i hey, i ho, i hoo, dl hey, dl ho, dl hoo, dt hey, dt ho, dt hoo, dd hey, dd ho, dd hoo, ol hey, ol ho, ol hoo, ul hey, ul ho, ul hoo, li hey, li ho, li hoo, fieldset hey, fieldset ho, fieldset hoo, form hey, form ho, form hoo, label hey, label ho, label hoo, legend hey, legend ho, legend hoo, tab hey, tab ho, tab hoo, le hey, le ho, le hoo, caption hey, caption ho, caption hoo, tbody hey, tbody ho, tbody hoo, tfoot hey, tfoot ho, tfoot hoo, thead hey, thead ho, thead hoo, tr hey, tr ho, tr hoo, th hey, th ho, th hoo, td hey, td ho, td hoo { blah: bloo; blee: bleh; } ������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-long-selector.scss�����������������������������������0000664�0000000�0000000�00000000704�14205426364�0025115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, ab, br, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, su, b, sup, var, b, u, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, tab, le, caption, tbody, tfoot, thead, tr, th, td { border: 0; font-size: 100%; font: inherit; margin: 0; padding: 0; vertical-align: baseline; hey, ho, hoo { blah: bloo; blee: bleh; } } ������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin-content-with-no-block.css����������������������0000664�0000000�0000000�00000000051�14205426364�0027417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div.a .foo { color: red; hey: now; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin-content-with-no-block.scss���������������������0000664�0000000�0000000�00000000151�14205426364�0027603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo { .foo { color: red; @content; } } div.a { @include foo() { hey: now; } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin-content.css������������������������������������0000664�0000000�0000000�00000000704�14205426364�0024751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������span { color: green; } span div { color: red; background: blue; width: 80%; } @media fudge { span div p { font-weight: bold; font-size: 1.2em; } span div p a { text-decoration: underline; } } span div form { color: orange; } @media fudge { span div form p { font-weight: bold; font-size: 1.2em; } span div form p a { text-decoration: underline; } } * html #logo { background-image: url(/logo.gif); } ������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin-content.scss�����������������������������������0000664�0000000�0000000�00000001110�14205426364�0025124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo() { $size: 80%; div { color: red; @content; background: blue; width: $size; @include bar() { color: orange; @content; } } } @mixin bar() { form { @content; } } span { $size: 1.2em; color: green; @include foo() { @media fudge { p { font-weight: bold; font-size: $size; a { text-decoration: underline; } } } } } @mixin apply-to-ie6-only { * html { @content; } } @include apply-to-ie6-only { #logo { background-image: url(/logo.gif); } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin.css��������������������������������������������0000664�0000000�0000000�00000000465�14205426364�0023305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { background-image: image-url("test.png"); fudge: walnut; } @media (-webkit-min-device-pixel-ratio: 2), (-moz-min-device-pixel-ratio: 2) { div { background-image: image-url("test@2x.png"); -webkit-background-size: 100px 300px; } } span { blah: "foo bar"; bleh: image-url("foo bar"); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixin.scss�������������������������������������������0000664�0000000�0000000�00000001020�14205426364�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// @charset "UTF-8"; @mixin background-image-retina($file, $type, $width, $height) { background-image: unquote(image-url("#{$file}.#{$type}")); @media (-webkit-min-device-pixel-ratio: 2), (-moz-min-device-pixel-ratio: 2) { & { background-image: image-url("#{$file}@2x.#{$type}"); -webkit-background-size: $width $height; } } } $x: foo; $y: bar; div { @include background-image-retina(test, png, 100px, 300px); fudge: walnut; } span { blah: "#{$x} #{$y}"; bleh: image-url("#{$x} #{$y}"); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixins_and_media_queries.css�������������������������0000664�0000000�0000000�00000000343�14205426364�0027201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@media screen and (orientation: landscape) { span { background: blue; } /* fudge */ /* budge */ div { color: red; } } @media screen and (orientation: landscape) { /* crash */ p { width: 100px; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-mixins_and_media_queries.scss������������������������0000664�0000000�0000000�00000000446�14205426364�0027370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@media screen and (orientation:landscape) { span { background: blue; } /* fudge */ // @include foo; /* budge */ div { color: red; } } @mixin testComments { /* crash */ p { width: 100px; } } @media screen and (orientation:landscape) { @include testComments; }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-multiline_var.css������������������������������������0000664�0000000�0000000�00000000034�14205426364�0025023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { a: 3; c: a b c; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-multiline_var.scss�����������������������������������0000664�0000000�0000000�00000000163�14205426364�0025211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������foo { $var1: 1 + 2; $var2: true and false; $var3: a b c; a: $var1; // b: $var2; c: $var3; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-negation.css�����������������������������������������0000664�0000000�0000000�00000000037�14205426364�0023760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.asdf { left: -17.33333px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-negation.scss����������������������������������������0000664�0000000�0000000�00000000056�14205426364�0024144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.asdf { $bwidth: 52px; left: -$bwidth/3; }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-odd-selectors.css������������������������������������0000664�0000000�0000000�00000000255�14205426364�0024725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"fudge" 123 { color: red; } "fudge" 123 + 456 "mudge" #f oo [hey] { font-weight: bold; } div span { color: red; } div span + p a { font-weight: bold; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-odd-selectors.scss�����������������������������������0000664�0000000�0000000�00000000224�14205426364�0025104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"fudge" 123 { color: red; + 456 "mudge"#foo[hey] { font-weight: bold; } } div span { color: red; + p a { font-weight: bold; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-percentages.css��������������������������������������0000664�0000000�0000000�00000000221�14205426364�0024447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { width: 30%; height: -10%; width: 20%; width: 20%; height: 0%; height: 0%; blah: 5; flah: 900%; grah: 900%; nyah: 5%; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-percentages.scss�������������������������������������0000664�0000000�0000000�00000000337�14205426364�0024642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { width: 10% + 20%; height: 10% - 20%; width: 10% + 10; width: 10 + 10%; height: 10% - 10; height: 10 - 10%; blah: (20% / 4%); flah: 12 * 75%; grah: 75% * 12; // hwah: (24 / 8%); nyah: (35% / 7); }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-precision.css����������������������������������������0000664�0000000�0000000�00000000113�14205426364�0024142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: 6.66667; b: 2.5; c: 3; d: -6.66667; e: -2.5; f: -3; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-precision.scss���������������������������������������0000664�0000000�0000000�00000000124�14205426364�0024327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: (20/3); b: (5/2); c: (9/3); d: (20/-3); e: (-5/2); f: -(9/3); }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-propsets.css�����������������������������������������0000664�0000000�0000000�00000000216�14205426364�0024032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { background-image: url(foo.png); background-position: 50%; } span { background-image: url(bar.png); background-position: 100%; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-propsets.scss����������������������������������������0000664�0000000�0000000�00000000264�14205426364�0024220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: ground; $y: e; $z: it; div { back#{$x}: { imag#{$y}: url(foo.png); pos#{$z}ion: 50%; } } span { background: { image: url(bar.png); position: 100%; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-scale.css��������������������������������������������0000664�0000000�0000000�00000000141�14205426364�0023237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: #c40000; color: #d4f7d4; color: #c85ae5; color: #c8cdd0; blah: #d4f7d4; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-scale.scss�������������������������������������������0000664�0000000�0000000�00000000404�14205426364�0023424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { color: scale-color(red, $red: -23%); color: scale-color(hsl(120, 70, 80), $lightness: 50%); color: scale-color(rgb(200, 150, 170), $green: -40%, $blue: 70%); color: scale-color(hsl(200, 70, 80), $saturation: -90%, $alpha: 10%); blah: #d4f7d4; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-selectors.css����������������������������������������0000664�0000000�0000000�00000000300�14205426364�0024150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div span, div p, div span { color: red; } div a.foo.bar.foo { color: green; } div:nth(-3) { color: blue; } @-webkit-keyframes { from { left: 0px; } to { left: 200px; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-selectors.scss���������������������������������������0000664�0000000�0000000�00000000310�14205426364�0024334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { span, p, span { color: red; } a.foo.bar.foo { color: green; } &:nth(-3) { color: blue; } } @-webkit-keyframes { from { left: 0px; } to { left: 200px; } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-simple-inheritance.css�������������������������������0000664�0000000�0000000�00000000465�14205426364�0025741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������earth mammal, earth dog, earth cat, earth horse, earth naysayer, earth bird { blood: warm; } earth mammal, earth dog, earth cat, earth horse, earth naysayer { produces-milk: true; } dog { says: "Woof!"; } cat { says: "Meow."; } horse, naysayer { says: "Nay."; } [hey], ho { a: b; } ho { c: d; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-simple-inheritance.scss������������������������������0000664�0000000�0000000�00000000545�14205426364�0026123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������earth { mammal, bird { blood: warm; } } earth { mammal { produces-milk: true; } } @mixin mammal-says($message) { @extend mammal; says: $message; } dog { @include mammal-says("Woof!"); } cat { @include mammal-says("Meow."); } horse, naysayer { @include mammal-says("Nay."); } [hey] { a: b; } ho { @extend [hey]; c: d; }�����������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-simple_lists.css�������������������������������������0000664�0000000�0000000�00000000074�14205426364�0024664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { hey: a, b, c, d; ho: a b c d; ha: a, b, c, d; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-simple_lists.scss������������������������������������0000664�0000000�0000000�00000000106�14205426364�0025043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { hey: a, b, c, d; ho: a b c d; ha: unquote("a, b, c, d"); }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-strings.css������������������������������������������0000664�0000000�0000000�00000000210�14205426364�0023636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: blang1; content: 1blang; content: "blang1"; content: "1blang"; content: barfoo; content: "quotedunquoted"; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-strings.scss�����������������������������������������0000664�0000000�0000000�00000000233�14205426364�0024026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: blang + 1; content: 1 + blang; content: "blang" + 1; content: 1 + "blang"; content: bar + "foo"; content: "quoted" + unquoted; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-test.css���������������������������������������������0000664�0000000�0000000�00000002164�14205426364�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { noo: false; poo: not 3; doo: false; goo: false; zoo: false2; roo: false; hoo: not not not 3; } span { a: #641400; b: #aabbcc; c: compact(hello, my, false, name, is, false, aaron, false, false); d: 1, 2, 3, 4, 5, 6; e: a b c d e f; f: #102005; g: #782005; h: #ffc499; h: rgba(204, 86, 0, 0.8); h: rgba(204, 85, 0, 0.8); i: rgba(204, 85, 0, 0.8); foo: url("http://blah/flah/grah"); foo: url(http://foo/bar/buzz.css); foo: url(hey4ho.css); foo: url("blah.css"); bug: compact(false 1 2 false 3 4 5 false); pug: compact(false, 1, 2, false, 3, 4, 5, false); mug: compact(flug, false, blug, false, krug, false); } div { flug: url(bug.mug); krug: 2; blug: c; flig: true true true true; flug: true false; flib: false false; glib: false true false false; trib: yellow; trub: here we are; } @media (-webkit-min-device-pixel-ratio: 2), (-moz-min-device-pixel-ratio: 2) { div { background-image: url(fudge); -webkit-background-size: 10px 10px; } } @media foo { span div { blah: blah; } } gudge { fudge: "20%"; mudge: 1blang; } h1:lang(en) { foo: bar; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-test.scss��������������������������������������������0000664�0000000�0000000�00000003423�14205426364�0023320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: 3; div { noo: not $x; poo: not 3; doo: not($x); goo: not(3); zoo: not 1 + 2; roo: not not not $x; hoo: not not not 3; } @mixin foo($x-1, $x-2) { goo: $x-1; poo: $x-2; } $hux: "blah.css"; span { a: rgba(100, 20, 0, 1); b: rgba(#abc, 1); c: compact(hello, my, false, name, is, false, aaron, false, false); d: join(1 2 3, 4 5 6, comma); e: join(a b c, d e f); f: change-color(#102030, $blue: 5); g: change-color(#102030, $red: 120, $blue: 5); h: hsl(25, 100%, 80%); h: change-color(#ffc499, $alpha: 0.8, $lightness: 40%); h: change-color(hsl(25, 100%, 80%), $alpha: 0.8, $lightness: 40%); i: hsla(25, 100%, 40%, 0.8); foo: url("http://blah/flah/grah"); foo: url(http://foo/bar/buzz.css); foo: url(hey#{1+3}ho.css); foo: url($hux); bug: compact(false 1 2 false 3 4 5 false); pug: compact(false, 1, 2, false, 3, 4, 5, false); mug: compact((flug, false, blug, false, krug, false)); } @mixin bg($file) { background: url($file) no-repeat; } div { flug: url(bug.mug); krug: nth(1 2 3, 2px); blug: nth(a b c d, 3); flig: comparable(34, 22px) comparable(1%, 3) comparable(2, 1) comparable(4cm, 1in); flug: comparable(1px, 2.3in) comparable(1%, 2pt); flib: comparable(3ex, 2px) comparable(3em, 2cm); glib: not(fudge) not(false) not(0) not(red + green); trib: if(red + green, yellow, not taken); trub: if(not(fudge), not taken, here we are); } $width: 10px; $height: 10px; @media (-webkit-min-device-pixel-ratio: 2), (-moz-min-device-pixel-ratio: 2) { div { background-image: url(fudge); -webkit-background-size: $width $height; } } span { @media foo { div { blah: blah; } @media bar { p { blah: bloo; } } } } gudge { fudge: 20 + "%"; mudge: 1 + blang; } h1:lang(en) { foo: bar; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-unary_ops.css����������������������������������������0000664�0000000�0000000�00000000105�14205426364�0024167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: -10; b: 0px; c: +10; d: 0px; e: -20%; f: 20%; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-unary_ops.scss���������������������������������������0000664�0000000�0000000�00000000140�14205426364�0024351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: 20%; div { a: -10; b: -10px + 10px; c: +10; d: +10px + -10px; e: -$x; f: +$x; }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-url.css����������������������������������������������0000664�0000000�0000000�00000006066�14205426364�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { foo: url(bloo/blah.css); bar: url(http://foo/bar/hux.css); foo: url(fudgepop.css); bar: url("http://fudgepop/styles.css"); hux: url(http://box_123////fudgepop.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-1.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-2.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-3.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-4.css); hux: url(http://box_123////fudgepop.css); foo: url(http://blah.com/bar-5.css); gloo: url("hey3.css"); floo: url(hadoop-444.css); flum: image-url("fudge.png", hux); /*****/ background: url("image.png"); mudge: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACeElEQVR42nySy29McRTHP/fOnTvT6bQNrdHKMGGhFkTSELGxwoJY8Q9YWFhYEUJsRSKCsJWikjYSJBIbinpVPJLSRlEkKK2WTnXmvl+/Y4F4tPVJPqtvzjcnJ0cTEQxdY/miFH6gcAJpaWrQl86t05rR9axSKD8UZ6KqJscm5bMdyDDgAYgIBoCORm2G1u0b6w8unJ/bmDG1QtpUmIYiZ8Zk0zEpYmW76tujV9J3/Ep04v0XdR2IDYAdWxYt27Sa8/l8btWIlaYSupgqpNaMUYbC0DUa8qKXWpLGNSvZEETpZO/Z4B5gGQCRMio1xdVfioUIa3AQJ/ZARWhJgkQJKq3wfJ3RwETGhRtPgx7ABtBEhCVNBqViU2tn5+5bLfXmgurIYwJrGFEJmqZh2T4jo2X0YIreZ+7dfeejrcCEiKADfCon3O4fHzp25Nx+8nnqF65lXnEphQUtNBYKaKkMcRgxVY29093JUWCCn+gAORMaTLh0dbCjo/1KO3X1kC6BGIR+QLVioSc+F+9HnW/G1DX+QAcw0j8c/QaHj3UfeN0/MMicEmSL+J5P6DkMDUcfLvZGJ4FwWoHl/lAEXo344zv3dO3ynXJIpg7XdnBtj46bwSnblwH+QQdQ8lsNeNg32nOm/fIh3CGS0OXOQHCv90XYwUyICM2NNX85f26WUnOu5smFzX0vu9qktZjeNtusAbB+XdvfAWDZnjeurX2XST1Y8X6s7zmzYABUrHBaYNshYRC4k340FcZU/1vg2JVpgeP4uJXypHK8soD134In/W+mb+AJvffvvC022It/ve1MaCJCXU6f4UCQy1CbNVONH7/Gw7Md8fsAtddMUh5fveYAAAAASUVORK5CYII=); nudge: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGElEQVQYV2N4DwX/oYBhgARgDJjEAAkAAEC99wFuu0VFAAAAAElFTkSuQmCC); pudge: url(http://wiki.jbussdieker.name/skins/common/images/Checker-16x16.png?2012-05-02T13:40:00Z); } p:after { content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACeElEQVR42nySy29McRTHP/fOnTvT6bQNrdHKMGGhFkTSELGxwoJY8Q9YWFhYEUJsRSKCsJWikjYSJBIbinpVPJLSRlEkKK2WTnXmvl+/Y4F4tPVJPqtvzjcnJ0cTEQxdY/miFH6gcAJpaWrQl86t05rR9axSKD8UZ6KqJscm5bMdyDDgAYgIBoCORm2G1u0b6w8unJ/bmDG1QtpUmIYiZ8Zk0zEpYmW76tujV9J3/Ep04v0XdR2IDYAdWxYt27Sa8/l8btWIlaYSupgqpNaMUYbC0DUa8qKXWpLGNSvZEETpZO/Z4B5gGQCRMio1xdVfioUIa3AQJ/ZARWhJgkQJKq3wfJ3RwETGhRtPgx7ABtBEhCVNBqViU2tn5+5bLfXmgurIYwJrGFEJmqZh2T4jo2X0YIreZ+7dfeejrcCEiKADfCon3O4fHzp25Nx+8nnqF65lXnEphQUtNBYKaKkMcRgxVY29093JUWCCn+gAORMaTLh0dbCjo/1KO3X1kC6BGIR+QLVioSc+F+9HnW/G1DX+QAcw0j8c/QaHj3UfeN0/MMicEmSL+J5P6DkMDUcfLvZGJ4FwWoHl/lAEXo344zv3dO3ynXJIpg7XdnBtj46bwSnblwH+QQdQ8lsNeNg32nOm/fIh3CGS0OXOQHCv90XYwUyICM2NNX85f26WUnOu5smFzX0vu9qktZjeNtusAbB+XdvfAWDZnjeurX2XST1Y8X6s7zmzYABUrHBaYNshYRC4k340FcZU/1vg2JVpgeP4uJXypHK8soD134In/W+mb+AJvffvvC022It/ve1MaCJCXU6f4UCQy1CbNVONH7/Gw7Md8fsAtddMUh5fveYAAAAASUVORK5CYII=); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-url.scss���������������������������������������������0000664�0000000�0000000�00000005576�14205426364�0023156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: pop; $y: 123; div { foo: url(bloo/blah.css); bar: url(http://foo/bar/hux.css); foo: url(fudge#{$x}.css); bar: url("http://fudge#{$x}/styles.css"); hux: url(http://box_#{$y}////fudge#{$x}.css); @each $i in (1 2 3 4 5) { hux: url(http://box_#{$y}////fudge#{$x}.css); foo: url(http://blah.com/bar-#{$i}.css); } gloo: url("hey#{1+2}.css"); floo: url(hadoop-#{$y+321}.css); flum: image-url("fudge.png", hux); /*****/ $bg: "image.png"; background: url("#{$bg}"); //gudge: url(type-of(hello) + length(a b c)); mudge: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACeElEQVR42nySy29McRTHP/fOnTvT6bQNrdHKMGGhFkTSELGxwoJY8Q9YWFhYEUJsRSKCsJWikjYSJBIbinpVPJLSRlEkKK2WTnXmvl+/Y4F4tPVJPqtvzjcnJ0cTEQxdY/miFH6gcAJpaWrQl86t05rR9axSKD8UZ6KqJscm5bMdyDDgAYgIBoCORm2G1u0b6w8unJ/bmDG1QtpUmIYiZ8Zk0zEpYmW76tujV9J3/Ep04v0XdR2IDYAdWxYt27Sa8/l8btWIlaYSupgqpNaMUYbC0DUa8qKXWpLGNSvZEETpZO/Z4B5gGQCRMio1xdVfioUIa3AQJ/ZARWhJgkQJKq3wfJ3RwETGhRtPgx7ABtBEhCVNBqViU2tn5+5bLfXmgurIYwJrGFEJmqZh2T4jo2X0YIreZ+7dfeejrcCEiKADfCon3O4fHzp25Nx+8nnqF65lXnEphQUtNBYKaKkMcRgxVY29093JUWCCn+gAORMaTLh0dbCjo/1KO3X1kC6BGIR+QLVioSc+F+9HnW/G1DX+QAcw0j8c/QaHj3UfeN0/MMicEmSL+J5P6DkMDUcfLvZGJ4FwWoHl/lAEXo344zv3dO3ynXJIpg7XdnBtj46bwSnblwH+QQdQ8lsNeNg32nOm/fIh3CGS0OXOQHCv90XYwUyICM2NNX85f26WUnOu5smFzX0vu9qktZjeNtusAbB+XdvfAWDZnjeurX2XST1Y8X6s7zmzYABUrHBaYNshYRC4k340FcZU/1vg2JVpgeP4uJXypHK8soD134In/W+mb+AJvffvvC022It/ve1MaCJCXU6f4UCQy1CbNVONH7/Gw7Md8fsAtddMUh5fveYAAAAASUVORK5CYII=); nudge: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGElEQVQYV2N4DwX/oYBhgARgDJjEAAkAAEC99wFuu0VFAAAAAElFTkSuQmCC); pudge: url(http://wiki.jbussdieker.name/skins/common/images/Checker-16x16.png?2012-05-02T13:40:00Z); } p:after { content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACeElEQVR42nySy29McRTHP/fOnTvT6bQNrdHKMGGhFkTSELGxwoJY8Q9YWFhYEUJsRSKCsJWikjYSJBIbinpVPJLSRlEkKK2WTnXmvl+/Y4F4tPVJPqtvzjcnJ0cTEQxdY/miFH6gcAJpaWrQl86t05rR9axSKD8UZ6KqJscm5bMdyDDgAYgIBoCORm2G1u0b6w8unJ/bmDG1QtpUmIYiZ8Zk0zEpYmW76tujV9J3/Ep04v0XdR2IDYAdWxYt27Sa8/l8btWIlaYSupgqpNaMUYbC0DUa8qKXWpLGNSvZEETpZO/Z4B5gGQCRMio1xdVfioUIa3AQJ/ZARWhJgkQJKq3wfJ3RwETGhRtPgx7ABtBEhCVNBqViU2tn5+5bLfXmgurIYwJrGFEJmqZh2T4jo2X0YIreZ+7dfeejrcCEiKADfCon3O4fHzp25Nx+8nnqF65lXnEphQUtNBYKaKkMcRgxVY29093JUWCCn+gAORMaTLh0dbCjo/1KO3X1kC6BGIR+QLVioSc+F+9HnW/G1DX+QAcw0j8c/QaHj3UfeN0/MMicEmSL+J5P6DkMDUcfLvZGJ4FwWoHl/lAEXo344zv3dO3ynXJIpg7XdnBtj46bwSnblwH+QQdQ8lsNeNg32nOm/fIh3CGS0OXOQHCv90XYwUyICM2NNX85f26WUnOu5smFzX0vu9qktZjeNtusAbB+XdvfAWDZnjeurX2XST1Y8X6s7zmzYABUrHBaYNshYRC4k340FcZU/1vg2JVpgeP4uJXypHK8soD134In/W+mb+AJvffvvC022It/ve1MaCJCXU6f4UCQy1CbNVONH7/Gw7Md8fsAtddMUh5fveYAAAAASUVORK5CYII=); }����������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-var-args.css�����������������������������������������0000664�0000000�0000000�00000001500�14205426364�0023672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { fa: a, b, c d e f; fv: c d e f; ft: arglist; fj: 1 2 3 c d e f; fjt: list; fkt: list; ba: a, b, c d e f; bv: c d e f; bt: list; bj: 1 2 3 c d e f; bjt: list; /* */ fa: a, b, c d e; fv: c d e; ft: arglist; fj: 1 2 3 c d e; fjt: list; fkt: list; ba: a, b, c; bv: c; bt: string; bj: 1 2 3 c; bjt: list; /* */ fa: a, c, d e; fv: d e; ft: arglist; fj: 1 2 3 d e; fjt: list; fkt: list; ba: a, c, d; bv: d; bt: string; bj: 1 2 3 d; bjt: list; /* */ fa: a, hey, hoo ha; fv: hoo ha; ft: arglist; fj: 1 2 3 hoo ha; fjt: list; fkt: list; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-var-args.scss����������������������������������������0000664�0000000�0000000�00000001420�14205426364�0024056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin foo($x, $y, $zs...) { fa: $x, $y, $zs; fv: $zs; ft: type-of($zs); fj: join(1 2 3, $zs); fjt: type-of(join(1 2 3, $zs)); fkt: type-of(join($zs, 1 2 3)); } @mixin bar($x, $y, $z) { ba: $x, $y, $z; bv: $z; bt: type-of($z); bj: join(1 2 3, $z); bjt: type-of(join(1 2 3, $z)); } $stuff: hey hoo ha; div { @include foo(a, b, c d e f); @include bar(a, b, c d e f); /* */ @include foo(a, b, c d e...); @include bar(a, b, c d e...); /* */ @include foo(a, c d e...); @include bar(a, c d e...); /* */ @include foo(a, $stuff...); }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-vars.css���������������������������������������������0000664�0000000�0000000�00000000064�14205426364�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { content: 1 2 hello; content: 1/2 3/4 5; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/from-sassc/tests-vars.scss��������������������������������������������0000664�0000000�0000000�00000000110�14205426364�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$x: hello; $y: 1/2 3/4 (2+3); div { content: 1 2 $x; content: $y; }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017642�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/000-smoketest.css���������������������������������������������0000664�0000000�0000000�00000000213�14205426364�0022663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: gold; } div { -webkit-transition: opacity 2s linear, margin 2s linear; transition: opacity 2s linear, margin 2s linear; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/000-smoketest.scss��������������������������������������������0000664�0000000�0000000�00000000341�14205426364�0023050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @import "lib"; @import "part"; div { @include transition(opacity $transition-time linear, margin $transition-time linear); } h1 { @include junk; // This mixin does not exist intentionally! } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/css-calc.css��������������������������������������������������0000664�0000000�0000000�00000000147�14205426364�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { width: -moz-calc(100% - 10px); width: -webkit-calc(100% - 10px); width: calc(100% - 10px); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/css-calc.scss�������������������������������������������������0000664�0000000�0000000�00000000155�14205426364�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { width: -moz-calc(100% - 10px); width: -webkit-calc(100% - 10px); width: calc(100% - 10px); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring-2.css��������������������������������������0000664�0000000�0000000�00000000163�14205426364�0024313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { foo: 1px; bar: 2px; baz: 3px; } c { foo: "Value is bar"; bar: "Value is baz"; bang: "Value is "; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring-2.scss�������������������������������������0000664�0000000�0000000�00000000325�14205426364�0024476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; a { @each $name, $number in (foo: 1px, bar: 2px, baz: 3px) { #{$name}: $number; } } c { @each $key, $value in (foo bar) (bar, baz) bang { #{$key}: "Value is #{$value}"; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring-3.css��������������������������������������0000664�0000000�0000000�00000000504�14205426364�0024313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.puma-icon { background-image: url('/images/puma.png'); border: 2px solid black; cursor: default; } .sea-slug-icon { background-image: url('/images/sea-slug.png'); border: 2px solid blue; cursor: pointer; } .egret-icon { background-image: url('/images/egret.png'); border: 2px solid white; cursor: move; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring-3.scss�������������������������������������0000664�0000000�0000000�00000000512�14205426364�0024475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @each $animal, $color, $cursor in (puma, black, default), (sea-slug, blue, pointer), (egret, white, move) { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); border: 2px solid $color; cursor: $cursor; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring.css����������������������������������������0000664�0000000�0000000�00000000117�14205426364�0024153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1 { font-size: 2em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/each-destructuring.scss���������������������������������������0000664�0000000�0000000�00000000174�14205426364�0024341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) { #{$header} { font-size: $size; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/empty-list-included.css���������������������������������������0000664�0000000�0000000�00000000024�14205426364�0024244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: red; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/empty-list-included.scss��������������������������������������0000664�0000000�0000000�00000000305�14205426364�0024431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@function pass-through($inputs) { $list : (); @each $input in $inputs { $list: append($list, $input, comma); } @return $list; } $test: pass-through(p); #{$test} { color: red; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/global-variable-exists.css������������������������������������0000664�0000000�0000000�00000000101�14205426364�0024704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������blockquote { background: lime; color: red; float: right; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/global-variable-exists.scss�����������������������������������0000664�0000000�0000000�00000000655�14205426364�0025105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin myblockquote { blockquote { @if global-variable-exists(blockquote-color) { background: $blockquote-color; } @else { background: lime; } @if mixin-exists(myblockquote) { color: red; } @else { color: blue; } @if variable-exists(foo) { float: left; } $foo: 1; @if variable-exists(foo) { float: right; } } } @include myblockquote; �����������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/if-lazy.css���������������������������������������������������0000664�0000000�0000000�00000000043�14205426364�0021724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: red; color: blue; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/if-lazy.scss��������������������������������������������������0000664�0000000�0000000�00000000342�14205426364�0022111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { // if()'s arguments are evaluated lazily. $bogus doesn't exist, so if // those expressions are ever evaluated, pyscss will die with an error color: if(false, $bogus, red); color: if(true, blue, $bogus); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/include/������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0021265�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/include/_lib.scss���������������������������������������������0000664�0000000�0000000�00000000152�14205426364�0023065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$transition-time: 2s; @mixin transition($defs) { -webkit-transition: $defs; transition: $defs; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/include/_part.scss��������������������������������������������0000664�0000000�0000000�00000000027�14205426364�0023266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { color: gold; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/interpolation-acid.css����������������������������������������0000664�0000000�0000000�00000000433�14205426364�0024141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.foo foo-foo { onefoothree: foo; string: hellofoogoodbye; string-single: 'he\'llofoogood"bye'; string-double: "he\"llofoogood'bye"; url: url(hellofoogoodbye); url-single: url('he\'llofoogood"bye'); url-double: url("he\"llofoogood'bye"); nested: "type-of(foo) bar"; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/interpolation-acid.scss���������������������������������������0000664�0000000�0000000�00000000736�14205426364�0024332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$foo: foo; .#{$foo} #{$foo}-#{$foo} { one#{$foo}three: $foo; // TODO Ruby Sass changes these single quotes into double quotes, which I // guess we want to preserve string: hello#{$foo}goodbye; string-single: 'he\'llo#{$foo}good"bye'; string-double: "he\"llo#{$foo}good'bye"; url: url(hello#{$foo}goodbye); url-single: url('he\'llo#{$foo}good"bye'); url-double: url("he\"llo#{$foo}good'bye"); nested: "#{"type-of(f#{"o"}o)" "bar"}"; } ����������������������������������pyScss-1.4.0/scss/tests/files/general/interpolation-mixin-name.css����������������������������������0000664�0000000�0000000�00000000035�14205426364�0025301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p ul.l2 li { color: red; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/interpolation-mixin-name.scss���������������������������������0000664�0000000�0000000�00000000256�14205426364�0025471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @mixin _menu-horizontal($level) { ul.l#{$level} { li { color: red; } } } p { $type: '_menu-' + 'horizontal'; @include #{$type}(2); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-complex-keys.css�����������������������������������������0000664�0000000�0000000�00000000100�14205426364�0023721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������caption { properties: show hide show-columns show-baseline; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-complex-keys.scss����������������������������������������0000664�0000000�0000000�00000001107�14205426364�0024114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Taken from issue #306 $susy-keywords: ( container: auto, math: static fluid, output: isolate float, container-position: left center right, flow: ltr rtl, gutter-position: before after split inside inside-static, box-sizing: border-box content-box, span: full, edge: first alpha last omega full, spread: narrow wide wider, gutter-override: no-gutters no-gutter, role: nest, clear: break nobreak, debug image: show hide show-columns show-baseline, debug output: background overlay, ); caption { properties: map-get($susy-keywords, debug image); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-example-lists.css����������������������������������������0000664�0000000�0000000�00000000035�14205426364�0024077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div h1 { color: #F4FAC7; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-example-lists.scss���������������������������������������0000664�0000000�0000000�00000000572�14205426364�0024270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; // Taken from the Ruby CHANGELOG $themes: ( mist ( header #DCFAC0, text #00968B, border #85C79C ), spring ( header #F4FAC7, text #C2454E, border #FFB158 ) // ... ); @mixin themed-header($theme-name) { h1 { color: map-get(map-get($themes, $theme-name), header); } } div { @include themed-header(spring); } ��������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-example.css����������������������������������������������0000664�0000000�0000000�00000000035�14205426364�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div h1 { color: #F4FAC7; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/maps-example.scss���������������������������������������������0000664�0000000�0000000�00000000607�14205426364�0023133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; // Taken from the Ruby documentation $themes: ( mist: ( header: #DCFAC0, text: #00968B, border: #85C79C ), spring: ( header: #F4FAC7, text: #C2454E, border: #FFB158 ), // ... ); @mixin themed-header($theme-name) { h1 { color: map-get(map-get($themes, $theme-name), header); } } div { @include themed-header(spring); } �������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/names-loop-variable.css���������������������������������������0000664�0000000�0000000�00000000043�14205426364�0024206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: red; color: blue; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/names-loop-variable.scss��������������������������������������0000664�0000000�0000000�00000000130�14205426364�0024366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; a { @each $link_color in red, blue { color: $link-color; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/null-values.css�����������������������������������������������0000664�0000000�0000000�00000000113�14205426364�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { a: 1, 2, 3; b: 1, null, 2, null, 3; c: 1 2; e: 1, 2, 3, ; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/null-values.scss����������������������������������������������0000664�0000000�0000000�00000000612�14205426364�0023005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { // nulls should be omitted from evaluated lists a: (1, null, 2, null, 3); // but not from literal untouched lists b: 1, null, 2, null, 3; // entirely null lists become nothing c: 1 (null, null) 2; // empty properties aren't printed d: (null, null); // and it applies recursively e: (((null, 1, null), (null, 2), null), (3, null, (null, null))); } ����������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-mixin-2.css�������������������������������������������0000664�0000000�0000000�00000000063�14205426364�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { a: original; b: original; c: modified; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-mixin-2.scss������������������������������������������0000664�0000000�0000000�00000000275�14205426364�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $a: original; $b: original; $c: original; @mixin mutate-stuff($b) { $c: modified; } p { @include mutate-stuff(modified); a: $a; b: $b; c: $c; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-mixin.css���������������������������������������������0000664�0000000�0000000�00000000202�14205426364�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a { color: green; color: red; color: white; color: red; } b { color: red; color: red; color: white; color: red; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-mixin.scss��������������������������������������������0000664�0000000�0000000�00000000375�14205426364�0023330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy, reverse-colors:yes; $global: blue; @mixin box { color: $global; $global: red; color: $global; color: $white; } $global: green; $white: white; a { @include box(); color: $global; } b { @include box(); color: $global; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-nested-2.css������������������������������������������0000664�0000000�0000000�00000000120�14205426364�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1 { color: black; color: white; } h1 h2 { color: gray; color: white; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-nested-2.scss�����������������������������������������0000664�0000000�0000000�00000000232�14205426364�0023615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������h1 { $foo: black; color: $foo; $foo: gray; h2 { color: $foo; $foo: white; color: $foo; } color: $foo; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-nested.css��������������������������������������������0000664�0000000�0000000�00000000124�14205426364�0023273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.scoped { color: white; background-color: blue; } .unscoped { color: white; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/scoping-nested.scss�������������������������������������������0000664�0000000�0000000�00000000324�14205426364�0023460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $color: black; .scoped { $bg: blue; $color: white; color: $color; background-color: $bg; } .unscoped { color: $color; // Would be an error // background: $bg; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/slurpy-keyword-args.css���������������������������������������0000664�0000000�0000000�00000000072�14205426364�0024325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������p { left: 5px; right: 10px; leftovers: red, blue; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/general/slurpy-keyword-args.scss��������������������������������������0000664�0000000�0000000�00000000410�14205426364�0024504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin accepts-basically-anything($args...) { @each $key, $value in keywords($args) { #{$key}: $value; } @if length($args) { leftovers: $args; } } p { @include accepts-basically-anything(red, blue, $left: 5px, $right: 10px); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/images/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017472�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/images/test-qr.base64.txt���������������������������������������������0000664�0000000�0000000�00000002244�14205426364�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������iVBORw0KGgoAAAANSUhEUgAAALgAAAC4CAYAAABQMybHAAADQUlEQVR4nO3dQVIjMRAAwfUG///y7A+sg0LbmiLzDNjYFTq0G/F5nuf5A1F/p58AnCRw0gROmsBJEzhpAidN4KT9rL7g8/n8j+cxZvUxwPTvv/sxxfTzP231+jjBSRM4aQInTeCkCZw0gZMmcNKWc/CV29fJd+fA03Py1c/fff3r758TnDSBkyZw0gROmsBJEzhpAidtew6+cnpOfHqOe3qOfru3v39OcNIETprASRM4aQInTeCkCZy043Pwt5u+l+Ttc/RpTnDSBE6awEkTOGkCJ03gpAmcNHPww07P0c3Jv3OCkyZw0gROmsBJEzhpAidN4KQdn4O/fU47PYeefv2mH3+XE5w0gZMmcNIETprASRM4aQInbXsOfvr+6LfbnaOfnsPX3z8nOGkCJ03gpAmcNIGTJnDSBE7a53n7wu/l3A8+ywlOmsBJEzhpAidN4KQJnDSBk7bcB799n3nl9Bz69D719D749M/f/X4nOGkCJ03gpAmcNIGTJnDSBE7acg7+9jnw7fvU089ves59mhOcNIGTJnDSBE6awEkTOGkCJ217H3zX6X3hldP7yNP3b5+eU9/+9wBOcNIETprASRM4aQInTeCkCZy04/vgt+8bT8+pV6b34afvN9/9fic4aQInTeCkCZw0gZMmcNIETtry/2TePic+7fY5/u2Pv8v94PCFwEkTOGkCJ03gpAmcNIGTtr0PXle/d2V6Tn76cxYnOGkCJ03gpAmcNIGTJnDSBE7a+P3g06bv7ViZnsPffr/4ihOcNIGTJnDSBE6awEkTOGkCJ205B1+5fV98eo686/Qc+/TjT3/O4AQnTeCkCZw0gZMmcNIETprASdueg69Mz4lPm7635LTb701xPzi/msBJEzhpAidN4KQJnDSBk3Z8Dl53et/6dvbBYZDASRM4aQInTeCkCZw0gZNmDr4w/X8sd92+z73LPji/msBJEzhpAidN4KQJnDSBk3Z8Dv72fefpOffuHHv39Z+eo+9ygpMmcNIETprASRM4aQInTeCkbc/Bp/edT5veB5+eY0//fu4Hhy8ETprASRM4aQInTeCkCZy0z3P7Qi9scIKTJnDSBE6awEkTOGkCJ03gpP0DbikWfcrVj3kAAAAASUVORK5CYII=������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/images/test-qr.png����������������������������������������������������0000664�0000000�0000000�00000001527�14205426364�0021604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Q���tRNS���[l ;�� IDATx!@Qܳu^FsvLۖ7$B~y B! PHB"zm9?;z󴢐D($B! PHB2ڿ2;=_}y󴢐D($B! PHB2=GY5X5WX5w9iE! PHB"d6߻mD($B! PHB"Z5wD($B! PHB"es=O+ PHB"D($s;3kvjNiE! PHB"u۾SgVD($B! PHsS3FnxٽeD($B! PHB"{=ǟq9(ηD($B! PHB2wrjʪǩ@VD($B! PHG}v}^쟷D($B! PHB2}>S̩qFB! PHB"|}=O?y($B! PHB"l?eﳌӜ:OeĊB"D($B! ɲ{w#VD($B! PH>vr|ؑSKfُ? PHB"d}%saeE! PHB"dz{|vG==B! PHB" YQHB"D($B!lPk����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0017555�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/args.css�������������������������������������������������������0000664�0000000�0000000�00000000107�14205426364�0021221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { min-height: 60px; height: auto !important; height: 60px; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/args.scss������������������������������������������������������0000664�0000000�0000000�00000001244�14205426364�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; $legacy-support-for-ie6: true; // A hack to supply IE6 (and below) with a different property value. // [Read more](http://www.cssportal.com/css-hacks/#in_css-important). @mixin bang-hack($property, $value, $ie6-value) { @if $legacy-support-for-ie6 { #{$property}: #{$value} !important; #{$property}: #{$ie6-value}; } } // @private This mixin is not meant to be used directly. @mixin hacked-minimum($property, $value) { min-#{$property}: $value; @include bang-hack($property, auto, $value); } //** // Cross browser min-height mixin. @mixin min-height($value) { @include hacked-minimum(height, $value); } div { +min-height: 60px; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/functions-context.css������������������������������������������0000664�0000000�0000000�00000000034�14205426364�0023756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#sidebar { width: 280px; }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/functions-context.scss�����������������������������������������0000664�0000000�0000000�00000000300�14205426364�0024135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; @import "functions-context"; #sidebar { $gutter-width: 20px; // This variable, declared globally from in functions-context is only assigned. width: grid-width(5); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/image-colors.css�����������������������������������������������0000664�0000000�0000000�00000000240�14205426364�0022644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.mod { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVR4nGNkaGD4z0AEYCJG0ahC6ikEAHImAZMaPk6DAAAAAElFTkSuQmCC); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/image-colors.scss����������������������������������������������0000664�0000000�0000000�00000000177�14205426364�0023040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; .mod { background: inline-image("squares/ten-by-ten.png", $src-color: #c4c4c4, $dst-color: green); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/imports-unused.css���������������������������������������������0000664�0000000�0000000�00000000062�14205426364�0023263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#test { width: 490px; } div { width: 990px; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/imports-unused.scss��������������������������������������������0000664�0000000�0000000�00000000343�14205426364�0023450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy, warn_unused:yes; @import "functions-context"; #test { @import "functions-context"; @import "imports-unused"; @import "imports-unused-stuff"; width: grid-width(10); } div { width: grid-width(20); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/�������������������������������������������������������0000775�0000000�0000000�00000000000�14205426364�0021200�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/_functions-context.scss��������������������������������0000664�0000000�0000000�00000000175�14205426364�0025731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$grid-width: 40px; $gutter-width: 10px; @function grid-width($n) { @return $n * $grid-width + ($n - 1) * $gutter-width; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/_imports-unused-stuff.scss�����������������������������0000664�0000000�0000000�00000000161�14205426364�0026355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ @function stuff-function() { @return unquoted('green'); } @mixin stuff-mixin() { color: stuff-function(); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/_imports-unused.scss�����������������������������������0000664�0000000�0000000�00000000067�14205426364�0025235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import "functions-context"; @import "mixins-context"; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/_mixin-varargs.scss������������������������������������0000664�0000000�0000000�00000000447�14205426364�0025030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@mixin _inner(...) { $width: null !default; $height: null !default; color: $color; background: $background; border: $border; @if $width { width: $width; } @if $height { width: $height; } } @mixin varargs(...) { $color: green; $background: red !default; @include _inner(...); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/include/_mixins-context.scss�����������������������������������0000664�0000000�0000000�00000000334�14205426364�0025225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������$first-color: red; $second-color: magenta; $third-color: grey; @mixin mymixin($third-color: green) { first-color: $first-color; second-color: $second-color; third-color: $third-color; fourth-color: $fourth-color; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/linear-gradient.css��������������������������������������������0000664�0000000�0000000�00000000130�14205426364�0023326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { background: linear-gradient(top, #4d4d4d, #3f3f3f 50%, #333333 50%, #252525); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/linear-gradient.scss�������������������������������������������0000664�0000000�0000000�00000000165�14205426364�0023521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; div { background: linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/lists-circular-nth.css�����������������������������������������0000664�0000000�0000000�00000000132�14205426364�0024012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { margin-top: 4px; margin-right: 2px; margin-bottom: 4px; margin-left: 2px; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/lists-circular-nth.scss����������������������������������������0000664�0000000�0000000�00000000246�14205426364�0024203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; div { $list: 4px 2px; margin-top: nth($list, 1); margin-right: nth($list, 2); margin-bottom: nth($list, 3); margin-left: nth($list, 4); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/lists-operations.css�������������������������������������������0000664�0000000�0000000�00000000167�14205426364�0023612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������div { margin: 8px 0 4px; margin: 2px 0 1px; margin: 6px 2px 4px; margin: 7px 1px 7px; margin: -4px 0 -2px; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/lists-operations.scss������������������������������������������0000664�0000000�0000000�00000000260�14205426364�0023767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@option style:legacy; div { margin: (4px 0 2px) * 2; margin: (4px 0 2px) / 2; margin: (4px 0 2px) + 2px; margin: (4px 0 2px) + (3px 1px 5px 2px); margin: -(4px 0 2px); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyScss-1.4.0/scss/tests/files/kronuz/menu.html������������������������������������������������������0000664�0000000�0000000�00000012243�14205426364�0021411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Menu Test pyScss-1.4.0/scss/tests/files/kronuz/mixin-varargs.css000066400000000000000000000001271420542636400230560ustar00rootroot00000000000000div { color: green; background: blue; border: 1px solid magenta; width: 2px; } pyScss-1.4.0/scss/tests/files/kronuz/mixin-varargs.scss000066400000000000000000000002411420542636400232360ustar00rootroot00000000000000@option style:legacy; @import "mixin-varargs"; div { @include varargs( $color: pink, $background: blue, $border: 1px solid magenta, $width: 2px ); } pyScss-1.4.0/scss/tests/files/kronuz/mixins-context.css000066400000000000000000000001401420542636400232530ustar00rootroot00000000000000div { first-color: red; second-color: blue; third-color: yellow; fourth-color: orange; }pyScss-1.4.0/scss/tests/files/kronuz/mixins-context.scss000066400000000000000000000004651420542636400234500ustar00rootroot00000000000000@option style:legacy; @import "mixins-context"; $fourth-color: orange; // This variable, to be seen in mymyxin() needs to be globally declared outside below the scope. div { $second-color: blue; // This variable, declared globally from in _mixins-context is only assigned. @include mymixin(yellow); } pyScss-1.4.0/scss/tests/files/kronuz/mul-em.css000066400000000000000000000000421420542636400214570ustar00rootroot00000000000000div { text-indent: -119988px; } pyScss-1.4.0/scss/tests/files/kronuz/mul-em.scss000066400000000000000000000002451420542636400216470ustar00rootroot00000000000000@option style:legacy; div { $approximate_em_value: 12px / 1em; $wider_than_any_screen: -9999em; text-indent: $wider_than_any_screen * $approximate_em_value; }pyScss-1.4.0/scss/tests/files/kronuz/mul-list.css000066400000000000000000000000411420542636400220300ustar00rootroot00000000000000div { margin: 0.6em 0 1.8em; } pyScss-1.4.0/scss/tests/files/kronuz/mul-list.scss000066400000000000000000000000731420542636400222200ustar00rootroot00000000000000@option style:legacy; div { margin: (1em 0 3em) * 0.6; }pyScss-1.4.0/scss/tests/files/kronuz/order-test-each.css000066400000000000000000000002551420542636400232570ustar00rootroot00000000000000div { font-size: 1; font-size: 2; font-size: 3; } p { width: 1; } .p1 { height: 1; } p { width: 2; } .p2 { height: 2; } p { width: 3; } .p3 { height: 3; } pyScss-1.4.0/scss/tests/files/kronuz/order-test-each.scss000066400000000000000000000002351420542636400234400ustar00rootroot00000000000000@option style:legacy; div { @each $i in 1 2 3 { font-size: $i; } } @each $i in 1 2 3 { p { width: $i; } .p#{$i} { height: $i; } } pyScss-1.4.0/scss/tests/files/kronuz/order-test-for.css000066400000000000000000000002551420542636400231450ustar00rootroot00000000000000div { font-size: 1; font-size: 2; font-size: 3; } p { width: 1; } .p1 { height: 1; } p { width: 2; } .p2 { height: 2; } p { width: 3; } .p3 { height: 3; } pyScss-1.4.0/scss/tests/files/kronuz/order-test-for.scss000066400000000000000000000002531420542636400233260ustar00rootroot00000000000000@option style:legacy; div { @for $i from 1 through 3 { font-size: $i; } } @for $i from 1 through 3 { p { width: $i; } .p#{$i} { height: $i; } } pyScss-1.4.0/scss/tests/files/kronuz/order-test.css000066400000000000000000000000641420542636400223570ustar00rootroot00000000000000.A-red { color: red; } .B-blue { color: blue; } pyScss-1.4.0/scss/tests/files/kronuz/order-test.scss000066400000000000000000000001711420542636400225410ustar00rootroot00000000000000@option style:legacy; $col: red; .A-#{$col} { color: $col; } @if true { $col: blue; } .B-#{$col} { color: $col; } pyScss-1.4.0/scss/tests/files/kronuz/reversed-for.css000066400000000000000000000002021420542636400226640ustar00rootroot00000000000000div.l5 { width: 15px; } div.l4 { width: 14px; } div.l3 { width: 13px; } div.l2 { width: 12px; } div.l1 { width: 11px; } pyScss-1.4.0/scss/tests/files/kronuz/reversed-for.scss000066400000000000000000000001311420542636400230500ustar00rootroot00000000000000@option style:legacy; @for $i from 5 through 1 { div.l#{$i} { width: 10px + $i; } } pyScss-1.4.0/scss/tests/files/kronuz/reversed-range.css000066400000000000000000000002021420542636400231720ustar00rootroot00000000000000div.l5 { width: 15px; } div.l4 { width: 14px; } div.l3 { width: 13px; } div.l2 { width: 12px; } div.l1 { width: 11px; } pyScss-1.4.0/scss/tests/files/kronuz/reversed-range.scss000066400000000000000000000001301420542636400233550ustar00rootroot00000000000000@option style:legacy; @each $i in range(5, 1) { div.l#{$i} { width: 10px + $i; } } pyScss-1.4.0/scss/tests/files/kronuz/rgba-colors.css000066400000000000000000000000711420542636400224770ustar00rootroot00000000000000div { color: rgba(0, 0, 0, 0.6); background: black; }pyScss-1.4.0/scss/tests/files/kronuz/rgba-colors.scss000066400000000000000000000001331420542636400226610ustar00rootroot00000000000000@option style:legacy; div { color: rgba(black, 60%); background: rgba(black, 100%); } pyScss-1.4.0/scss/tests/files/kronuz/scope-loop-variables.css000066400000000000000000000000541420542636400243140ustar00rootroot00000000000000div { A-blue: blue; B-orange: orange; } pyScss-1.4.0/scss/tests/files/kronuz/scope-loop-variables.scss000066400000000000000000000005331420542636400245010ustar00rootroot00000000000000@option style:legacy; @option control-scoping:no; div { @each $some in red blue { // DEVIATION! in Sass, the outer $some is not modified here. } $some: green !default; A-blue: $some; $other: null; @each $other in magenta orange { // DEVIATION! in Sass, the outer $other is not modified here either. } B-orange: $other; } pyScss-1.4.0/scss/tests/files/kronuz/scoping-control.css000066400000000000000000000002741420542636400234120ustar00rootroot00000000000000div { A-red: red; A-orange: orange; B-black: black; B-blue: blue; B-white: white; C-olive: olive; C-violet: violet; C-black: black; C-gold: gold; } a { color: green; } pyScss-1.4.0/scss/tests/files/kronuz/scoping-control.scss000066400000000000000000000020321420542636400235670ustar00rootroot00000000000000@option style:legacy; @option control-scoping:no; div { $first: red; A-red: $first; @each $x in magenta orange { $first: $x; } A-orange: $first; @if true { $first: black; } B-black: $first; @for $i from 1 through 2 { $first: blue; } B-blue: $first; @each $y in 1 2 3 { @each $x in black white { $first: $x; } } B-white: $first; // Second round of tests (undefined variables defined within @if, @for or @each): // DEVIATION! in Sass, the colors inside the following constructs (since they're undefined) are left undefined at the end of the control blocks: @if true { $second: olive; } $second: grey !default; C-olive: $second; @for $i from 1 through 2 { $third: violet; } $third: snow !default; C-violet: $third; @each $y in 1 2 3 { $fourth: black; @each $x in silver gold { $fifth: $x; } } $fourth: seashell !default; C-black: $fourth; $fifth: mintcream !default; C-gold: $fifth; } a { $some: green !default; color: $some; } pyScss-1.4.0/scss/tests/files/kronuz/selectors-append-nest.css000066400000000000000000000000761420542636400245110ustar00rootroot00000000000000ul li:hover, ul:hover li:hover, ul.current { color: blue; } pyScss-1.4.0/scss/tests/files/kronuz/selectors-append-nest.scss000066400000000000000000000002441420542636400246710ustar00rootroot00000000000000@option style:legacy; $_current: '&.current'; $_selectors: append(nest('&, &:hover', 'li:hover'), unquote($_current)); ul { #{$_selectors} { color: blue; } } pyScss-1.4.0/scss/tests/files/kronuz/selectors-nest.css000066400000000000000000000001011420542636400232310ustar00rootroot00000000000000p.hover a, p:hover a, div.hover a, div:hover a { color: red; } pyScss-1.4.0/scss/tests/files/kronuz/selectors-nest.scss000066400000000000000000000001271420542636400234240ustar00rootroot00000000000000@option style:legacy; p, div { #{nest('&:hover, &.hover', 'a')} { color: red; } } pyScss-1.4.0/scss/tests/files/kronuz/selectors-special.css000066400000000000000000000007441420542636400237150ustar00rootroot00000000000000.pane ::selection.colored, .pane :root.colored, .pane input.colored, .pane input#someid.colored, .pane input[target].colored, .pane input[type="submit"].colored, .pane input[target=_blank].colored, .pane input[title~=flower].colored, .pane input[lang|=en].colored, .pane div > input.colored, .pane div ~ input.colored, .pane div + input.colored, .pane input:lang(it).colored, .pane input:checked.colored, .pane input:disabled.colored, .pane input:not(.ex).colored { color: green; } pyScss-1.4.0/scss/tests/files/kronuz/selectors-special.scss000066400000000000000000000005071420542636400240750ustar00rootroot00000000000000.pane { ::selection, :root, input, input#someid, input[target], input[type="submit"], input[target=_blank], input[title~=flower], input[lang|=en], div>input, div~input, div+input, input:lang(it), input:checked, input:disabled, input:not(.ex), { &.colored { color: green; } } } pyScss-1.4.0/scss/tests/files/kronuz/sprite-map.css000066400000000000000000000004061420542636400223500ustar00rootroot00000000000000.mod { background: url(static/assets/squares-n1XoWeNUWSLsX5d823Kf8w.png) no-repeat; } .mod.ten-by-ten { width: 10px; height: 10px; background-position: 0px 0px; } .mod.twenty-by-twenty { width: 20px; height: 20px; background-position: 0px -10px; } pyScss-1.4.0/scss/tests/files/kronuz/sprite-map.html000066400000000000000000000004341420542636400225250ustar00rootroot00000000000000 Sprite Map Test
pyScss-1.4.0/scss/tests/files/kronuz/sprite-map.scss000066400000000000000000000010201420542636400225240ustar00rootroot00000000000000@option style:legacy; $images: sprite-map("squares/*.png", $cache-buster: false); .mod { background: $images; &.ten-by-ten { $file: sprite-file($images, "ten-by-ten"); width: image-width($file); height: image-height($file); background-position: sprite-position($images, "ten-by-ten"); } &.twenty-by-twenty { $file: sprite-file($images, "twenty-by-twenty"); width: image-width($file); height: image-height($file); background-position: sprite-position($images, "twenty-by-twenty"); } } pyScss-1.4.0/scss/tests/files/kronuz/static/000077500000000000000000000000001420542636400210445ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/kronuz/static/assets/000077500000000000000000000000001420542636400223465ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/kronuz/static/assets/.placeholder000066400000000000000000000000001420542636400246170ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/kronuz/static/menus/000077500000000000000000000000001420542636400221735ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/kronuz/static/menus/arrow_down.png000066400000000000000000000001311420542636400250550ustar00rootroot00000000000000PNG  IHDRB%} IDAT[c```0 p @։HpWIENDB`pyScss-1.4.0/scss/tests/files/kronuz/static/menus/arrow_left.png000066400000000000000000000001551420542636400250460ustar00rootroot00000000000000PNG  IHDR/e pHYs  IDAT[c`@9pPˠ@Dt#J:IENDB`pyScss-1.4.0/scss/tests/files/kronuz/static/menus/arrow_right.png000066400000000000000000000001571420542636400252330ustar00rootroot00000000000000PNG  IHDR/e pHYs  !IDATc```π G. 8ĆQ'IENDB`pyScss-1.4.0/scss/tests/files/kronuz/static/menus/arrow_up.png000066400000000000000000000001521420542636400245350ustar00rootroot00000000000000PNG  IHDRB%} pHYs  IDATc`@pPI ` cq4+IENDB`pyScss-1.4.0/scss/tests/files/kronuz/static/squares/000077500000000000000000000000001420542636400225275ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/kronuz/static/squares/ten-by-ten.png000066400000000000000000000001661420542636400252220ustar00rootroot00000000000000PNG  IHDR PXtEXtSoftwareAdobe ImageReadyqe<IDATxb 0 { .while-#{$types} { width: $type-width + $types; } $types: $types - 1; } pyScss-1.4.0/scss/tests/files/original-doctests/000077500000000000000000000000001420542636400216575ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/original-doctests/000-general.css000066400000000000000000000000321420542636400242760ustar00rootroot00000000000000p span { color: blue; } pyScss-1.4.0/scss/tests/files/original-doctests/000-general.scss000066400000000000000000000001031420542636400244600ustar00rootroot00000000000000@option style:legacy; p { span { color: blue; } } pyScss-1.4.0/scss/tests/files/original-doctests/001-variables.css000066400000000000000000000002031420542636400246320ustar00rootroot00000000000000.selector { background-image: url(../img/tmpl1/png/head_bg.png); background-color: #FF00FF; border-top: 1px solid #FF00FF; } pyScss-1.4.0/scss/tests/files/original-doctests/001-variables.scss000066400000000000000000000004141420542636400250210ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @variables { $path = unquote('../img/tmpl1/png'); $color1 = #FF00FF; } .selector { background-image: url(#{$path}/head_bg.png); background-color: $color1; border-top: 1px solid $color1; } pyScss-1.4.0/scss/tests/files/original-doctests/002-nesting-children.css000066400000000000000000000001061420542636400261220ustar00rootroot00000000000000.selector a { display: block; } .selector strong { color: blue; } pyScss-1.4.0/scss/tests/files/original-doctests/002-nesting-children.scss000066400000000000000000000002301420542636400263030ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { a { display: block; } strong { color: blue; } } pyScss-1.4.0/scss/tests/files/original-doctests/003-nesting-children-2.css000066400000000000000000000001441420542636400262640ustar00rootroot00000000000000.selector { margin: 20px; } .selector a { display: block; } .selector strong { color: blue; } pyScss-1.4.0/scss/tests/files/original-doctests/003-nesting-children-2.scss000066400000000000000000000002771420542636400264560ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { self { margin: 20px; } a { display: block; } strong { color: blue; } } pyScss-1.4.0/scss/tests/files/original-doctests/004-nesting-children-3.css000066400000000000000000000002741420542636400262720ustar00rootroot00000000000000.selector { margin: 20px; } .selector a { display: block; } .selector dl dt { color: red; } .selector dl dd { color: gray; } .selector dl dd span { text-decoration: underline; } pyScss-1.4.0/scss/tests/files/original-doctests/004-nesting-children-3.scss000066400000000000000000000005671420542636400264620ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { self { margin: 20px; } a { display: block; } dl { dt { color: red; } dd { self { color: gray; } span { text-decoration: underline; } } } } pyScss-1.4.0/scss/tests/files/original-doctests/005-extends.css000066400000000000000000000001151420542636400243420ustar00rootroot00000000000000.basicClass, .specialClass { padding: 20px; background-color: #FF0000; } pyScss-1.4.0/scss/tests/files/original-doctests/005-extends.scss000066400000000000000000000002421420542636400245260ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .basicClass { padding: 20px; background-color: #FF0000; } .specialClass extends .basicClass {}pyScss-1.4.0/scss/tests/files/original-doctests/006-extends-2.css000066400000000000000000000002031420542636400245000ustar00rootroot00000000000000.basicClass, .specialClass { padding: 20px; background-color: #FF0000; } .specialClass { padding: 10px; font-size: 14px; } pyScss-1.4.0/scss/tests/files/original-doctests/006-extends-2.scss000066400000000000000000000003131420542636400246650ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .basicClass { padding: 20px; background-color: #FF0000; } .specialClass extends .basicClass { padding: 10px; font-size: 14px; }pyScss-1.4.0/scss/tests/files/original-doctests/007-extends-3.css000066400000000000000000000003151420542636400245060ustar00rootroot00000000000000.specialClass { padding: 10px; font-size: 14px; } .basicClass, .specialClass { padding: 20px; background-color: #FF0000; } .basicClass a, .specialClass a, .specialLink { text-decoration: none; } pyScss-1.4.0/scss/tests/files/original-doctests/007-extends-3.scss000066400000000000000000000004701420542636400246730ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .specialClass extends .basicClass { padding: 10px; font-size: 14px; } .specialLink extends .basicClass a {} .basicClass { self { padding: 20px; background-color: #FF0000; } a { text-decoration: none; } } pyScss-1.4.0/scss/tests/files/original-doctests/008-extends-4.css000066400000000000000000000003751420542636400245160ustar00rootroot00000000000000.basicList li, .specialClass li { padding: 5px 10px; border-bottom: 1px solid #000000; } .basicList dd, .specialClass dd { margin: 4px; } .basicList span, .specialClass span { display: inline-block; } .roundBox, .specialClass { some: props; } pyScss-1.4.0/scss/tests/files/original-doctests/008-extends-4.scss000066400000000000000000000005011420542636400246700ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .basicList { li { padding: 5px 10px; border-bottom: 1px solid #000000; } dd { margin: 4px; } span { display: inline-block; } } .roundBox { some: props; } .specialClass extends .basicList & .roundBox {}pyScss-1.4.0/scss/tests/files/original-doctests/009-extends-5.css000066400000000000000000000002531420542636400245130ustar00rootroot00000000000000.basicList li, .specialClass dt { padding: 5px 10px; border-bottom: 1px solid #000000; } .basicList dd { margin: 4px; } .basicList span { display: inline-block; } pyScss-1.4.0/scss/tests/files/original-doctests/009-extends-5.scss000066400000000000000000000004441420542636400247000ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .basicList { li { padding: 5px 10px; border-bottom: 1px solid #000000; } dd { margin: 4px; } span { display: inline-block; } } .specialClass { dt extends .basicList li {} }pyScss-1.4.0/scss/tests/files/original-doctests/010-math.css000066400000000000000000000001141420542636400236140ustar00rootroot00000000000000.selector { padding: 10px; color: white; background-color: #ede343; } pyScss-1.4.0/scss/tests/files/original-doctests/010-math.scss000066400000000000000000000003661420542636400240100ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @variables { $color = #FFF555; } .selector { padding: [5px * 2]; color: [#ccc * 2]; // lets assume $color is '#FFF555' background-color: [$color - #222 + #101010]; } pyScss-1.4.0/scss/tests/files/original-doctests/011-math-2.css000066400000000000000000000000361420542636400237570ustar00rootroot00000000000000.selector { padding: 4px; } pyScss-1.4.0/scss/tests/files/original-doctests/011-math-2.scss000066400000000000000000000001641420542636400241440ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { padding: (5px - 3) * (5px - 3) / 1px; } pyScss-1.4.0/scss/tests/files/original-doctests/012-math-3.css000066400000000000000000000000601420542636400237560ustar00rootroot00000000000000.selector { padding: 3em; margin: 10 20%; } pyScss-1.4.0/scss/tests/files/original-doctests/012-math-3.scss000066400000000000000000000002141420542636400241420ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { padding: [5em - 3em + 1em]; margin: [20 - 10] [30% - 10]; } pyScss-1.4.0/scss/tests/files/original-doctests/013-nesting.css000066400000000000000000000002261420542636400243410ustar00rootroot00000000000000#navbar { width: 80%; height: 23px; } #navbar ul { list-style-type: none; } #navbar li { float: left; } #navbar li a { font-weight: bold; } pyScss-1.4.0/scss/tests/files/original-doctests/013-nesting.scss000066400000000000000000000003201420542636400245170ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ #navbar { width: 80%; height: 23px; ul { list-style-type: none; } li { float: left; a { font-weight: bold; } } }pyScss-1.4.0/scss/tests/files/original-doctests/014-nesting-2.css000066400000000000000000000002231420542636400244760ustar00rootroot00000000000000.fakeshadow { border-style: solid; border-left-width: 4px; border-left-color: #888; border-right-width: 2px; border-right-color: #ccc; } pyScss-1.4.0/scss/tests/files/original-doctests/014-nesting-2.scss000066400000000000000000000003551420542636400246670ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ .fakeshadow { border: { style: solid; left: { width: 4px; color: #888; } right: { width: 2px; color: #ccc; } } }pyScss-1.4.0/scss/tests/files/original-doctests/015-nesting-3.css000066400000000000000000000001261420542636400245020ustar00rootroot00000000000000a { color: #ce4dd6; } a:hover { color: #ffb3ff; } a:visited { color: #c458cb; } pyScss-1.4.0/scss/tests/files/original-doctests/015-nesting-3.scss000066400000000000000000000002421420542636400246640ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ a { color: #ce4dd6; &:hover { color: #ffb3ff; } &:visited { color: #c458cb; } }pyScss-1.4.0/scss/tests/files/original-doctests/016-variables.css000066400000000000000000000002121420542636400246400ustar00rootroot00000000000000#navbar { border-bottom-color: #ce4dd6; border-bottom-style: solid; } a { color: #ce4dd6; } a:hover { border-bottom: solid 1px; } pyScss-1.4.0/scss/tests/files/original-doctests/016-variables.scss000066400000000000000000000004061420542636400250300ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ $main-color: #ce4dd6; $style: solid; #navbar { border-bottom: { color: $main-color; style: $style; } } a { color: $main-color; &:hover { border-bottom: $style 1px; } }pyScss-1.4.0/scss/tests/files/original-doctests/017-interpolation.css000066400000000000000000000001571420542636400255700ustar00rootroot00000000000000.rounded-top { border-top-radius: 10px; -moz-border-radius-top: 10px; -webkit-border-top-radius: 10px; } pyScss-1.4.0/scss/tests/files/original-doctests/017-interpolation.scss000066400000000000000000000003641420542636400257530ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ $side: top; $radius: 10px; .rounded-#{$side} { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; }pyScss-1.4.0/scss/tests/files/original-doctests/018-mixins.css000066400000000000000000000003271420542636400242100ustar00rootroot00000000000000#navbar li { border-top-radius: 10px; -moz-border-radius-top: 10px; -webkit-border-top-radius: 10px; } #footer { border-top-radius: 10px; -moz-border-radius-top: 10px; -webkit-border-top-radius: 10px; } pyScss-1.4.0/scss/tests/files/original-doctests/018-mixins.scss000066400000000000000000000005021420542636400243660ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ @mixin rounded-top { $side: top; $radius: 10px; border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } #navbar li { @include rounded-top; } #footer { @include rounded-top; }pyScss-1.4.0/scss/tests/files/original-doctests/019-mixins-2.css000066400000000000000000000004771420542636400243560ustar00rootroot00000000000000#navbar li { border-top-radius: 10px; -moz-border-radius-top: 10px; -webkit-border-top-radius: 10px; } #footer { border-top-radius: 5px; -moz-border-radius-top: 5px; -webkit-border-top-radius: 5px; } #sidebar { border-left-radius: 8px; -moz-border-radius-left: 8px; -webkit-border-left-radius: 8px; } pyScss-1.4.0/scss/tests/files/original-doctests/019-mixins-2.scss000066400000000000000000000005451420542636400245350ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; /* style.scss */ @mixin rounded($side, $radius: 10px) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius; } #navbar li { @include rounded(top); } #footer { @include rounded(top, 5px); } #sidebar { @include rounded(left, 8px); }pyScss-1.4.0/scss/tests/files/original-doctests/020-mixins-3.css000066400000000000000000000001131420542636400243320ustar00rootroot00000000000000@media only screen and (max-width: 480px) { body { color: red; } } pyScss-1.4.0/scss/tests/files/original-doctests/020-mixins-3.scss000066400000000000000000000002701420542636400245210ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @mixin iphone { @media only screen and (max-width: 480px) { @content; } } @include iphone { body { color: red } }pyScss-1.4.0/scss/tests/files/original-doctests/021-extend.css000066400000000000000000000003131420542636400241550ustar00rootroot00000000000000.error, .seriousError { border: 1px #f00; background-color: #fdd; } .error.intrusion, .intrusion.seriousError { background-image: url("/image/hacked.png"); } .seriousError { border-width: 3px; } pyScss-1.4.0/scss/tests/files/original-doctests/021-extend.scss000066400000000000000000000003601420542636400243420ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .error { border: 1px #f00; background-color: #fdd; } .error.intrusion { background-image: url("/image/hacked.png"); } .seriousError { @extend .error; border-width: 3px; }pyScss-1.4.0/scss/tests/files/original-doctests/022-extend-multiple.css000066400000000000000000000002711420542636400260120ustar00rootroot00000000000000.error, .seriousError { border: 1px #f00; background-color: #fdd; } .attention, .seriousError { font-size: 3em; background-color: #ff0; } .seriousError { border-width: 3px; } pyScss-1.4.0/scss/tests/files/original-doctests/022-extend-multiple.scss000066400000000000000000000003641420542636400262000ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .error { border: 1px #f00; background-color: #fdd; } .attention { font-size: 3em; background-color: #ff0; } .seriousError { @extend .error, .attention; border-width: 3px; }pyScss-1.4.0/scss/tests/files/original-doctests/023-extend-multiple-2.css000066400000000000000000000003511420542636400261510ustar00rootroot00000000000000.bad, .seriousError { color: red !important; } .error, .seriousError { border: 1px red; background-color: #fdd; } .attention, .seriousError { font-size: 3em; background-color: #ff0; } .seriousError { border-width: 3px; } pyScss-1.4.0/scss/tests/files/original-doctests/023-extend-multiple-2.scss000066400000000000000000000004501420542636400263340ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .bad { color: red !important; } .error { border: 1px red; background-color: #fdd; } .attention { font-size: 3em; background-color: #ff0; } .seriousError { @extend .error, .attention; @extend .bad; border-width: 3px; } pyScss-1.4.0/scss/tests/files/original-doctests/024-extend-placeholder.css000066400000000000000000000001141420542636400264370ustar00rootroot00000000000000#context a.notice { color: blue; font-weight: bold; font-size: 2em; } pyScss-1.4.0/scss/tests/files/original-doctests/024-extend-placeholder.scss000066400000000000000000000003551420542636400266310ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; // This ruleset won't be rendered on its own. #context a%extreme { color: blue; font-weight: bold; font-size: 2em; } %unused { foo: bar; } .notice { @extend %extreme; } pyScss-1.4.0/scss/tests/files/original-doctests/025-forum.css000066400000000000000000000001241420542636400240220ustar00rootroot00000000000000body { _width: expression(document.body.clientWidth > 1440? "1440px" : "auto"); } pyScss-1.4.0/scss/tests/files/original-doctests/025-forum.scss000066400000000000000000000002211420542636400242030ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; body { _width: expression(document.body.clientWidth > 1440? "1440px" : "auto"); }pyScss-1.4.0/scss/tests/files/original-doctests/026-forum-2.css000066400000000000000000000002161420542636400241640ustar00rootroot00000000000000*html .a { color: #fff; } *html .b { color: #000; } *:first-child + html .a { color: #fff; } *:first-child + html .b { color: #000; } pyScss-1.4.0/scss/tests/files/original-doctests/026-forum-2.scss000066400000000000000000000004041420542636400243460ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @variables { $ie6 = unquote("*html"); $ie7 = unquote("*:first-child+html"); } $ie6 { .a { color:#fff; } .b { color:#000; } } $ie7 { .a { color:#fff; } .b { color:#000; } } pyScss-1.4.0/scss/tests/files/original-doctests/027-forum-3.css000066400000000000000000000002031420542636400241620ustar00rootroot00000000000000.basicClass, .specialClass { padding: 20px; background-color: #FF0000; } .specialClass { padding: 10px; font-size: 14px; } pyScss-1.4.0/scss/tests/files/original-doctests/027-forum-3.scss000066400000000000000000000003131420542636400243470ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .basicClass { padding: 20px; background-color: #FF0000; } .specialClass extends .basicClass { padding: 10px; font-size: 14px; }pyScss-1.4.0/scss/tests/files/original-doctests/028-errors.css000066400000000000000000000002471420542636400242170ustar00rootroot00000000000000.some-selector, .parent { some: prop; } .some-selector-more, .parent .children { some: proop; } .parent { height: auto; } .parent .children { height: autoo; } pyScss-1.4.0/scss/tests/files/original-doctests/028-errors.scss000066400000000000000000000004531420542636400244010ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .some-selector { some:prop; } .some-selector-more { some:proop; } .parent { self extends .some-selector { height: auto } .children { self extends .some-selector-more { height: autoo } } }pyScss-1.4.0/scss/tests/files/original-doctests/029-errors-2.css000066400000000000000000000002011420542636400243450ustar00rootroot00000000000000.noticeBox, .errorBox { background-color: red; } .noticeBox span, .noticeBox p, .errorBox span, .errorBox p { some: props; } pyScss-1.4.0/scss/tests/files/original-doctests/029-errors-2.scss000066400000000000000000000003011420542636400245310ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .noticeBox { self { background-color:red; } span, p { some: props } } .errorBox extends .noticeBox {}pyScss-1.4.0/scss/tests/files/original-doctests/030-errors-3.css000066400000000000000000000003411420542636400243430ustar00rootroot00000000000000.mod, .cleanBox, .cleanBoxExtended, .articleBox { margin: 10px; } .mod h1, .cleanBox h1, .cleanBoxExtended h1, .articleBox h1 { font-size: 40px; } .cleanBox h1, .cleanBoxExtended h1, .articleBox h1 { font-size: 60px; } pyScss-1.4.0/scss/tests/files/original-doctests/030-errors-3.scss000066400000000000000000000004341420542636400245310ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .mod { self { margin: 10px; } h1 { font-size:40px; } } .cleanBox extends .mod { h1 { font-size:60px; } } .cleanBoxExtended extends .cleanBox {} .articleBox extends .cleanBox {}pyScss-1.4.0/scss/tests/files/original-doctests/031-test.css000066400000000000000000000000241420542636400236450ustar00rootroot00000000000000a { width: 15%; } pyScss-1.4.0/scss/tests/files/original-doctests/031-test.scss000066400000000000000000000002701420542636400240330ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @function percent-width( $t, $c ) { $perc: ($t / $c) * 100%; @return $perc; } a { width: percent-width(12, 80); }pyScss-1.4.0/scss/tests/files/original-doctests/032-test-2.css000066400000000000000000000001651420542636400240130ustar00rootroot00000000000000a { color: #de7c60; color: #de7c60; color-hue: 13.2deg; color-saturation: 66.1%; color-lightness: 62.4%; } pyScss-1.4.0/scss/tests/files/original-doctests/032-test-2.scss000066400000000000000000000004751420542636400242020ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; a { $color: rgba(0.872536*255, 0.48481984*255, 0.375464*255, 1); color: $color; color: hsl(13.2, 66.1, 62.4); color-hue: hue($color); // 60deg color-saturation: saturation($color); // 60% color-lightness: lightness($color); // 50% } pyScss-1.4.0/scss/tests/files/original-doctests/033-test-3.css000066400000000000000000000011001420542636400240030ustar00rootroot00000000000000.functions { opacify1: rgba(0, 0, 0, 0.6); opacify2: #001; transparentize1: rgba(0, 0, 0, 0.4); transparentize2: rgba(0, 0, 0, 0.6); lighten1: #333; lighten2: #e00; darken1: #ff6a00; darken2: #200; saturate1: #d9f2d9; saturate2: #9e3f3f; desaturate1: #e3e8e3; desaturate2: #726b6b; adjust1: #deeded; adjust2: #ededde; adjust3: #886a11; mix1: purple; mix2: #4000bf; mix3: rgba(64, 0, 191, 0.75); percentage1: 200%; round1: 10px; round2: 11px; ceil1: 11px; ceil2: 11px; floor1: 10px; floor2: 10px; abs1: 10px; abs2: 10px; } pyScss-1.4.0/scss/tests/files/original-doctests/033-test-3.scss000066400000000000000000000027661420542636400242110ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .functions { opacify1: opacify(rgba(0, 0, 0, 0.5), 0.1); // rgba(0, 0, 0, 0.6) opacify2: opacify(rgba(0, 0, 17, 0.8), 0.2); // #001 transparentize1: transparentize(rgba(0, 0, 0, 0.5), 0.1); // rgba(0, 0, 0, 0.4) transparentize2: transparentize(rgba(0, 0, 0, 0.8), 0.2); // rgba(0, 0, 0, 0.6) lighten1: lighten(hsl(0, 0%, 0%), 20%); // hsl(0, 0, 20) lighten2: lighten(#800, 20%); // #e00 darken1: darken(hsl(25, 100%, 80%), 30%); // hsl(25deg, 100%, 50%) darken2: darken(#800, 20%); // #200 saturate1: saturate(hsl(120, 30%, 90%), 20%); // hsl(120deg, 50%, 90%) saturate2: saturate(#855, 20%); // #9e3f3f desaturate1: desaturate(hsl(120, 30%, 90%), 20%); // hsl(120deg, 10%, 90%) desaturate2: desaturate(#855, 20%); // #726b6b adjust1: adjust-hue(hsl(120, 30%, 90%), 60deg); // hsl(180deg, 30%, 90%) adjust2: adjust-hue(hsl(120, 30%, 90%), -60deg); // hsl(60deg, 30%, 90%) adjust3: adjust-hue(#811, 45deg); // #886a11 mix1: mix(#f00, #00f, 50%); // purple mix2: mix(#f00, #00f, 25%); // #4000bf mix3: mix(rgba(255, 0, 0, 0.5), #00f, 50%); // rgba(64, 0, 191, 0.75) percentage1: percentage(100px / 50px); // 200% round1: round(10.4px); // 10px round2: round(10.6px); // 11px ceil1: ceil(10.4px); // 11px ceil2: ceil(10.6px); // 11px floor1: floor(10.4px); // 10px floor2: floor(10.6px); // 10px abs1: abs(10px); // 10px abs2: abs(-10px); // 10px } pyScss-1.4.0/scss/tests/files/original-doctests/034-test-4.css000066400000000000000000000000761420542636400240200ustar00rootroot00000000000000.coloredClass { padding: 20px; background-color: green; } pyScss-1.4.0/scss/tests/files/original-doctests/034-test-4.scss000066400000000000000000000002251420542636400241770ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .coloredClass { $mycolor: green; padding: 20px; background-color: $mycolor; }pyScss-1.4.0/scss/tests/files/original-doctests/035-test-5.css000066400000000000000000000001541420542636400240170ustar00rootroot00000000000000a, button { color: blue; } a:hover, .some a, button:hover, .some button { text-decoration: underline; } pyScss-1.4.0/scss/tests/files/original-doctests/035-test-5.scss000066400000000000000000000002331420542636400242000ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; a, button { color: blue; &:hover, .some & { text-decoration: underline; } }pyScss-1.4.0/scss/tests/files/original-doctests/036-test-6.css000066400000000000000000000000661420542636400240230ustar00rootroot00000000000000a:hover, .hoverlink { text-decoration: underline; } pyScss-1.4.0/scss/tests/files/original-doctests/036-test-6.scss000066400000000000000000000002011420542636400241750ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; a:hover { text-decoration: underline } .hoverlink { @extend a:hover }pyScss-1.4.0/scss/tests/files/original-doctests/037-test-7.css000066400000000000000000000002421420542636400240210ustar00rootroot00000000000000a, #fake-links .link { color: blue; } a:after, #fake-links .link:after { display: block; } a:hover, #fake-links :hover.link { text-decoration: underline; } pyScss-1.4.0/scss/tests/files/original-doctests/037-test-7.scss000066400000000000000000000002621420542636400242060ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; #fake-links .link {@extend a} a { color: blue; &:after {display: block} &:hover {text-decoration: underline} } pyScss-1.4.0/scss/tests/files/original-doctests/038-test-8.css000066400000000000000000000003761420542636400240330ustar00rootroot00000000000000.puma-icon { background-image: url(/images/puma.png); } .sea-slug-icon { background-image: url(/images/sea-slug.png); } .egret-icon { background-image: url(/images/egret.png); } .salamander-icon { background-image: url(/images/salamander.png); } pyScss-1.4.0/scss/tests/files/original-doctests/038-test-8.scss000066400000000000000000000002771420542636400242160ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; @each $animal in puma, sea-slug, egret, salamander { .#{$animal}-icon { background-image: url(/images/#{$animal}.png); } } pyScss-1.4.0/scss/tests/files/original-doctests/039-hover-extend.css000066400000000000000000000001111420542636400253030ustar00rootroot00000000000000.comment a.user:hover, .comment .user.hoverlink { font-weight: bold; } pyScss-1.4.0/scss/tests/files/original-doctests/039-hover-extend.scss000066400000000000000000000001421420542636400254720ustar00rootroot00000000000000@option style:legacy; .comment a.user:hover { font-weight: bold } .hoverlink { @extend a:hover } pyScss-1.4.0/scss/tests/files/original-doctests/039-math-4.css000066400000000000000000000001101420542636400237640ustar00rootroot00000000000000.selector { padding: 2; margin: 2em; width: 4; height: 250px; } pyScss-1.4.0/scss/tests/files/original-doctests/039-math-4.scss000066400000000000000000000002641420542636400241610ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; .selector { padding: [4em / 2em]; margin: [4em / 2em] * 1em; width: [8px / 2px]; height: [500px / 2]; } pyScss-1.4.0/scss/tests/files/original-doctests/040-complex-sequence-extend.css000066400000000000000000000001761420542636400274400ustar00rootroot00000000000000#admin .tabbar a, #admin .tabbar #demo .overview .fakelink, #demo .overview #admin .tabbar .fakelink { font-weight: bold; } pyScss-1.4.0/scss/tests/files/original-doctests/040-complex-sequence-extend.scss000066400000000000000000000014161420542636400276210ustar00rootroot00000000000000@option style:legacy; // From the docs: // Sometimes a selector sequence extends another selector that appears in // another sequence. In this case, the two sequences need to be merged. While // it would technically be possible to generate all selectors that could // possibly match either sequence, this would make the stylesheet far too // large. The simple example above, for instance, would require ten selectors. // Instead, Sass generates only selectors that are likely to be useful. // When the two sequences being merged have no selectors in common, then two // new selectors are generated: one with the first sequence before the second, // and one with the second sequence before the first. #admin .tabbar a { font-weight: bold } #demo .overview .fakelink { @extend a } pyScss-1.4.0/scss/tests/files/original-doctests/041-another-extend.css000066400000000000000000000001731420542636400256210ustar00rootroot00000000000000.mod, .cleanBox h1 { margin: 10px; } .mod h1, .cleanBox h1 h1 { font-size: 40px; } .cleanBox h1 { font-size: 60px; } pyScss-1.4.0/scss/tests/files/original-doctests/041-another-extend.scss000066400000000000000000000002061420542636400260010ustar00rootroot00000000000000@option style:legacy; .mod { margin: 10px; } .mod h1 { font-size: 40px; } .cleanBox h1 extends .mod { font-size: 60px; } pyScss-1.4.0/scss/tests/files/regressions/000077500000000000000000000000001420542636400205705ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/regressions/args-vars.css000066400000000000000000000000711420542636400232050ustar00rootroot00000000000000a { display: block; color: red; background: red; } pyScss-1.4.0/scss/tests/files/regressions/args-vars.scss000066400000000000000000000002641420542636400233740ustar00rootroot00000000000000@option style:legacy; @mixin col($color, $background: $color, $border: null) { a { display: block; color: $color; background: $background; } } @include col(red); pyScss-1.4.0/scss/tests/files/regressions/argspec-default-arguments.css000066400000000000000000000000561420542636400263540ustar00rootroot00000000000000h1 { color: white; } h2 { color: black; } pyScss-1.4.0/scss/tests/files/regressions/argspec-default-arguments.scss000066400000000000000000000002231420542636400265330ustar00rootroot00000000000000@option style:legacy; @mixin color-me($color: white) { color: $color; } h1 { @include color-me(); } h2 { @include color-me(black); } pyScss-1.4.0/scss/tests/files/regressions/argspec-no-arguments.css000066400000000000000000000000311420542636400253350ustar00rootroot00000000000000h1 { line-height: 5; } pyScss-1.4.0/scss/tests/files/regressions/argspec-no-arguments.scss000066400000000000000000000001541420542636400255260ustar00rootroot00000000000000@option style:legacy; @function get-a-number() { @return 5; } h1 { line-height: get-a-number(); } pyScss-1.4.0/scss/tests/files/regressions/argspec-trailing-comma.css000066400000000000000000000000301420542636400256200ustar00rootroot00000000000000div { right: 100px; } pyScss-1.4.0/scss/tests/files/regressions/argspec-trailing-comma.scss000066400000000000000000000001461420542636400260130ustar00rootroot00000000000000@option style:legacy; @function no-op($foo,) { @return $foo; } div { right: no-op(100px); } pyScss-1.4.0/scss/tests/files/regressions/include/000077500000000000000000000000001420542636400222135ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/files/regressions/include/_issue-258-a.scss000066400000000000000000000001221420542636400251240ustar00rootroot00000000000000#A { @include min-screen(anything) { any-property: any-value; } } pyScss-1.4.0/scss/tests/files/regressions/include/_issue-258-b.scss000066400000000000000000000002151420542636400251300ustar00rootroot00000000000000#B { my-property: this-should-be-before-media-query; @include min-screen(100px) { my-property: this-should-be-last; } } pyScss-1.4.0/scss/tests/files/regressions/include/_issue-334.scss000066400000000000000000000000271420542636400247050ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/include/_issue.334.scss000066400000000000000000000000271420542636400247060ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/interpolation-2.css000066400000000000000000000001361420542636400243300ustar00rootroot00000000000000a { A: X; A: X_c; A: X_b; A: X_b_c; A: X_a; A: X_a_c; A: X_a_b; A: X_a_b_c; } pyScss-1.4.0/scss/tests/files/regressions/interpolation-2.scss000066400000000000000000000002541420542636400245140ustar00rootroot00000000000000@option style:legacy, short_colors:no; a { @each $a in '', '_a' { @each $b in '', '_b' { @each $c in '', '_c' { A: X#{$a}#{$b}#{$c}; } } } }pyScss-1.4.0/scss/tests/files/regressions/interpolation.css000066400000000000000000000002761420542636400241760ustar00rootroot00000000000000a { A: 'a' 'b' '' 'c'; B: '$a$b$x$c'; C: "$a$b$x$c"; D: abc; E: 'abc'; F: "abc"; } b { A: "a" "b" "" "c"; B: '$a$b$x$c'; C: "$a$b$x$c"; D: abc; E: 'abc'; F: "abc"; } pyScss-1.4.0/scss/tests/files/regressions/interpolation.scss000066400000000000000000000010041420542636400243470ustar00rootroot00000000000000@option style:legacy, short_colors:no; // DEVIATION: We preserve the same type of quotes when interpolating. Ruby // always produces double quotes. a { $a: 'a'; $b: 'b'; $c: 'c'; $x: ''; A: $a$b$x$c; B: '$a$b$x$c'; C: "$a$b$x$c"; D: #{$a}#{$b}#{$x}#{$c}; E: '#{$a}#{$b}#{$x}#{$c}'; F: "#{$a}#{$b}#{$x}#{$c}"; } b { $a: "a"; $b: "b"; $c: "c"; $x: ""; A: $a$b$x$c; B: '$a$b$x$c'; C: "$a$b$x$c"; D: #{$a}#{$b}#{$x}#{$c}; E: '#{$a}#{$b}#{$x}#{$c}'; F: "#{$a}#{$b}#{$x}#{$c}"; } pyScss-1.4.0/scss/tests/files/regressions/issue-10.css000066400000000000000000000000341420542636400226450ustar00rootroot00000000000000.yellow { color: yelow; } pyScss-1.4.0/scss/tests/files/regressions/issue-10.scss000066400000000000000000000001021420542636400230240ustar00rootroot00000000000000@option style:legacy, short_colors:no; .yellow { color: yelow; }pyScss-1.4.0/scss/tests/files/regressions/issue-110.css000066400000000000000000000000241420542636400227250ustar00rootroot00000000000000p { color: red; } pyScss-1.4.0/scss/tests/files/regressions/issue-110.scss000066400000000000000000000002021420542636400231060ustar00rootroot00000000000000@option style:legacy, short_colors:no; $global: blue; @mixin box { $global: red; color: $global; } p { @include box(); } pyScss-1.4.0/scss/tests/files/regressions/issue-2.css000066400000000000000000000004421420542636400225710ustar00rootroot00000000000000.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 { display: inline; float: left; position: relative; } pyScss-1.4.0/scss/tests/files/regressions/issue-2.scss000066400000000000000000000002241420542636400227520ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; #{enumerate(".pull", 1, 24)} { display: inline; float: left; position: relative; }pyScss-1.4.0/scss/tests/files/regressions/issue-21.css000066400000000000000000000001541420542636400226520ustar00rootroot00000000000000h2 { background: green; } @media screen { h2 { background: blue; } } h1 { background: yellow; } pyScss-1.4.0/scss/tests/files/regressions/issue-21.scss000066400000000000000000000002241420542636400230330ustar00rootroot00000000000000@option style:legacy, short_colors:no; h2 { background: green; @media screen{ background:blue; } } h1 { background:yellow; }pyScss-1.4.0/scss/tests/files/regressions/issue-258.css000066400000000000000000000003501420542636400227440ustar00rootroot00000000000000@media screen and (min-width: anything) { #A { any-property: any-value; } } #B { my-property: this-should-be-before-media-query; } @media screen and (min-width: 100px) { #B { my-property: this-should-be-last; } } pyScss-1.4.0/scss/tests/files/regressions/issue-258.scss000066400000000000000000000002171420542636400231310ustar00rootroot00000000000000@mixin min-screen($size) { @media screen and (min-width: $size) { @content; } } @import "issue-258-a"; @import "issue-258-b"; pyScss-1.4.0/scss/tests/files/regressions/issue-32.css000066400000000000000000000001011420542636400226440ustar00rootroot00000000000000@media (max-width:1024px) { .wrap { padding: 10px 0; } } pyScss-1.4.0/scss/tests/files/regressions/issue-32.scss000066400000000000000000000001471420542636400230410ustar00rootroot00000000000000@option style:legacy, short_colors:no; @media (max-width:1024px) { .wrap { padding: 10px 0; } }pyScss-1.4.0/scss/tests/files/regressions/issue-334-a.css000066400000000000000000000000251420542636400231540ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-a.scss000066400000000000000000000000241420542636400233360ustar00rootroot00000000000000@import "issue-334";pyScss-1.4.0/scss/tests/files/regressions/issue-334-b.css000066400000000000000000000000251420542636400231550ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-b.scss000066400000000000000000000000241420542636400233370ustar00rootroot00000000000000@import "issue.334";pyScss-1.4.0/scss/tests/files/regressions/issue-334-c.css000066400000000000000000000000251420542636400231560ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-c.scss000066400000000000000000000000251420542636400233410ustar00rootroot00000000000000@import "_issue-334";pyScss-1.4.0/scss/tests/files/regressions/issue-334-d.css000066400000000000000000000000251420542636400231570ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-d.scss000066400000000000000000000000251420542636400233420ustar00rootroot00000000000000@import "_issue.334";pyScss-1.4.0/scss/tests/files/regressions/issue-334-e.css000066400000000000000000000000251420542636400231600ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-e.scss000066400000000000000000000000311420542636400233400ustar00rootroot00000000000000@import "issue.334.scss";pyScss-1.4.0/scss/tests/files/regressions/issue-334-f.css000066400000000000000000000000251420542636400231610ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-f.scss000066400000000000000000000000311420542636400233410ustar00rootroot00000000000000@import "issue-334.scss";pyScss-1.4.0/scss/tests/files/regressions/issue-334-g.css000066400000000000000000000000251420542636400231620ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-g.scss000066400000000000000000000000341420542636400233450ustar00rootroot00000000000000@import "include/issue-334";pyScss-1.4.0/scss/tests/files/regressions/issue-334-h.css000066400000000000000000000000251420542636400231630ustar00rootroot00000000000000a { color: white; }pyScss-1.4.0/scss/tests/files/regressions/issue-334-h.scss000066400000000000000000000000341420542636400233460ustar00rootroot00000000000000@import "include/issue-334";pyScss-1.4.0/scss/tests/files/regressions/issue-4.css000066400000000000000000000000311420542636400225650ustar00rootroot00000000000000.foo { width: 100px; } pyScss-1.4.0/scss/tests/files/regressions/issue-4.scss000066400000000000000000000002621420542636400227560ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; $width: 150px; @mixin foo($width) { width: $width; } $other_width: 100px; .foo { @include foo($other_width); }pyScss-1.4.0/scss/tests/files/regressions/issue-40.css000066400000000000000000000001221420542636400226460ustar00rootroot00000000000000a { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwA..."); } pyScss-1.4.0/scss/tests/files/regressions/issue-40.scss000066400000000000000000000001701420542636400230340ustar00rootroot00000000000000@option style:legacy, short_colors:no; a { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwA..."); }pyScss-1.4.0/scss/tests/files/regressions/issue-5.css000066400000000000000000000000411420542636400225670ustar00rootroot00000000000000foo { border: 1px solid red; } pyScss-1.4.0/scss/tests/files/regressions/issue-5.scss000066400000000000000000000001561420542636400227610ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; $width: 1px; foo { border: $width solid red; }pyScss-1.4.0/scss/tests/files/regressions/issue-52.css000066400000000000000000000000631420542636400226550ustar00rootroot00000000000000h1 { background: url(//example.com/image.png); } pyScss-1.4.0/scss/tests/files/regressions/issue-52.scss000066400000000000000000000001101420542636400230310ustar00rootroot00000000000000@option style:legacy; h1 { background: url(//example.com/image.png); }pyScss-1.4.0/scss/tests/files/regressions/issue-6.css000066400000000000000000000000261420542636400225730ustar00rootroot00000000000000p { color: green; } pyScss-1.4.0/scss/tests/files/regressions/issue-6.scss000066400000000000000000000003751420542636400227650ustar00rootroot00000000000000@option style:legacy, short_colors:yes, reverse_colors:yes; $type: monster; p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else if $type == monster { color: green; } @else { color: black; } }pyScss-1.4.0/scss/tests/files/regressions/issue-7.css000066400000000000000000000000631420542636400225750ustar00rootroot00000000000000a.button:hover, button:hover { color: #000000; } pyScss-1.4.0/scss/tests/files/regressions/issue-7.scss000066400000000000000000000001621420542636400227600ustar00rootroot00000000000000@option style:legacy, short_colors:no; a.button:hover { color: #000000; } button:hover { @extend a.button:hover; }pyScss-1.4.0/scss/tests/files/regressions/nth-inside-each.css000066400000000000000000000002141420542636400242370ustar00rootroot00000000000000.color-yellow { background-color: #FFA500; } .color-blue { background-color: #4682B4; } .color-green { background-color: #2ca02c; } pyScss-1.4.0/scss/tests/files/regressions/nth-inside-each.scss000066400000000000000000000003151420542636400244240ustar00rootroot00000000000000// from https://github.com/Kronuz/pyScss/issues/257 $colors: yellow #FFA500, blue #4682B4, green #2ca02c; @each $color in $colors { .color-#{nth($color, 1)} { background-color: nth($color, 2); } } pyScss-1.4.0/scss/tests/from_ruby/000077500000000000000000000000001420542636400171275ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/from_ruby/__init__.py000066400000000000000000000000001420542636400212260ustar00rootroot00000000000000pyScss-1.4.0/scss/tests/from_ruby/_test_scss.py000066400000000000000000000765131420542636400216660ustar00rootroot00000000000000#encoding: utf8 """Tests ported from the `scss/scss_test.rb` file in the original Ruby Sass implementation. Tests dependent on the Sass syntax have been included, but are not run. """ from __future__ import absolute_import from __future__ import unicode_literals from scss import Scss import pytest # TODO undupe def render(source, **kwargs): compiler = Scss(scss_opts=dict(compress=False), **kwargs) css = compiler.compile(source) # TODO chumptastic hack; sass and pyscss have slightly different # "non-compressed" output import re css = re.sub(r'\n *[}]$', ' }', css) #css = re.sub(r'; [}]', ';\n }', css) return css ## One-Line Comments def test_one_line_comments(): assert '''.foo { baz: bang; } ''' == render('''.foo {// bar: baz;} baz: bang; //} } ''') assert '''.foo bar[val="//"] { baz: bang; } ''' == render('''.foo bar[val="//"] { baz: bang; //} } ''') ## Script def test_variables(): assert '''blat { a: foo; } ''' == render('''$var: foo; blat {a: $var} ''') assert '''foo { a: 2; b: 6; } ''' == render('''foo { $var: 2; $another-var: 4; a: $var; b: $var + $another-var;} ''') def test_unicode_variables(): assert '''blat { a: foo; } ''' == render('''$vär: foo; blat {a: $vär} ''') def test_guard_assign(): assert '''foo { a: 1; } ''' == render('''$var: 1; $var: 2 !default; foo {a: $var} ''') assert '''foo { a: 2; } ''' == render('''$var: 2 !default; foo {a: $var} ''') def test_sass_script(): assert '''foo { a: 3; b: -1; c: foobar; d: 12px; } ''' == render('''foo { a: 1 + 2; b: 1 - 2; c: foo + bar; d: floor(12.3px); } ''') def test_debug_directive(recwarn): assert '''foo { a: b; } bar { c: d; } ''' == render('''foo {a: b} @debug "hello world!"; bar {c: d} ''') # XXX warning: "test_debug_directive_inline.scss:2 DEBUG: hello world!" def test_warn_directive(recwarn): expected_warning = ''' WARNING: this is a warning on line 2 of test_warn_directive_inline.scss WARNING: this is a mixin on line 1 of test_warn_directive_inline.scss, in `foo' from line 3 of test_warn_directive_inline.scss ''' assert '''bar { c: d; } ''' == render('''@mixin foo { @warn "this is a mixin";} @warn "this is a warning"; bar {c: d; @include foo;} ''') # XXX warning: expected_warning def test_for_directive(): assert '''.foo { a: 1; a: 2; a: 3; a: 4; } ''' == render('''.foo { @for $var from 1 to 5 {a: $var;} } ''') assert '''.foo { a: 1; a: 2; a: 3; a: 4; a: 5; } ''' == render('''.foo { @for $var from 1 through 5 {a: $var;} } ''') def test_if_directive(): assert '''foo { a: b; } ''' == render('''@if "foo" == "foo" {foo {a: b}} @if "foo" != "foo" {bar {a: b}} ''') assert '''bar { a: b; } ''' == render('''@if "foo" != "foo" {foo {a: b}} @else if "foo" == "foo" {bar {a: b}} @else if true {baz {a: b}} ''') assert '''bar { a: b; } ''' == render('''@if "foo" != "foo" {foo {a: b}} @else {bar {a: b}} ''') def test_comment_after_if_directive(): assert '''foo { a: b; /* This is a comment */ c: d; } ''' == render('''foo { @if true {a: b} /* This is a comment */ c: d } ''') assert '''foo { a: b; /* This is a comment */ c: d; } ''' == render('''foo { @if true {a: b} @else {x: y} /* This is a comment */ c: d } ''') def test_while_directive(): assert '''.foo { a: 1; a: 2; a: 3; a: 4; } ''' == render('''$i: 1; .foo { @while $i != 5 { a: $i; $i: $i + 1; } } ''') def test_each_directive(): assert '''a { b: 1px; b: 2px; b: 3px; b: 4px; } c { d: foo; d: bar; d: baz; d: bang; } ''' == render('''a { @each $number in 1px 2px 3px 4px { b: $number; } } c { @each $str in foo, bar, baz, bang { d: $str; } } ''') def test_css_import_directive(): assert "@import url(foo.css);\n" == render('@import "foo.css";') assert "@import url(foo.css);\n" == render("@import 'foo.css';") assert "@import url(\"foo.css\");\n" == render('@import url("foo.css");') assert "@import url(\"foo.css\");\n" == render('@import url("foo.css");') assert "@import url(foo.css);\n" == render('@import url(foo.css);') def test_media_import(): assert "@import \"./fonts.sass\" all;\n" == render("@import \"./fonts.sass\" all;") def test_dynamic_media_import(): assert '''@import "foo" print and (-webkit-min-device-pixel-ratio-foo: 25); ''' == render('''$media: print; $key: -webkit-min-device-pixel-ratio; $value: 20; @import "foo" \#{$media} and ($key + "-foo": $value + 5); ''') def test_http_import(): assert "@import \"http://fonts.googleapis.com/css?family=Droid+Sans\";\n" == \ render("@import \"http://fonts.googleapis.com/css?family=Droid+Sans\";") def test_import_with_interpolation(): assert '''@import url("http://fonts.googleapis.com/css?family=Droid+Sans"); ''' == render('''$family: unquote("Droid+Sans"); @import url("http://fonts.googleapis.com/css?family=\#{$family}"); ''') def test_url_import(): assert "@import url(fonts.sass);\n" == render("@import url(fonts.sass);") def test_block_comment_in_script(): assert '''foo { a: 1bar; } ''' == render('''foo {a: 1 + /* flang */ bar} ''') def test_line_comment_in_script(): assert '''foo { a: 1blang; } ''' == render('''foo {a: 1 + // flang } blang } ''') ## Nested Rules def test_nested_rules(): assert '''foo bar { a: b; } ''' == render('''foo {bar {a: b}} ''') assert '''foo bar { a: b; } foo baz { b: c; } ''' == render('''foo { bar {a: b} baz {b: c}} ''') assert '''foo bar baz { a: b; } foo bang bip { a: b; } ''' == render('''foo { bar {baz {a: b}} bang {bip {a: b}}} ''') def test_nested_rules_with_declarations(): assert '''foo { a: b; } foo bar { c: d; } ''' == render('''foo { a: b; bar {c: d}} ''') assert '''foo { a: b; } foo bar { c: d; } ''' == render('''foo { bar {c: d} a: b} ''') assert '''foo { ump: nump; grump: clump; } foo bar { blat: bang; habit: rabbit; } foo bar baz { a: b; } foo bar bip { c: d; } foo bibble bap { e: f; } ''' == render('''foo { ump: nump; grump: clump; bar { blat: bang; habit: rabbit; baz {a: b} bip {c: d}} bibble { bap {e: f}}} ''') def test_nested_rules_with_fancy_selectors(): assert '''foo .bar { a: b; } foo :baz { c: d; } foo bang:bop { e: f; } ''' == render('''foo { .bar {a: b} :baz {c: d} bang:bop {e: f}} ''') def test_almost_ambiguous_nested_rules_and_declarations(): assert '''foo { bar: baz bang bop biddle woo look at all these elems; } foo bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses { a: b; } foo bar:baz bang bop biddle woo look at all these elems { a: b; } ''' == render('''foo { bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses {a: b}; bar:baz bang bop biddle woo look at all these elems {a: b}; bar:baz bang bop biddle woo look at all these elems; } ''') def test_newlines_in_selectors(): assert '''foo bar { a: b; } ''' == render('''foo bar {a: b} ''') assert '''foo baz, foo bang, bar baz, bar bang { a: b; } ''' == render('''foo, bar { baz, bang {a: b}} ''') assert '''foo bar baz bang { a: b; } foo bar bip bop { c: d; } ''' == render('''foo bar { baz bang {a: b} bip bop {c: d}} ''') assert '''foo bang, foo bip bop, bar baz bang, bar baz bip bop { a: b; } ''' == render('''foo, bar baz { bang, bip bop {a: b}} ''') def test_trailing_comma_in_selector(): assert '''#foo #bar, #baz #boom { a: b; } #bip #bop { c: d; } ''' == render('''#foo #bar,, ,#baz #boom, {a: b} #bip #bop, ,, {c: d} ''') def test_parent_selectors(): assert '''foo:hover { a: b; } bar foo.baz { c: d; } ''' == render('''foo { &:hover {a: b} bar &.baz {c: d}} ''') def test_parent_selector_with_subject(): assert '''bar foo.baz! .bip { a: b; } bar foo bar.baz! .bip { c: d; } ''' == render('''foo { bar &.baz! .bip {a: b}} foo bar { bar &.baz! .bip {c: d}} ''') ## Namespace Properties def test_namespace_properties(): assert '''foo { bar: baz; bang-bip: 1px; bang-bop: bar; } ''' == render('''foo { bar: baz; bang: { bip: 1px; bop: bar;}} ''') def test_several_namespace_properties(): assert '''foo { bar: baz; bang-bip: 1px; bang-bop: bar; buzz-fram: "foo"; buzz-frum: moo; } ''' == render('''foo { bar: baz; bang: { bip: 1px; bop: bar;} buzz: { fram: "foo"; frum: moo; } } ''') def test_nested_namespace_properties(): assert '''foo { bar: baz; bang-bip: 1px; bang-bop: bar; bang-blat-baf: bort; } ''' == render('''foo { bar: baz; bang: { bip: 1px; bop: bar; blat:{baf:bort}}} ''') def test_namespace_properties_with_value(): assert '''foo { bar: baz; bar-bip: bop; bar-bing: bop; } ''' == render('''foo { bar: baz { bip: bop; bing: bop; }} ''') def test_namespace_properties_with_script_value(): assert '''foo { bar: bazbang; bar-bip: bop; bar-bing: bop; } ''' == render('''foo { bar: baz + bang { bip: bop; bing: bop; }} ''') def test_no_namespace_properties_without_space(): assert '''foo bar:baz { bip: bop; } ''' == render('''foo { bar:baz { bip: bop }} ''') def test_no_namespace_properties_without_space_even_when_its_unambiguous(): render(''' foo { bar:1px { bip: bop }} ''') assert e.message == ''' Invalid CSS: a space is required between a property and its definition when it has other properties nested beneath it. ''' assert e.sass_line == 2 ## Mixins def test_basic_mixins(): assert '''.foo { a: b; } ''' == render('''@mixin foo { .foo {a: b}} @include foo; ''') assert '''bar { c: d; } bar .foo { a: b; } ''' == render('''@mixin foo { .foo {a: b}} bar { @include foo; c: d; } ''') assert '''bar { a: b; c: d; } ''' == render('''@mixin foo {a: b} bar { @include foo; c: d; } ''') def test_mixins_with_empty_args(): assert '''.foo { a: b; } ''' == render('''@mixin foo() {a: b} .foo {@include foo();} ''') assert '''.foo { a: b; } ''' == render('''@mixin foo() {a: b} .foo {@include foo;} ''') assert '''.foo { a: b; } ''' == render('''@mixin foo {a: b} .foo {@include foo();} ''') def test_mixins_with_args(): assert '''.foo { a: bar; } ''' == render('''@mixin foo($a) {a: $a} .foo {@include foo(bar)} ''') assert '''.foo { a: bar; b: 12px; } ''' == render('''@mixin foo($a, $b) { a: $a; b: $b; } .foo {@include foo(bar, 12px)} ''') ## Functions def test_basic_function(): assert '''bar { a: 3; } ''' == render('''@function foo() { @return 1 + 2; } bar { a: foo(); } ''') def test_function_args(): assert '''bar { a: 3; } ''' == render('''@function plus($var1, $var2) { @return $var1 + $var2; } bar { a: plus(1, 2); } ''') ## Var Args def test_mixin_var_args(): assert '''.foo { a: 1; b: 2, 3, 4; } ''' == render('''@mixin foo($a, $b...) { a: $a; b: $b; } .foo {@include foo(1, 2, 3, 4)} ''') def test_mixin_empty_var_args(): assert '''.foo { a: 1; b: 0; } ''' == render('''@mixin foo($a, $b...) { a: $a; b: length($b); } .foo {@include foo(1)} ''') def test_mixin_var_args_act_like_list(): assert '''.foo { a: 3; b: 3; } ''' == render('''@mixin foo($a, $b...) { a: length($b); b: nth($b, 2); } .foo {@include foo(1, 2, 3, 4)} ''') def test_mixin_splat_args(): assert '''.foo { a: 1; b: 2; c: 3; d: 4; } ''' == render('''@mixin foo($a, $b, $c, $d) { a: $a; b: $b; c: $c; d: $d; } $list: 2, 3, 4; .foo {@include foo(1, $list...)} ''') def test_mixin_splat_expression(): assert '''.foo { a: 1; b: 2; c: 3; d: 4; } ''' == render('''@mixin foo($a, $b, $c, $d) { a: $a; b: $b; c: $c; d: $d; } .foo {@include foo(1, (2, 3, 4)...)} ''') def test_mixin_splat_args_with_var_args(): assert '''.foo { a: 1; b: 2, 3, 4; } ''' == render('''@mixin foo($a, $b...) { a: $a; b: $b; } $list: 2, 3, 4; .foo {@include foo(1, $list...)} ''') def test_mixin_splat_args_with_var_args_and_normal_args(): assert '''.foo { a: 1; b: 2; c: 3, 4; } ''' == render('''@mixin foo($a, $b, $c...) { a: $a; b: $b; c: $c; } $list: 2, 3, 4; .foo {@include foo(1, $list...)} ''') def test_mixin_splat_args_with_var_args_preserves_separator(): assert '''.foo { a: 1; b: 2 3 4 5; } ''' == render('''@mixin foo($a, $b...) { a: $a; b: $b; } $list: 3 4 5; .foo {@include foo(1, 2, $list...)} ''') def test_mixin_var_and_splat_args_pass_through_keywords(): assert '''.foo { a: 3; b: 1; c: 2; } ''' == render('''@mixin foo($a...) { @include bar($a...); } @mixin bar($b, $c, $a) { a: $a; b: $b; c: $c; } .foo {@include foo(1, $c: 2, $a: 3)} ''') def test_mixin_var_args_with_keyword(): with pytest.raises(SyntaxError) as e: render(''' @mixin foo($a, $b...) { a: $a; b: $b; } .foo {@include foo($a: 1, 2, 3, 4)} ''') assert e.message == "Positional arguments must come before keyword arguments." def test_mixin_keyword_for_var_arg(): with pytest.raises(SyntaxError) as e: render(''' @mixin foo($a, $b...) { a: $a; b: $b; } .foo {@include foo(1, $b: 2 3 4)} ''') assert e.message == "Argument $b of mixin foo cannot be used as a named argument." def test_mixin_keyword_for_unknown_arg_with_var_args(): with pytest.raises(SyntaxError) as e: render(''' @mixin foo($a, $b...) { a: $a; b: $b; } .foo {@include foo(1, $c: 2 3 4)} ''') assert e.message == "Mixin foo doesn't have an argument named $c." def test_function_var_args(): assert '''.foo { val: "a: 1, b: 2, 3, 4"; } ''' == render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{$b}"; } .foo {val: foo(1, 2, 3, 4)} ''') def test_function_empty_var_args(): assert '''.foo { val: "a: 1, b: 0"; } ''' == render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{length($b)}"; } .foo {val: foo(1)} ''') def test_function_var_args_act_like_list(): assert '''.foo { val: "a: 3, b: 3"; } ''' == render('''@function foo($a, $b...) { @return "a: \#{length($b)}, b: \#{nth($b, 2)}"; } .foo {val: foo(1, 2, 3, 4)} ''') def test_function_splat_args(): assert '''.foo { val: "a: 1, b: 2, c: 3, d: 4"; } ''' == render('''@function foo($a, $b, $c, $d) { @return "a: \#{$a}, b: \#{$b}, c: \#{$c}, d: \#{$d}"; } $list: 2, 3, 4; .foo {val: foo(1, $list...)} ''') def test_function_splat_expression(): assert '''.foo { val: "a: 1, b: 2, c: 3, d: 4"; } ''' == render('''@function foo($a, $b, $c, $d) { @return "a: \#{$a}, b: \#{$b}, c: \#{$c}, d: \#{$d}"; } .foo {val: foo(1, (2, 3, 4)...)} ''') def test_function_splat_args_with_var_args(): assert '''.foo { val: "a: 1, b: 2, 3, 4"; } ''' == render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{$b}"; } $list: 2, 3, 4; .foo {val: foo(1, $list...)} ''') def test_function_splat_args_with_var_args_and_normal_args(): assert '''.foo { val: "a: 1, b: 2, c: 3, 4"; } ''' == render('''@function foo($a, $b, $c...) { @return "a: \#{$a}, b: \#{$b}, c: \#{$c}"; } $list: 2, 3, 4; .foo {val: foo(1, $list...)} ''') def test_function_splat_args_with_var_args_preserves_separator(): assert '''.foo { val: "a: 1, b: 2 3 4 5"; } ''' == render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{$b}"; } $list: 3 4 5; .foo {val: foo(1, 2, $list...)} ''') def test_function_var_and_splat_args_pass_through_keywords(): assert '''.foo { val: "a: 3, b: 1, c: 2"; } ''' == render('''@function foo($a...) { @return bar($a...); } @function bar($b, $c, $a) { @return "a: \#{$a}, b: \#{$b}, c: \#{$c}"; } .foo {val: foo(1, $c: 2, $a: 3)} ''') def test_function_var_args_with_keyword(): with pytest.raises(SyntaxError) as e: render('''@function foo($a, $b...) { @return "a: \#{$a}, b: $b"; } .foo {val: foo($a: 1, 2, 3, 4)} ''') assert e.message == "Positional arguments must come before keyword arguments." def test_function_keyword_for_var_arg(): with pytest.raises(SyntaxError) as e: render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{$b}"; } .foo {val: foo(1, $b: 2 3 4)} ''') assert e.message == "Argument $b of function foo cannot be used as a named argument." def test_function_keyword_for_unknown_arg_with_var_args(): with pytest.raises(SyntaxError) as e: render('''@function foo($a, $b...) { @return "a: \#{$a}, b: \#{$b}"; } .foo {val: foo(1, $c: 2 3 4)} ''') assert e.message == "Function foo doesn't have an argument named $c." def test_function_var_args_passed_to_native(): assert '''.foo { val: #102035; } ''' == render('''@function foo($args...) { @return adjust-color($args...); } .foo {val: foo(#102030, $blue: 5)} ''') ## Interpolation def test_basic_selector_interpolation(): assert '''foo 3 baz { a: b; } ''' == render('''foo \#{1 + 2} baz {a: b} ''') assert '''foo.bar baz { a: b; } ''' == render('''foo\#{".bar"} baz {a: b} ''') assert '''foo.bar baz { a: b; } ''' == render('''\#{"foo"}.bar baz {a: b} ''') def test_selector_only_interpolation(): assert '''foo bar { a: b; } ''' == render('''\#{"foo" + " bar"} {a: b} ''') def test_selector_interpolation_before_element_name(): assert '''foo barbaz { a: b; } ''' == render('''\#{"foo" + " bar"}baz {a: b} ''') def test_selector_interpolation_in_string(): assert '''foo[val="bar foo bar baz"] { a: b; } ''' == render('''foo[val="bar \#{"foo" + " bar"} baz"] {a: b} ''') def test_selector_interpolation_in_pseudoclass(): assert '''foo:nth-child(5n) { a: b; } ''' == render('''foo:nth-child(\#{5 + "n"}) {a: b} ''') def test_selector_interpolation_at_class_begininng(): assert '''.zzz { a: b; } ''' == render('''$zzz: zzz; .\#{$zzz} { a: b; } ''') def test_selector_interpolation_at_id_begininng(): assert '''#zzz { a: b; } ''' == render('''$zzz: zzz; #\#{$zzz} { a: b; } ''') def test_selector_interpolation_at_pseudo_begininng(): assert ''':zzz::zzz { a: b; } ''' == render('''$zzz: zzz; :\#{$zzz}::\#{$zzz} { a: b; } ''') def test_selector_interpolation_at_attr_beginning(): assert '''[zzz=foo] { a: b; } ''' == render('''$zzz: zzz; [\#{$zzz}=foo] { a: b; } ''') def test_selector_interpolation_at_attr_end(): assert '''[foo=zzz] { a: b; } ''' == render('''$zzz: zzz; [foo=\#{$zzz}] { a: b; } ''') def test_selector_interpolation_at_dashes(): assert '''div { -foo-a-b-foo: foo; } ''' == render('''$a : a; $b : b; div { -foo-\#{$a}-\#{$b}-foo: foo } ''') def test_selector_interpolation_in_reference_combinator(): assert '''.foo /a/ .bar /b|c/ .baz { a: b; } ''' == render('''$a: a; $b: b; $c: c; .foo /\#{$a}/ .bar /\#{$b}|\#{$c}/ .baz {a: b} ''') def test_parent_selector_with_parent_and_subject(): assert '''bar foo.baz! .bip { c: d; } ''' == render('''$subject: "!"; foo { bar &.baz\#{$subject} .bip {c: d}} ''') def test_basic_prop_name_interpolation(): assert '''foo { barbazbang: blip; } ''' == render('''foo {bar\#{"baz" + "bang"}: blip} ''') assert '''foo { bar3: blip; } ''' == render('''foo {bar\#{1 + 2}: blip} ''') def test_prop_name_only_interpolation(): assert '''foo { bazbang: blip; } ''' == render('''foo {\#{"baz" + "bang"}: blip} ''') def test_directive_interpolation(): assert '''@foo bar12 qux { a: b; } ''' == render('''$baz: 12; @foo bar\#{$baz} qux {a: b} ''') def test_media_interpolation(): assert '''@media bar12 { a: b; } ''' == render('''$baz: 12; @media bar\#{$baz} {a: b} ''') def test_script_in_media(): assert '''@media screen and (-webkit-min-device-pixel-ratio: 20), only print { a: b; } ''' == render('''$media1: screen; $media2: print; $var: -webkit-min-device-pixel-ratio; $val: 20; @media \#{$media1} and ($var: $val), only \#{$media2} {a: b} ''') assert '''@media screen and (-webkit-min-device-pixel-ratio: 13) { a: b; } ''' == render('''$vals: 1 2 3; @media screen and (-webkit-min-device-pixel-ratio: 5 + 6 + nth($vals, 2)) {a: b} ''') def test_media_interpolation_with_reparse(): assert '''@media screen and (max-width: 300px) { a: b; } @media screen and (max-width: 300px) { a: b; } @media screen and (max-width: 300px) { a: b; } @media screen and (max-width: 300px), print and (max-width: 300px) { a: b; } ''' == render('''$constraint: "(max-width: 300px)"; $fragment: "nd \#{$constraint}"; $comma: "een, pri"; @media screen and \#{$constraint} {a: b} @media screen { @media \#{$constraint} {a: b} } @media screen a\#{$fragment} {a: b} @media scr\#{$comma}nt { @media \#{$constraint} {a: b} } ''') def test_moz_document_interpolation(): assert '''@-moz-document url(http://sass-lang.com/), url-prefix(http://sass-lang.com/docs), domain(sass-lang.com), domain("sass-lang.com") { .foo { a: b; } } ''' == render('''$domain: "sass-lang.com"; @-moz-document url(http://\#{$domain}/), url-prefix(http://\#{$domain}/docs), domain(\#{$domain}), \#{domain($domain)} { .foo {a: b} } ''') def test_supports_with_expressions(): assert '''@supports (feature1: val) and (feature2: val) or (not (feature23: val4)) { foo { a: b; } } ''' == render('''$query: "(feature1: val)"; $feature: feature2; $val: val; @supports \#{$query} and ($feature: $val) or (not ($feature + 3: $val + 4)) { foo {a: b} } ''') def test_supports_bubbling(): assert '''@supports (foo: bar) { a { b: c; } @supports (baz: bang) { a { d: e; } } } ''' == render('''a { @supports (foo: bar) { b: c; @supports (baz: bang) { d: e; } } } ''') def test_random_directive_interpolation(): assert '''@foo url(http://sass-lang.com/), domain("sass-lang.com"), "foobarbaz", foobarbaz { .foo { a: b; } } ''' == render('''$domain: "sass-lang.com"; @foo url(http://\#{$domain}/), \#{domain($domain)}, "foo\#{'ba' + 'r'}baz", foo\#{'ba' + 'r'}baz { .foo {a: b} } ''') def test_nested_mixin_def(): assert '''foo { a: b; } ''' == render('''foo { @mixin bar {a: b} @include bar; } ''') def test_nested_mixin_shadow(): assert '''foo { c: d; } baz { a: b; } ''' == render('''@mixin bar {a: b} foo { @mixin bar {c: d} @include bar; } baz {@include bar} ''') def test_nested_function_def(): assert '''foo { a: 1; } bar { b: foo(); } ''' == render('''foo { @function foo() {@return 1} a: foo(); } bar {b: foo()} ''') def test_nested_function_shadow(): assert '''foo { a: 2; } baz { b: 1; } ''' == render('''@function foo() {@return 1} foo { @function foo() {@return 2} a: foo(); } baz {b: foo()} ''') ## Errors def test_nested_mixin_def_is_scoped(): with pytest.raises(SyntaxError) as e: render('''foo { @mixin bar {a: b}} bar {@include bar} ''') assert e.sass_line == 3 assert e.message == "Undefined mixin 'bar'." def test_rules_beneath_properties(): with pytest.raises(SyntaxError) as e: render('''foo { bar: { baz { bang: bop }}} ''') assert e.message == 'Illegal nesting: Only properties may be nested beneath properties.' assert e.sass_line == 3 def test_uses_property_exception_with_star_hack(): with pytest.raises(SyntaxError) as e: render('''foo { *bar:baz [fail]; } ''') assert e.message == 'Invalid CSS after " *bar:baz ": expected ";", was "[fail]; }"' assert e.sass_line == 2 def test_uses_property_exception_with_colon_hack(): with pytest.raises(SyntaxError) as e: render('''foo { :bar:baz [fail]; } ''') assert e.message == 'Invalid CSS after " :bar:baz ": expected ";", was "[fail]; }"' assert e.sass_line == 2 def test_uses_rule_exception_with_dot_hack(): with pytest.raises(SyntaxError) as e: render('''foo { .bar:baz ; } ''') assert e.message == 'Invalid CSS after " .bar:baz ": expected "{", was "; }"' assert e.sass_line == 2 def test_uses_property_exception_with_space_after_name(): with pytest.raises(SyntaxError) as e: render('''foo { bar: baz [fail]; } ''') assert e.message == 'Invalid CSS after " bar: baz ": expected ";", was "[fail]; }"' assert e.sass_line == 2 def test_uses_property_exception_with_non_identifier_after_name(): with pytest.raises(SyntaxError) as e: render('''foo { bar:1px [fail]; } ''') assert e.message == 'Invalid CSS after " bar:1px ": expected ";", was "[fail]; }"' assert e.sass_line == 2 def test_uses_property_exception_when_followed_by_open_bracket(): with pytest.raises(SyntaxError) as e: render('''foo { bar:{baz: .fail} } ''') assert e.message == 'Invalid CSS after " bar:{baz: ": expected expression (e.g. 1px, bold), was ".fail} }"' assert e.sass_line == 2 def test_script_error(): with pytest.raises(SyntaxError) as e: render('''foo { bar: "baz" * * } ''') assert e.message == 'Invalid CSS after " bar: "baz" * ": expected expression (e.g. 1px, bold), was "* }"' assert e.sass_line == 2 def test_multiline_script_syntax_error(): with pytest.raises(SyntaxError) as e: render('''foo { bar: "baz" * * } ''') assert e.message == 'Invalid CSS after " "baz" * ": expected expression (e.g. 1px, bold), was "* }"' assert e.sass_line == 3 def test_multiline_script_runtime_error(): with pytest.raises(SyntaxError) as e: render('''foo { bar: "baz" + "bar" + $bang } ''') assert e.message == "Undefined variable: \"$bang\"." assert e.sass_line == 4 def test_post_multiline_script_runtime_error(): with pytest.raises(SyntaxError) as e: render('''foo { bar: "baz" + "bar" + "baz"; bip: $bop; } ''') assert e.message == "Undefined variable: \"$bop\"." assert e.sass_line == 5 def test_multiline_property_runtime_error(): with pytest.raises(SyntaxError) as e: render('''foo { bar: baz bar \#{$bang} } ''') assert e.message == "Undefined variable: \"$bang\"." assert e.sass_line == 4 def test_post_resolution_selector_error(): with pytest.raises(SyntaxError) as e: render("\n\nfoo \#{\") bar\"} {a: b}") assert e.message == 'Invalid CSS after "foo ": expected selector, was ") bar"' assert e.sass_line == 3 def test_parent_in_mid_selector_error(): with pytest.raises(SyntaxError) as e: render('''flim { .foo&.bar {a: b} } ''') assert e.message == '''Invalid CSS after " .foo": expected "{", was "&.bar {a: b}" "&.bar" may only be used at the beginning of a selector.''' def test_parent_after_selector_error(): with pytest.raises(SyntaxError) as e: render('''flim { .foo.bar& {a: b} } ''') assert e.message == '''Invalid CSS after " .foo.bar": expected "{", was "& {a: b}" "&" may only be used at the beginning of a selector.''' def test_double_parent_selector_error(): with pytest.raises(SyntaxError) as e: render('''flim { && {a: b} } ''') assert e.message == '''Invalid CSS after " &": expected "{", was "& {a: b}" "&" may only be used at the beginning of a selector.''' def test_no_lonely_else(): with pytest.raises(SyntaxError) as e: render('''@else {foo: bar} ''') assert e.message == '''Invalid CSS: @else must come after @if''' # Regression def test_reference_combinator_with_parent_ref(): assert '''a /foo/ b { c: d; } ''' == render('''a {& /foo/ b {c: d}} ''') def test_newline_selector_rendered_multiple_times(): assert '''form input, form select { color: white; } form input, form select { color: white; } ''' == render('''@for $i from 1 through 2 { form { input, select { color: white; } } } ''') def test_prop_name_interpolation_after_hyphen(): assert '''a { -foo-bar: b; } ''' == render('''a { -\#{"foo"}-bar: b; } ''') def test_star_plus_and_parent(): assert '''* + html foo { a: b; } ''' == render('''foo {*+html & {a: b}} ''') def test_weird_added_space(): assert '''foo { bar: -moz-bip; } ''' == render('''$value : bip; foo { bar: -moz-\#{$value}; } ''') def test_interpolation_with_bracket_on_next_line(): assert '''a.foo b { color: red; } ''' == render('''a.\#{"foo"} b {color: red} ''') def test_extra_comma_in_mixin_arglist_error(): with pytest.raises(SyntaxError) as e: render('''@mixin foo($a1, $a2) { baz: $a1 $a2; } .bar { @include foo(bar, ); } ''') assert e.message == '''Invalid CSS after "...clude foo(bar, ": expected mixin argument, was ");"''' def test_interpolation(): assert '''ul li#foo a span.label { foo: bar; } ''' == render('''$bar : "#foo"; ul li\#{$bar} a span.label { foo: bar; } ''') def test_mixin_with_keyword_args(): assert '''.mixed { required: foo; arg1: default-val1; arg2: non-default-val2; } ''' == render('''@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin(foo, $arg2: non-default-val2); } ''') def test_passing_required_args_as_a_keyword_arg(): assert '''.mixed { required: foo; arg1: default-val1; arg2: default-val2; } ''' == render('''@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin($required: foo); } ''') def test_passing_all_as_keyword_args_in_opposite_order(): assert '''.mixed { required: foo; arg1: non-default-val1; arg2: non-default-val2; } ''' == render('''@mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) { required: $required; arg1: $arg1; arg2: $arg2; } .mixed { @include a-mixin($arg2: non-default-val2, $arg1: non-default-val1, $required: foo); } ''') def test_keyword_args_in_functions(): assert '''.keyed { color: rgba(170, 119, 204, 0.4); } ''' == render('''.keyed { color: rgba($color: #a7c, $alpha: 0.4) } ''') def test_unknown_keyword_arg_raises_error(): with pytest.raises(SyntaxError) as e: render('''@mixin a($b: 1) { a: $b; } div { @include a(1, $c: 3); } ''') assert e.message == "Mixin a doesn't have an argument named $c." def test_newlines_removed_from_selectors_when_compressed(): assert '''z a,z b{display:block} ''' == render('''a , b { z & { display: block; } } ''', style='compressed') def test_if_error_line(): with pytest.raises(SyntaxError) as e: render('''@if true {foo: bar} }''') assert e.sass_line == 2 def test_multiline_var(): assert '''foo { a: 3; b: false; c: a b c; } ''' == render('''foo { $var1: 1 + 2; $var2: true and false; $var3: a b c; a: $var1; b: $var2; c: $var3; } ''') def test_mixin_content(): assert '''.parent { background-color: red; border-color: red; } .parent .child { background-color: yellow; color: blue; border-color: yellow; } ''' == render('''$color: blue; @mixin context($class, $color: red) { .\#{$class} { background-color: $color; @content; border-color: $color; } } @include context(parent) { @include context(child, $color: yellow) { color: $color; } } ''') def test_empty_content(): assert '''a { b: c; } ''' == render('''@mixin foo { @content } a { b: c; @include foo {} } ''') def test_options_passed_to_script(): assert '''foo{color:#000} ''' == render('''foo {color: darken(black, 10%)} ''', style='compressed') # ref: https://github.com/nex3/sass/issues/104 def test_no_buffer_overflow(): template = '''.aaa { background-color: white; } .aaa .aaa .aaa { background-color: black; } .bbb { @extend .aaa; } .xxx { @extend .bbb; } .yyy { @extend .bbb; } .zzz { @extend .bbb; } ''' scss.Parser(template, "test.scss").parse() pyScss-1.4.0/scss/tests/from_ruby/test_extend.py000066400000000000000000001206621420542636400220360ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import unicode_literals from scss import Scss import pytest # py.test bug: unicode literals not allowed here, so cast to native str type pytestmark = pytest.mark.skipif(str("not config.getoption('include_ruby')")) # TODO undupe def assert_rendering(input, expected, **kwargs): compiler = Scss(scss_opts=dict(compress=False), **kwargs) css = compiler.compile(input) # TODO chumptastic hack; sass and pyscss have slightly different # "non-compressed" output import re css = re.sub(r'(?m)\n *[}]$', ' }\n', css).rstrip("\n") + "\n" #css = re.sub(r'; [}]', ';\n }', css) #css = re.sub(r'\n *[}]$', ' }', css) assert expected == css def test_basic(): assert_rendering('''\ .foo {a: b} .bar {@extend .foo} ''', '''\ .foo, .bar { a: b; } ''') assert_rendering('''\ .bar {@extend .foo} .foo {a: b} ''', '''\ .foo, .bar { a: b; } ''') assert_rendering('''\ .foo {a: b} .bar {c: d; @extend .foo} ''', '''\ .foo, .bar { a: b; } .bar { c: d; } ''') assert_rendering('''\ .foo {a: b} .bar {@extend .foo; c: d} ''', '''\ .foo, .bar { a: b; } .bar { c: d; } ''') def test_multiple_targets(): assert_rendering('''\ .foo {a: b} .bar {@extend .foo} .blip .foo {c: d} ''', '''\ .foo, .bar { a: b; } .blip .foo, .blip .bar { c: d; } ''') def test_multiple_extendees(): assert_rendering('''\ .foo {a: b} .bar {c: d} .baz {@extend .foo; @extend .bar} ''', '''\ .foo, .baz { a: b; } .bar, .baz { c: d; } ''') def test_multiple_extends_with_single_extender_and_single_target(): assert_extends( '.foo .bar', '.baz {@extend .foo; @extend .bar}', '.foo .bar, .baz .bar, .foo .baz, .baz .baz') assert_extends( '.foo.bar', '.baz {@extend .foo; @extend .bar}', '.foo.bar, .baz') def test_multiple_extends_with_multiple_extenders_and_single_target(): assert_rendering('''\ .foo .bar {a: b} .baz {@extend .foo} .bang {@extend .bar} ''', '''\ .foo .bar, .baz .bar, .foo .bang, .baz .bang { a: b; } ''') assert_rendering('''\ .foo.bar {a: b} .baz {@extend .foo} .bang {@extend .bar} ''', '''\ .foo.bar, .bar.baz, .baz.bang, .foo.bang { a: b; } ''') def test_chained_extends(): assert_rendering('''\ .foo {a: b} .bar {@extend .foo} .baz {@extend .bar} .bip {@extend .bar} ''', '''\ .foo, .bar, .baz, .bip { a: b; } ''') def test_dynamic_extendee(): assert_extends( '.foo', '.bar {@extend #{".foo"}}', '.foo, .bar') assert_extends( '[baz^="blip12px"]', '.bar {@extend [baz^="blip#{12px}"]}', '[baz^="blip12px"], .bar') def test_nested_target(): assert_extends( '.foo .bar', '.baz {@extend .bar}', '.foo .bar, .foo .baz') def test_target_with_child(): assert_extends( '.foo .bar', '.baz {@extend .foo}', '.foo .bar, .baz .bar') def test_class_unification(): assert_unification( '.foo.bar', '.baz {@extend .foo}', '.foo.bar, .bar.baz') assert_unification( '.foo.baz', '.baz {@extend .foo}', '.baz') def test_id_unification(): assert_unification( '.foo.bar', '#baz {@extend .foo}', '.foo.bar, .bar#baz') assert_unification( '.foo#baz', '#baz {@extend .foo}', '#baz') # XXX assert_extend_doesnt_match('#bar', '.foo', :failed_to_unify, 2) do assert_unification( '.foo#baz', '#bar {@extend .foo}', '.foo#baz') def test_universal_unification_with_simple_target(): assert_unification( '.foo', '* {@extend .foo}', '.foo, *') assert_unification( '.foo', '*|* {@extend .foo}', '.foo, *|*') assert_unification( '.foo.bar', '* {@extend .foo}', '.bar') assert_unification( '.foo.bar', '*|* {@extend .foo}', '.bar') assert_unification( '.foo.bar', 'ns|* {@extend .foo}', '.foo.bar, ns|*.bar') def test_universal_unification_with_namespaceless_universal_target(): assert_unification( '*.foo', '* {@extend .foo}', '*') assert_unification( '*.foo', '*|* {@extend .foo}', '*') assert_unification( '*|*.foo', '* {@extend .foo}', '*|*.foo, *') assert_unification( '*|*.foo', '*|* {@extend .foo}', '*|*') assert_unification( '*.foo', 'ns|* {@extend .foo}', '*.foo, ns|*') assert_unification( '*|*.foo', 'ns|* {@extend .foo}', '*|*.foo, ns|*') def test_universal_unification_with_namespaced_universal_target(): assert_unification( 'ns|*.foo', '* {@extend .foo}', 'ns|*') assert_unification( 'ns|*.foo', '*|* {@extend .foo}', 'ns|*') # XXX assert_extend_doesnt_match('ns2|*', '.foo', :failed_to_unify, 2) do assert_unification( 'ns1|*.foo', 'ns2|* {@extend .foo}', 'ns1|*.foo') assert_unification( 'ns|*.foo', 'ns|* {@extend .foo}', 'ns|*') def test_universal_unification_with_namespaceless_element_target(): assert_unification( 'a.foo', '* {@extend .foo}', 'a') assert_unification( 'a.foo', '*|* {@extend .foo}', 'a') assert_unification( '*|a.foo', '* {@extend .foo}', '*|a.foo, a') assert_unification( '*|a.foo', '*|* {@extend .foo}', '*|a') assert_unification( 'a.foo', 'ns|* {@extend .foo}', 'a.foo, ns|a') assert_unification( '*|a.foo', 'ns|* {@extend .foo}', '*|a.foo, ns|a') def test_universal_unification_with_namespaced_element_target(): assert_unification( 'ns|a.foo', '* {@extend .foo}', 'ns|a') assert_unification( 'ns|a.foo', '*|* {@extend .foo}', 'ns|a') # XXX assert_extend_doesnt_match('ns2|*', '.foo', :failed_to_unify, 2) do assert_unification( 'ns1|a.foo', 'ns2|* {@extend .foo}', 'ns1|a.foo') assert_unification( 'ns|a.foo', 'ns|* {@extend .foo}', 'ns|a') def test_element_unification_with_simple_target(): assert_unification( '.foo', 'a {@extend .foo}', '.foo, a') assert_unification( '.foo.bar', 'a {@extend .foo}', '.foo.bar, a.bar') assert_unification( '.foo.bar', '*|a {@extend .foo}', '.foo.bar, *|a.bar') assert_unification( '.foo.bar', 'ns|a {@extend .foo}', '.foo.bar, ns|a.bar') def test_element_unification_with_namespaceless_universal_target(): assert_unification( '*.foo', 'a {@extend .foo}', '*.foo, a') assert_unification( '*.foo', '*|a {@extend .foo}', '*.foo, a') assert_unification( '*|*.foo', 'a {@extend .foo}', '*|*.foo, a') assert_unification( '*|*.foo', '*|a {@extend .foo}', '*|*.foo, *|a') assert_unification( '*.foo', 'ns|a {@extend .foo}', '*.foo, ns|a') assert_unification( '*|*.foo', 'ns|a {@extend .foo}', '*|*.foo, ns|a') def test_element_unification_with_namespaced_universal_target(): assert_unification( 'ns|*.foo', 'a {@extend .foo}', 'ns|*.foo, ns|a') assert_unification( 'ns|*.foo', '*|a {@extend .foo}', 'ns|*.foo, ns|a') # XXX assert_extend_doesnt_match('ns2|a', '.foo', :failed_to_unify, 2) do assert_unification( 'ns1|*.foo', 'ns2|a {@extend .foo}', 'ns1|*.foo') assert_unification( 'ns|*.foo', 'ns|a {@extend .foo}', 'ns|*.foo, ns|a') def test_element_unification_with_namespaceless_element_target(): assert_unification( 'a.foo', 'a {@extend .foo}', 'a') assert_unification( 'a.foo', '*|a {@extend .foo}', 'a') assert_unification( '*|a.foo', 'a {@extend .foo}', '*|a.foo, a') assert_unification( '*|a.foo', '*|a {@extend .foo}', '*|a') assert_unification( 'a.foo', 'ns|a {@extend .foo}', 'a.foo, ns|a') assert_unification( '*|a.foo', 'ns|a {@extend .foo}', '*|a.foo, ns|a') # XXX assert_extend_doesnt_match('h1', '.foo', :failed_to_unify, 2) do assert_unification( 'a.foo', 'h1 {@extend .foo}', 'a.foo') def test_element_unification_with_namespaced_element_target(): assert_unification( 'ns|a.foo', 'a {@extend .foo}', 'ns|a') assert_unification( 'ns|a.foo', '*|a {@extend .foo}', 'ns|a') # XXX assert_extend_doesnt_match('ns2|a', '.foo', :failed_to_unify, 2) do assert_unification( 'ns1|a.foo', 'ns2|a {@extend .foo}', 'ns1|a.foo') assert_unification( 'ns|a.foo', 'ns|a {@extend .foo}', 'ns|a') def test_attribute_unification(): assert_unification( '[foo=bar].baz', '[foo=baz] {@extend .baz}', '[foo=bar].baz, [foo=bar][foo=baz]') assert_unification( '[foo=bar].baz', '[foo^=bar] {@extend .baz}', '[foo=bar].baz, [foo=bar][foo^=bar]') assert_unification( '[foo=bar].baz', '[foot=bar] {@extend .baz}', '[foo=bar].baz, [foo=bar][foot=bar]') assert_unification( '[foo=bar].baz', '[ns|foo=bar] {@extend .baz}', '[foo=bar].baz, [foo=bar][ns|foo=bar]') assert_unification( '%-a [foo=bar].bar', '[foo=bar] {@extend .bar}', '-a [foo=bar]') def test_pseudo_unification(): assert_unification( ':foo.baz', ':foo(2n+1) {@extend .baz}', ':foo.baz, :foo:foo(2n+1)') assert_unification( ':foo.baz', '::foo {@extend .baz}', ':foo.baz, :foo::foo') # XXX assert_extend_doesnt_match('::bar', '.baz', :failed_to_unify, 2) do assert_unification( '::foo.baz', '::bar {@extend .baz}', '::foo.baz') # XXX assert_extend_doesnt_match('::foo(2n+1)', '.baz', :failed_to_unify, 2) do assert_unification( '::foo.baz', '::foo(2n+1) {@extend .baz}', '::foo.baz') assert_unification( '::foo.baz', '::foo {@extend .baz}', '::foo') assert_unification( '::foo(2n+1).baz', '::foo(2n+1) {@extend .baz}', '::foo(2n+1)') assert_unification( ':foo.baz', ':bar {@extend .baz}', ':foo.baz, :foo:bar') assert_unification( '.baz:foo', ':after {@extend .baz}', '.baz:foo, :foo:after') assert_unification( '.baz:after', ':foo {@extend .baz}', '.baz:after, :foo:after') assert_unification( ':foo.baz', ':foo {@extend .baz}', ':foo') def test_pseudoelement_remains_at_end_of_selector(): assert_extends( '.foo::bar', '.baz {@extend .foo}', '.foo::bar, .baz::bar') assert_extends( 'a.foo::bar', '.baz {@extend .foo}', 'a.foo::bar, a.baz::bar') def test_pseudoclass_remains_at_end_of_selector(): assert_extends( '.foo:bar', '.baz {@extend .foo}', '.foo:bar, .baz:bar') assert_extends( 'a.foo:bar', '.baz {@extend .foo}', 'a.foo:bar, a.baz:bar') def test_not_remains_at_end_of_selector(): assert_extends( '.foo:not(.bar)', '.baz {@extend .foo}', '.foo:not(.bar), .baz:not(.bar)') def test_pseudoelement_goes_lefter_than_pseudoclass(): assert_extends( '.foo::bar', '.baz:bang {@extend .foo}', '.foo::bar, .baz:bang::bar') assert_extends( '.foo:bar', '.baz::bang {@extend .foo}', '.foo:bar, .baz:bar::bang') def test_pseudoelement_goes_lefter_than_not(): assert_extends( '.foo::bar', '.baz:not(.bang) {@extend .foo}', '.foo::bar, .baz:not(.bang)::bar') assert_extends( '.foo:not(.bang)', '.baz::bar {@extend .foo}', '.foo:not(.bang), .baz:not(.bang)::bar') def test_negation_unification(): assert_unification( ':not(.foo).baz', ':not(.bar) {@extend .baz}', ':not(.foo).baz, :not(.foo):not(.bar)') assert_unification( ':not(.foo).baz', ':not(.foo) {@extend .baz}', ':not(.foo)') assert_unification( ':not([a=b]).baz', ':not([a = b]) {@extend .baz}', ':not([a=b])') def test_comma_extendee(): assert_rendering('''\ .foo {a: b} .bar {c: d} .baz {@extend .foo, .bar} ''', '''\ .foo, .baz { a: b; } .bar, .baz { c: d; } ''') def test_redundant_selector_elimination(): assert_rendering('''\ .foo.bar {a: b} .x {@extend .foo, .bar} .y {@extend .foo, .bar} ''', '''\ .foo.bar, .x, .y { a: b; } ''') ## Long Extendees def test_long_extendee(): assert_extends( '.foo.bar', '.baz {@extend .foo.bar}', '.foo.bar, .baz') def test_long_extendee_requires_all_selectors(): # XXX assert_extend_doesnt_match('.baz', '.foo.bar', :not_found, 2) do assert_extends( '.foo', '.baz {@extend .foo.bar}', '.foo') def test_long_extendee_matches_supersets(): assert_extends( '.foo.bar.bap', '.baz {@extend .foo.bar}', '.foo.bar.bap, .bap.baz') def test_long_extendee_runs_unification(): assert_extends( 'ns|*.foo.bar', 'a.baz {@extend .foo.bar}', 'ns|*.foo.bar, ns|a.baz') ## Long Extenders def test_long_extender(): assert_extends( '.foo.bar', '.baz.bang {@extend .foo}', '.foo.bar, .bar.baz.bang') def test_long_extender_runs_unification(): assert_extends( 'ns|*.foo.bar', 'a.baz {@extend .foo}', 'ns|*.foo.bar, ns|a.bar.baz') def test_long_extender_aborts_unification(): # XXX assert_extend_doesnt_match('h1.baz', '.foo', :failed_to_unify, 2) do assert_extends( 'a.foo#bar', 'h1.baz {@extend .foo}', 'a.foo#bar') # XXX assert_extend_doesnt_match('.bang#baz', '.foo', :failed_to_unify, 2) do assert_extends( 'a.foo#bar', '.bang#baz {@extend .foo}', 'a.foo#bar') ## Nested Extenders def test_nested_extender(): assert_extends( '.foo', 'foo bar {@extend .foo}', '.foo, foo bar') def test_nested_extender_runs_unification(): assert_extends( '.foo.bar', 'foo bar {@extend .foo}', '.foo.bar, foo bar.bar') def test_nested_extender_aborts_unification(): # XXX assert_extend_doesnt_match('foo bar', '.foo', :failed_to_unify, 2) do assert_extends( 'baz.foo', 'foo bar {@extend .foo}', 'baz.foo') def test_nested_extender_alternates_parents(): assert_extends('.baz .bip .foo', 'foo .grank bar {@extend .foo}', '.baz .bip .foo, .baz .bip foo .grank bar, foo .grank .baz .bip bar') def test_nested_extender_unifies_identical_parents(): assert_extends('.baz .bip .foo', '.baz .bip bar {@extend .foo}', '.baz .bip .foo, .baz .bip bar') def test_nested_extender_unifies_common_substring(): assert_extends('.baz .bip .bap .bink .foo', '.brat .bip .bap bar {@extend .foo}', '.baz .bip .bap .bink .foo, .baz .brat .bip .bap .bink bar, .brat .baz .bip .bap .bink bar') def test_nested_extender_unifies_common_subseq(): assert_extends('.a .x .b .y .foo', '.a .n .b .m bar {@extend .foo}', '.a .x .b .y .foo, .a .x .n .b .y .m bar, .a .n .x .b .y .m bar, .a .x .n .b .m .y bar, .a .n .x .b .m .y bar') def test_nested_extender_chooses_first_subseq(): assert_extends('.a .b .c .d .foo', '.c .d .a .b .bar {@extend .foo}', '.a .b .c .d .foo, .a .b .c .d .a .b .bar') def test_nested_extender_counts_extended_subselectors(): assert_extends('.a .bip.bop .foo', '.b .bip .bar {@extend .foo}', '.a .bip.bop .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar') def test_nested_extender_counts_extended_superselectors(): assert_extends('.a .bip .foo', '.b .bip.bop .bar {@extend .foo}', '.a .bip .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar') def test_nested_extender_with_child_selector(): assert_extends( '.baz .foo', 'foo > bar {@extend .foo}', '.baz .foo, .baz foo > bar') def test_nested_extender_finds_common_selectors_around_child_selector(): assert_extends( 'a > b c .c1', 'a c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2') assert_extends( 'a > b c .c1', 'b c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2') def test_nested_extender_doesnt_find_common_selectors_around_adjacent_sibling_selector(): assert_extends( 'a + b c .c1', 'a c .c2 {@extend .c1}', 'a + b c .c1, a + b a c .c2, a a + b c .c2') assert_extends( 'a + b c .c1', 'a b .c2 {@extend .c1}', 'a + b c .c1, a a + b c .c2') assert_extends( 'a + b c .c1', 'b c .c2 {@extend .c1}', 'a + b c .c1, a + b c .c2') def test_nested_extender_doesnt_find_common_selectors_around_sibling_selector(): assert_extends( 'a ~ b c .c1', 'a c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b a c .c2, a a ~ b c .c2') assert_extends( 'a ~ b c .c1', 'a b .c2 {@extend .c1}', 'a ~ b c .c1, a a ~ b c .c2') assert_extends( 'a ~ b c .c1', 'b c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b c .c2') def test_nested_extender_doesnt_find_common_selectors_around_reference_selector(): assert_extends( 'a /for/ b c .c1', 'a c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b a c .c2, a a /for/ b c .c2') assert_extends( 'a /for/ b c .c1', 'a b .c2 {@extend .c1}', 'a /for/ b c .c1, a a /for/ b c .c2') assert_extends( 'a /for/ b c .c1', 'b c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b c .c2') def test_nested_extender_with_early_child_selectors_doesnt_subseq_them(): assert_extends('.bip > .bap .foo', '.grip > .bap .bar {@extend .foo}', '.bip > .bap .foo, .bip > .bap .grip > .bap .bar, .grip > .bap .bip > .bap .bar') assert_extends('.bap > .bip .foo', '.bap > .grip .bar {@extend .foo}', '.bap > .bip .foo, .bap > .bip .bap > .grip .bar, .bap > .grip .bap > .bip .bar') def test_nested_extender_with_child_selector_unifies(): assert_extends( '.baz.foo', 'foo > bar {@extend .foo}', '.baz.foo, foo > bar.baz') assert_rendering('''\ .baz > { .foo {a: b} .bar {@extend .foo} } ''', '''\ .baz > .foo, .baz > .bar { a: b; } ''') assert_rendering('''\ .foo { .bar {a: b} > .baz {@extend .bar} } ''', '''\ .foo .bar, .foo > .baz { a: b; } ''') def test_nested_extender_with_early_child_selectors_doesnt_subseq_them(): assert_rendering('''\ .foo { .bar {a: b} .bip > .baz {@extend .bar} } ''', '''\ .foo .bar, .foo .bip > .baz { a: b; } ''') assert_rendering('''\ .foo { .bip .bar {a: b} > .baz {@extend .bar} } ''', '''\ .foo .bip .bar, .foo .bip .foo > .baz { a: b; } ''') assert_extends( '.foo > .bar', '.bip + .baz {@extend .bar}', '.foo > .bar, .foo > .bip + .baz') assert_extends( '.foo + .bar', '.bip > .baz {@extend .bar}', '.foo + .bar, .bip > .foo + .baz') assert_extends( '.foo > .bar', '.bip > .baz {@extend .bar}', '.foo > .bar, .bip.foo > .baz') def test_nested_extender_with_trailing_child_selector(): with pytest.raises(SyntaxError): # "bar > can't extend: invalid selector" render("bar > {@extend .baz}") def test_nested_extender_with_sibling_selector(): assert_extends( '.baz .foo', 'foo + bar {@extend .foo}', '.baz .foo, .baz foo + bar') def test_nested_extender_with_hacky_selector(): assert_extends('.baz .foo', 'foo + > > + bar {@extend .foo}', '.baz .foo, .baz foo + > > + bar, foo .baz + > > + bar') assert_extends( '.baz .foo', '> > bar {@extend .foo}', '.baz .foo, > > .baz bar') def test_nested_extender_merges_with_same_selector(): assert_rendering('''\ .foo { .bar {a: b} .baz {@extend .bar} } ''', '''\ .foo .bar, .foo .baz { a: b; } ''') def test_nested_extender_with_child_selector_merges_with_same_selector(): assert_extends('.foo > .bar .baz', '.foo > .bar .bang {@extend .baz}', '.foo > .bar .baz, .foo > .bar .bang') # Combinator Unification def test_combinator_unification_for_hacky_combinators(): assert_extends( '.a > + x', '.b y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y') assert_extends( '.a x', '.b > + y {@extend x}', '.a x, .a .b > + y, .b .a > + y') assert_extends( '.a > + x', '.b > + y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y') assert_extends( '.a ~ > + x', '.b > + y {@extend x}', '.a ~ > + x, .a .b ~ > + y, .b .a ~ > + y') assert_extends( '.a + > x', '.b > + y {@extend x}', '.a + > x') assert_extends( '.a + > x', '.b > + y {@extend x}', '.a + > x') assert_extends( '.a ~ > + .b > x', '.c > + .d > y {@extend x}', '.a ~ > + .b > x, .a .c ~ > + .d.b > y, .c .a ~ > + .d.b > y') def test_combinator_unification_double_tilde(): assert_extends( '.a.b ~ x', '.a ~ y {@extend x}', '.a.b ~ x, .a.b ~ y') assert_extends( '.a ~ x', '.a.b ~ y {@extend x}', '.a ~ x, .a.b ~ y') assert_extends( '.a ~ x', '.b ~ y {@extend x}', '.a ~ x, .a ~ .b ~ y, .b ~ .a ~ y, .b.a ~ y') assert_extends( 'a.a ~ x', 'b.b ~ y {@extend x}', 'a.a ~ x, a.a ~ b.b ~ y, b.b ~ a.a ~ y') def test_combinator_unification_tilde_plus(): assert_extends( '.a.b + x', '.a ~ y {@extend x}', '.a.b + x, .a.b + y') assert_extends( '.a + x', '.a.b ~ y {@extend x}', '.a + x, .a.b ~ .a + y, .a.b + y') assert_extends( '.a + x', '.b ~ y {@extend x}', '.a + x, .b ~ .a + y, .b.a + y') assert_extends( 'a.a + x', 'b.b ~ y {@extend x}', 'a.a + x, b.b ~ a.a + y') assert_extends( '.a.b ~ x', '.a + y {@extend x}', '.a.b ~ x, .a.b ~ .a + y, .a.b + y') assert_extends( '.a ~ x', '.a.b + y {@extend x}', '.a ~ x, .a.b + y') assert_extends( '.a ~ x', '.b + y {@extend x}', '.a ~ x, .a ~ .b + y, .a.b + y') assert_extends( 'a.a ~ x', 'b.b + y {@extend x}', 'a.a ~ x, a.a ~ b.b + y') def test_combinator_unification_angle_sibling(): assert_extends( '.a > x', '.b ~ y {@extend x}', '.a > x, .a > .b ~ y') assert_extends( '.a > x', '.b + y {@extend x}', '.a > x, .a > .b + y') assert_extends( '.a ~ x', '.b > y {@extend x}', '.a ~ x, .b > .a ~ y') assert_extends( '.a + x', '.b > y {@extend x}', '.a + x, .b > .a + y') def test_combinator_unification_double_angle(): assert_extends( '.a.b > x', '.b > y {@extend x}', '.a.b > x, .b.a > y') assert_extends( '.a > x', '.a.b > y {@extend x}', '.a > x, .a.b > y') assert_extends( '.a > x', '.b > y {@extend x}', '.a > x, .b.a > y') assert_extends( 'a.a > x', 'b.b > y {@extend x}', 'a.a > x') def test_combinator_unification_double_plus(): assert_extends( '.a.b + x', '.b + y {@extend x}', '.a.b + x, .b.a + y') assert_extends( '.a + x', '.a.b + y {@extend x}', '.a + x, .a.b + y') assert_extends( '.a + x', '.b + y {@extend x}', '.a + x, .b.a + y') assert_extends( 'a.a + x', 'b.b + y {@extend x}', 'a.a + x') def test_combinator_unification_angle_space(): assert_extends( '.a.b > x', '.a y {@extend x}', '.a.b > x, .a.b > y') assert_extends( '.a > x', '.a.b y {@extend x}', '.a > x, .a.b .a > y') assert_extends( '.a > x', '.b y {@extend x}', '.a > x, .b .a > y') assert_extends( '.a.b x', '.a > y {@extend x}', '.a.b x, .a.b .a > y') assert_extends( '.a x', '.a.b > y {@extend x}', '.a x, .a.b > y') assert_extends( '.a x', '.b > y {@extend x}', '.a x, .a .b > y') def test_combinator_unification_plus_space(): assert_extends( '.a.b + x', '.a y {@extend x}', '.a.b + x, .a .a.b + y') assert_extends( '.a + x', '.a.b y {@extend x}', '.a + x, .a.b .a + y') assert_extends( '.a + x', '.b y {@extend x}', '.a + x, .b .a + y') assert_extends( '.a.b x', '.a + y {@extend x}', '.a.b x, .a.b .a + y') assert_extends( '.a x', '.a.b + y {@extend x}', '.a x, .a .a.b + y') assert_extends( '.a x', '.b + y {@extend x}', '.a x, .a .b + y') def test_combinator_unification_nested(): assert_extends( '.a > .b + x', '.c > .d + y {@extend x}', '.a > .b + x, .c.a > .d.b + y') assert_extends( '.a > .b + x', '.c > y {@extend x}', '.a > .b + x, .c.a > .b + y') def test_combinator_unification_with_newlines(): assert_rendering('''\ .a > .b + x {a: b} .c > .d + y {@extend x} ''', '''\ .a > .b + x, .c.a > .d.b + y { a: b; } ''') # Loops def test_extend_self_loop(): assert_rendering('''\ .foo {a: b; @extend .foo} ''', '''\ .foo { a: b; } ''') def test_basic_extend_loop(): assert_rendering('''\ .foo {a: b; @extend .bar} .bar {c: d; @extend .foo} ''', '''\ .bar, .foo { a: b; } .foo, .bar { c: d; } ''') def test_three_level_extend_loop(): assert_rendering('''\ .foo {a: b; @extend .bar} .bar {c: d; @extend .baz} .baz {e: f; @extend .foo} ''', '''\ .baz, .bar, .foo { a: b; } .foo, .baz, .bar { c: d; } .bar, .foo, .baz { e: f; } ''') def test_nested_extend_loop(): assert_rendering('''\ .bar { a: b; .foo {c: d; @extend .bar} } ''', '''\ .bar, .bar .foo { a: b; } .bar .foo { c: d; } ''') def test_multiple_extender_merges_with_superset_selector(): assert_rendering('''\ .foo {@extend .bar; @extend .baz} a.bar.baz {a: b} ''', '''\ a.bar.baz, a.foo { a: b; } ''') def test_control_flow_if(): assert_rendering('''\ .true { color: green; } .false { color: red; } .also-true { @if true { @extend .true; } @else { @extend .false; } } .also-false { @if false { @extend .true; } @else { @extend .false; } } ''', '''\ .true, .also-true { color: green; } .false, .also-false { color: red; } ''') def test_control_flow_for(): assert_rendering('''\ .base-0 { color: green; } .base-1 { display: block; } .base-2 { border: 1px solid blue; } .added { @for $i from 0 to 3 { @extend .base-\#{$i}; } } ''', '''\ .base-0, .added { color: green; } .base-1, .added { display: block; } .base-2, .added { border: 1px solid blue; } ''') def test_control_flow_while(): assert_rendering('''\ .base-0 { color: green; } .base-1 { display: block; } .base-2 { border: 1px solid blue; } .added { $i : 0; @while $i < 3 { @extend .base-\#{$i}; $i : $i + 1; } } ''', '''\ .base-0, .added { color: green; } .base-1, .added { display: block; } .base-2, .added { border: 1px solid blue; } ''') def test_basic_placeholder_selector(): assert_extends( '%foo', '.bar {@extend %foo}', '.bar') def test_unused_placeholder_selector(): assert_rendering('''\ %foo {color: blue} %bar {color: red} .baz {@extend %foo} ''', '''\ .baz { color: blue; } ''') def test_placeholder_descendant_selector(): assert_extends( '#context %foo a', '.bar {@extend %foo}', '#context .bar a') def test_semi_placeholder_selector(): assert_rendering('''\ #context %foo, .bar .baz {color: blue} ''', '''\ .bar .baz { color: blue; } ''') def test_placeholder_selector_with_multiple_extenders(): assert_rendering('''\ %foo {color: blue} .bar {@extend %foo} .baz {@extend %foo} ''', '''\ .bar, .baz { color: blue; } ''') def test_placeholder_selector_as_modifier(): # XXX assert_extend_doesnt_match('div', '%foo', :failed_to_unify, 3) do assert_rendering('''\ a%foo.baz {color: blue} .bar {@extend %foo} div {@extend %foo} ''', '''\ a.baz.bar { color: blue; } ''') def test_placeholder_interpolation(): assert_rendering('''\ $foo: foo; %\#{$foo} {color: blue} .bar {@extend %foo} ''', '''\ .bar { color: blue; } ''') def test_media_in_placeholder_selector(): assert_rendering('''\ %foo {bar {@media screen {a: b}}} .baz {c: d} ''', '''\ .baz { c: d; } ''') """ def test_extend_out_of_media(): assert_warning(< .foo', 'foo bar {@extend .foo}', '> .foo, > foo bar') def test_nested_selector_with_child_selector_hack_extender(): assert_extends( '.foo .bar', '> foo bar {@extend .bar}', '.foo .bar, > .foo foo bar, > foo .foo bar') def test_nested_selector_with_child_selector_hack_extender_and_extendee(): assert_extends( '> .foo', '> foo bar {@extend .foo}', '> .foo, > foo bar') def test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee(): assert_extends( '~ .foo', '> foo bar {@extend .foo}', '~ .foo') def test_nested_selector_with_child_selector_hack_extender_and_extendee_and_newline(): assert_rendering('''\ > .foo {a: b} flip, > foo bar {@extend .foo} ''', '''\ > .foo, > flip, > foo bar { a: b; } ''') def test_extended_parent_and_child_redundancy_elimination(): assert_rendering('''\ a { b {a: b} c {@extend b} } d {@extend a} ''', '''\ a b, d b, a c, d c { a: b; } ''') def test_extend_redundancy_elimination_when_it_would_reduce_specificity(): assert_extends( 'a', 'a.foo {@extend a}', 'a, a.foo') def test_extend_redundancy_elimination_when_it_would_preserve_specificity(): assert_extends( '.bar a', 'a.foo {@extend a}', '.bar a') def test_extend_redundancy_elimination_never_eliminates_base_selector(): assert_extends( 'a.foo', '.foo {@extend a}', 'a.foo, .foo') def test_extend_cross_branch_redundancy_elimination(): assert_rendering('''\ %x c %y {a: b} a, b {@extend %x} a d {@extend %y} ''', '''\ a c d, b c a d { a: b; } ''') assert_rendering('''\ e %z {a: b} %x c %y {@extend %z} a, b {@extend %x} a d {@extend %y} ''', '''\ e a c d, a c e d, e b c a d, b c a e d { a: b; } ''') """ def assert_extend_doesnt_match(extender, target, reason, line, syntax = :scss): warn = "\"#{extender}\" failed to @extend \"#{target}\"." reason = if reason == :not_found "The selector \"#{target}\" was not found." else "No selectors matching \"#{target}\" could be unified with \"#{extender}\"." assert_warning(< <= >=), boolean # Types: numbers, colors, strings, booleans, lists # Test them all! def test_addition(): # Numbers are a little complicated, what with all the units # Simple case assert Number(123) + Number(456) == Number(579) # Simple equal units assert Number(1, "px") + Number(2, "px") == Number(3, "px") # Unitless values inherit units of the other operand assert Number(5) + Number(6, "px") == Number(11, "px") # Zero values can cast to any units assert Number(0, "in") + Number(24, "deg") == Number(24, "deg") # With different units, the left operand wins assert Number(10, "cm") + Number(100, "mm") == Number(20, "cm") assert Number(100, "mm") + Number(10, "cm") == Number(200, "mm") # Unconvertible units raise an error with pytest.raises(ValueError): Number(1, "px") + Number(1, "em") # Adding anything to a string makes a string assert Number(123) + String('abc') == String('123abc') assert String('abc') + Number(123) == String('abc123') ret = String('abc', quotes=None) + String('def', quotes=None) assert ret == String('abcdef') assert ret.quotes is None ret = String('abc', quotes='"') + String('def', quotes=None) assert ret == String('abcdef') assert ret.quotes == '"' ret = String('abc', quotes=None) + String('def', quotes='"') assert ret == String('abcdef') assert ret.quotes is None assert Color.from_hex('#010305') + Color.from_hex('#050301') == Color.from_hex('#060606') assert Color.from_name('white') + Color.from_name('white') == Color.from_name('white') def test_subtraction(): assert Number(123) - Number(456) == Number(-333) assert Number(456) - Number(123) == Number(333) # TODO test that subtracting e.g. strings doesn't work assert Color.from_hex('#0f0f0f') - Color.from_hex('#050505') == Color.from_hex('#0a0a0a') def test_division(): assert Number(5, "px") / Number(5, "px") == Number(1) assert Number(1, "in") / Number(6, "pt") == Number(12) def test_comparison_numeric(): lo = Number(123) hi = Number(456) assert lo < hi assert lo <= hi assert lo <= lo assert hi > lo assert hi >= lo assert hi >= hi assert lo == lo assert lo != hi # Same tests, negated assert not lo > hi assert not lo >= hi assert not hi < lo assert not hi <= lo assert not lo != lo assert not lo == hi # Numbers with units should also auto-cast numbers with units units = Number(123, "px") plain = Number(123) assert units == plain assert units <= plain assert units >= plain assert not units != plain assert not units < plain assert not units > plain # Incompatible units have... rules. ems = Number(100, "em") pxs = Number(100, "px") with pytest.raises(ValueError): ems < pxs with pytest.raises(ValueError): ems > pxs with pytest.raises(ValueError): ems <= pxs with pytest.raises(ValueError): ems >= pxs assert not ems == pxs assert ems != pxs def test_comparison_stringerific(): abc = String('abc') xyz = String('xyz') assert abc == abc assert abc != xyz assert not abc == xyz assert not abc != abc # Interaction with other types assert Number(123) != String('123') assert String('123') != Number(123) # Sass strings don't support ordering with pytest.raises(TypeError): abc < xyz with pytest.raises(TypeError): abc <= xyz with pytest.raises(TypeError): abc > xyz with pytest.raises(TypeError): abc >= xyz with pytest.raises(TypeError): Number(123) < String('123') def test_comparison_null(): null = Null() assert null == null assert null != Number(0) with pytest.raises(TypeError): null < null def test_unrenderable(): # Empty lists can't be rendered as CSS with pytest.raises(ValueError): List([]).render() # TODO write more! i'm lazy. pyScss-1.4.0/scss/tests/util.py000066400000000000000000000004251420542636400164530ustar00rootroot00000000000000"""Test utilities.""" from __future__ import absolute_import import pytest try: import PIL except ImportError: try: import Image as PIL except ImportError: PIL = None needs_PIL = pytest.mark.skipif(PIL is None, reason='image tests require PIL') pyScss-1.4.0/scss/tool.py000066400000000000000000000413541420542636400153170ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import absolute_import from __future__ import print_function from collections import deque from contextlib import contextmanager import logging import os import re import sys from scss import config from scss.calculator import Calculator from scss.compiler import _prop_split_re from scss.compiler import Compiler from scss.errors import SassEvaluationError from scss.legacy import Scss from scss.legacy import _default_scss_vars from scss.namespace import Namespace from scss.rule import SassRule from scss.rule import UnparsedBlock from scss.scss_meta import BUILD_INFO from scss.source import SourceFile from scss.util import profiling try: raw_input except NameError: raw_input = input log = logging.getLogger(__name__) logging.getLogger('scss').setLevel(logging.INFO) def main(): logging.basicConfig(format="%(levelname)s: %(message)s") from optparse import OptionGroup, OptionParser, SUPPRESS_HELP if hasattr(config.LOAD_PATHS, 'split'): initial_load_paths = [p.strip() for p in config.LOAD_PATHS.split(',')] else: initial_load_paths = list(config.LOAD_PATHS) def append_load_path(option, opt_str, value, parser): dest = getattr(parser.values, option.dest) paths = value.replace(os.pathsep, ',').replace(';', ',').split(',') for path in paths: path = path.strip() if path and path not in dest: dest.append(path) parser = OptionParser(usage="Usage: %prog [options] [file]", description="Converts Scss files to CSS.", add_help_option=False) parser.add_option("-i", "--interactive", action="store_true", help="Run an interactive Scss shell") parser.add_option("-w", "--watch", metavar="DIR", help="Watch the files in DIR, and recompile when they change") parser.add_option("-r", "--recursive", action="store_true", default=False, help="Also watch directories inside of the watch directory") parser.add_option("-o", "--output", metavar="PATH", help="Write output to PATH (a directory if using watch, a file otherwise)") parser.add_option("-s", "--suffix", metavar="STRING", help="If using watch, a suffix added to the output filename (i.e. filename.STRING.css)") parser.add_option("--time", action="store_true", help="Ignored, will be removed in 2.0") parser.add_option("--debug-info", action="store_true", help="Turns on scss's debugging information") parser.add_option("--no-debug-info", action="store_false", dest="debug_info", default=False, help="Turns off scss's debugging information") parser.add_option("-T", "--test", action="store_true", help=SUPPRESS_HELP) parser.add_option("-t", "--style", metavar="NAME", dest="style", default='nested', help="Output style. Can be nested (default), compact, compressed, or expanded.") parser.add_option("-C", "--no-compress", action="store_false", dest="style", default=True, help="Don't minify outputted CSS") parser.add_option("-?", action="help", help=SUPPRESS_HELP) parser.add_option("-h", "--help", action="help", help="Show this message and exit") parser.add_option("-v", "--version", action="store_true", help="Print version and exit") paths_group = OptionGroup(parser, "Resource Paths") paths_group.add_option("-I", "--load-path", metavar="PATH", type="string", action="callback", callback=append_load_path, dest="load_paths", default=initial_load_paths, help="Add a scss import path, may be given multiple times") paths_group.add_option("-S", "--static-root", metavar="PATH", dest="static_root", help="Static root path (Where images and static resources are located)") paths_group.add_option("-A", "--assets-root", metavar="PATH", dest="assets_root", help="Assets root path (Sprite images will be created here)") paths_group.add_option("-a", "--assets-url", metavar="URL", dest="assets_url", help="URL to reach the files in your assets_root") paths_group.add_option("-F", "--fonts-root", metavar="PATH", dest="fonts_root", help="Fonts root path (Where fonts are located)") paths_group.add_option("-f", "--fonts-url", metavar="PATH", dest="fonts_url", help="URL to reach the fonts in your fonts_root") paths_group.add_option("--images-root", metavar="PATH", dest="images_root", help="Images root path (Where images are located)") paths_group.add_option("--images-url", metavar="PATH", dest="images_url", help="URL to reach the images in your images_root") paths_group.add_option("--cache-root", metavar="PATH", dest="cache_root", help="Cache root path (Cache files will be created here)") parser.add_option_group(paths_group) parser.add_option("--sass", action="store_true", dest="is_sass", default=None, help="Sass mode") options, args = parser.parse_args() # General runtime configuration if options.static_root is not None: config.STATIC_ROOT = options.static_root if options.assets_root is not None: config.ASSETS_ROOT = options.assets_root if options.fonts_root is not None: config.FONTS_ROOT = options.fonts_root if options.fonts_url is not None: config.FONTS_URL = options.fonts_url if options.images_root is not None: config.IMAGES_ROOT = options.images_root if options.images_url is not None: config.IMAGES_URL = options.images_url if options.cache_root is not None: config.CACHE_ROOT = options.cache_root if options.assets_url is not None: config.ASSETS_URL = options.assets_url # Execution modes if options.test: run_tests() elif options.version: print_version() elif options.interactive: run_repl(options) elif options.watch: watch_sources(options) else: do_build(options, args) def print_version(): print(BUILD_INFO) def run_tests(): try: import pytest except ImportError: raise ImportError("You need py.test installed to run the test suite.") pytest.main("") # don't let py.test re-consume our arguments def do_build(options, args): if options.output is not None: out = open(options.output, 'wb') else: out = sys.stdout # Get the unencoded stream on Python 3 out = getattr(out, 'buffer', out) css = Scss(scss_opts={ 'style': options.style, 'debug_info': options.debug_info, }, search_paths=options.load_paths, ) if not args: args = ['-'] source_files = [] for path in args: if path == '-': source = SourceFile.from_file(sys.stdin, relpath="", is_sass=options.is_sass) else: source = SourceFile.from_filename(path, is_sass=options.is_sass) source_files.append(source) encodings = set(source.encoding for source in source_files) if len(encodings) > 1: sys.stderr.write( "Can't combine these files! " "They have different encodings: {0}\n" .format(', '.join(encodings)) ) sys.exit(3) output = css.compile(source_files=source_files) out.write(output.encode(source_files[0].encoding)) for f, t in profiling.items(): sys.stderr.write("%s took %03fs" % (f, t)) def watch_sources(options): import time try: from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler except ImportError: sys.stderr.write("Using watch functionality requires the `watchdog` library: http://pypi.python.org/pypi/watchdog/") sys.exit(1) if options.output and not os.path.isdir(options.output): sys.stderr.write("watch file output directory is invalid: '%s'" % (options.output)) sys.exit(2) class ScssEventHandler(PatternMatchingEventHandler): def __init__(self, *args, **kwargs): super(ScssEventHandler, self).__init__(*args, **kwargs) self.css = Scss(scss_opts={ 'style': options.style, 'debug_info': options.debug_info, }, search_paths=options.load_paths, ) self.output = options.output self.suffix = options.suffix def is_valid(self, path): return os.path.isfile(path) and (path.endswith('.scss') or path.endswith('.sass')) and not os.path.basename(path).startswith('_') def process(self, path): if os.path.isdir(path): for f in os.listdir(path): full = os.path.join(path, f) if self.is_valid(full): self.compile(full) elif self.is_valid(path): self.compile(path) def compile(self, src_path): fname = os.path.basename(src_path) if fname.endswith('.scss') or fname.endswith('.sass'): fname = fname[:-5] if self.suffix: fname += '.' + self.suffix fname += '.css' else: # you didn't give me a file of the correct type! return False if self.output: dest_path = os.path.join(self.output, fname) else: dest_path = os.path.join(os.path.dirname(src_path), fname) print("Compiling %s => %s" % (src_path, dest_path)) dest_file = open(dest_path, 'wb') dest_file.write(self.css.compile(scss_file=src_path).encode('utf-8')) def on_moved(self, event): super(ScssEventHandler, self).on_moved(event) self.process(event.dest_path) def on_created(self, event): super(ScssEventHandler, self).on_created(event) self.process(event.src_path) def on_modified(self, event): super(ScssEventHandler, self).on_modified(event) self.process(event.src_path) event_handler = ScssEventHandler(patterns=['*.scss', '*.sass']) observer = Observer() observer.schedule(event_handler, path=options.watch, recursive=options.recursive) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() @contextmanager def readline_history(fn): try: import readline except ImportError: yield return try: readline.read_history_file(fn) except IOError: pass try: yield finally: try: readline.write_history_file(fn) except IOError: pass def run_repl(is_sass=False): repl = SassRepl() with readline_history(os.path.expanduser('~/.scss-history')): print("Welcome to %s interactive shell" % (BUILD_INFO,)) while True: try: in_ = raw_input('>>> ').strip() for output in repl(in_): print(output) except (EOFError, KeyboardInterrupt): print("Bye!") return class SassRepl(object): def __init__(self, is_sass=False): # TODO it would be lovely to get these out of here, somehow self.namespace = Namespace(variables=_default_scss_vars) self.compiler = Compiler(namespace=self.namespace) self.compilation = self.compiler.make_compilation() self.legacy_compiler_options = {} self.source_file = SourceFile.from_string('', '', is_sass=is_sass) self.calculator = Calculator(self.namespace) def __call__(self, s): # TODO this is kind of invasive; surely it's possible to do this # without calling only private methods from pprint import pformat if s in ('exit', 'quit'): raise KeyboardInterrupt for s in s.split(';'): s = self.source_file.prepare_source(s.strip()) if not s: continue elif s.startswith('@'): scope = None properties = [] children = deque() rule = SassRule(self.source_file, namespace=self.namespace, legacy_compiler_options=self.legacy_compiler_options, properties=properties) block = UnparsedBlock(rule, 1, s, None) code, name = (s.split(None, 1) + [''])[:2] if code == '@option': self.compilation._at_options(self.calculator, rule, scope, block) continue elif code == '@import': # TODO this doesn't really work either since there's no path self.compilation._at_import(self.calculator, rule, scope, block) continue elif code == '@include': final_cont = '' self.compilation._at_include(self.calculator, rule, scope, block) code = self.compilation._print_properties(properties).rstrip('\n') if code: final_cont += code if children: # TODO this almost certainly doesn't work, and is kind of goofy anyway since @mixin isn't supported self.compilation.children.extendleft(children) self.compilation.parse_children() code = self.compilation._create_css(self.compilation.rules).rstrip('\n') if code: final_cont += code yield final_cont continue elif s == 'ls' or s.startswith('show(') or s.startswith('show ') or s.startswith('ls(') or s.startswith('ls '): m = re.match(r'(?:show|ls)(\()?\s*([^,/\\) ]*)(?:[,/\\ ]([^,/\\ )]+))*(?(1)\))', s, re.IGNORECASE) if m: name = m.group(2) code = m.group(3) name = name and name.strip().rstrip('s') # remove last 's' as in functions code = code and code.strip() ns = self.namespace if not name: yield pformat(list(sorted(['vars', 'options', 'mixins', 'functions']))) elif name in ('v', 'var', 'variable'): variables = dict(ns._variables) if code == '*': pass elif code: variables = dict((k, v) for k, v in variables.items() if code in k) else: variables = dict((k, v) for k, v in variables.items() if not k.startswith('$--')) yield pformat(variables) elif name in ('o', 'opt', 'option'): opts = self.legacy_compiler_options if code == '*': pass elif code: opts = dict((k, v) for k, v in opts.items() if code in k) else: opts = dict((k, v) for k, v in opts.items()) yield pformat(opts) elif name in ('m', 'mix', 'mixin', 'f', 'func', 'funct', 'function'): if name.startswith('m'): funcs = dict(ns._mixins) elif name.startswith('f'): funcs = dict(ns._functions) if code == '*': pass elif code: funcs = dict((k, v) for k, v in funcs.items() if code in k[0]) else: pass # TODO print source when possible yield pformat(funcs) continue elif s.startswith('$') and (':' in s or '=' in s): prop, value = [a.strip() for a in _prop_split_re.split(s, 1)] prop = self.calculator.do_glob_math(prop) value = self.calculator.calculate(value) self.namespace.set_variable(prop, value) continue # TODO respect compress? try: yield(self.calculator.calculate(s).render()) except (SyntaxError, SassEvaluationError) as e: print("%s" % e, file=sys.stderr) if __name__ == "__main__": main() pyScss-1.4.0/scss/types.py000066400000000000000000001231751420542636400155100ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals try: from collections.abc import Iterable except ImportError: from collections import Iterable import colorsys from fractions import Fraction import operator import re import string from warnings import warn import six from scss.cssdefs import COLOR_LOOKUP, COLOR_NAMES, ZEROABLE_UNITS, convert_units_to_base_units, cancel_base_units, count_base_units PRECISION = 5 ############################################################################### # pyScss data types: # TODO make Value work as a string in every way? i.e. have a .quotes... class Value(object): is_null = False sass_type_name = 'unknown' def __repr__(self): return "<{0}: {1!r}>".format(type(self).__name__, self.value) # Sass values are all true, except for booleans and nulls def __bool__(self): return True def __nonzero__(self): # Py 2's name for __bool__ return self.__bool__() # All Sass scalars also act like one-element spaced lists use_comma = False def __iter__(self): return iter((self,)) def __len__(self): return 1 def __getitem__(self, key): if key not in (-1, 0): raise IndexError(key) return self def __contains__(self, item): return self == item ### NOTE: From here on down, the operators are exposed to Sass code and ### thus should ONLY return Sass types # Reasonable default for equality def __eq__(self, other): return Boolean( type(self) == type(other) and self.value == other.value) def __ne__(self, other): return Boolean(not self.__eq__(other)) # Only numbers support ordering def __lt__(self, other): raise TypeError("Can't compare %r with %r" % (self, other)) def __le__(self, other): raise TypeError("Can't compare %r with %r" % (self, other)) def __gt__(self, other): raise TypeError("Can't compare %r with %r" % (self, other)) def __ge__(self, other): raise TypeError("Can't compare %r with %r" % (self, other)) # Math ops def __add__(self, other): # Default behavior is to treat both sides like strings if isinstance(other, String): return String(self.render() + other.value, quotes=other.quotes) return String(self.render() + other.render()) def __sub__(self, other): # Default behavior is to treat the whole expression like one string return String.unquoted(self.render() + "-" + other.render()) def __div__(self, other): return String.unquoted(self.render() + "/" + other.render()) # Sass types have no notion of floor vs true division def __truediv__(self, other): return self.__div__(other) def __floordiv__(self, other): return self.__div__(other) def __mul__(self, other): return NotImplemented def __pos__(self): return String("+" + self.render()) def __neg__(self): return String("-" + self.render()) def to_dict(self): """Return the Python dict equivalent of this map. If this type can't be expressed as a map, raise. """ return dict(self.to_pairs()) def to_pairs(self): """Return the Python list-of-tuples equivalent of this map. Note that this is different from ``self.to_dict().items()``, because Sass maps preserve order. If this type can't be expressed as a map, raise. """ raise ValueError("Not a map: {0!r}".format(self)) def render(self, compress=False): """Return this value's CSS representation as a string (text, i.e. unicode!). If `compress` is true, try hard to shorten the string at the cost of readability. """ raise NotImplementedError def render_interpolated(self, compress=False): """Return this value's string representation as appropriate for returning from an interpolation. """ return self.render(compress) class Null(Value): is_null = True sass_type_name = 'null' def __init__(self, value=None): pass def __str__(self): return self.sass_type_name def __repr__(self): return "<{0}>".format(type(self).__name__) def __hash__(self): return hash(None) def __bool__(self): return False def __eq__(self, other): return Boolean(isinstance(other, Null)) def __ne__(self, other): return Boolean(not self.__eq__(other)) def render(self, compress=False): return self.sass_type_name def render_interpolated(self, compress=False): # Interpolating a null gives you nothing. return '' class Undefined(Null): sass_type_name = 'undefined' def __init__(self, value=None): pass def __add__(self, other): return self def __radd__(self, other): return self def __sub__(self, other): return self def __rsub__(self, other): return self def __div__(self, other): return self def __rdiv__(self, other): return self def __truediv__(self, other): return self def __rtruediv__(self, other): return self def __floordiv__(self, other): return self def __rfloordiv__(self, other): return self def __mul__(self, other): return self def __rmul__(self, other): return self def __pos__(self): return self def __neg__(self): return self class Boolean(Value): sass_type_name = 'bool' def __init__(self, value): self.value = bool(value) def __str__(self): return 'true' if self.value else 'false' def __hash__(self): return hash(self.value) def __bool__(self): return self.value def render(self, compress=False): if self.value: return 'true' else: return 'false' class Number(Value): sass_type_name = 'number' def __init__(self, amount, unit=None, unit_numer=(), unit_denom=()): if isinstance(amount, Number): assert not unit and not unit_numer and not unit_denom self.value = amount.value self.unit_numer = amount.unit_numer self.unit_denom = amount.unit_denom return # Numbers with units are stored internally as a "base" unit, which can # involve float division, which can lead to precision errors in obscure # cases. Storing the original units would only partially solve this # problem, because there'd still be a possible loss of precision when # converting in Sass-land. Almost all of the conversion factors are # simple ratios of small whole numbers, so using Fraction across the # board preserves as much precision as possible. # TODO in fact, i wouldn't mind parsing Sass values as fractions of a # power of ten! # TODO this slowed the test suite down by about 10%, ha if isinstance(amount, (int, float)): amount = Fraction.from_float(amount) elif isinstance(amount, Fraction): pass else: raise TypeError("Expected number, got %r" % (amount,)) if unit is not None: unit_numer = unit_numer + (unit.lower(),) # Cancel out any convertable units on the top and bottom numerator_base_units = count_base_units(unit_numer) denominator_base_units = count_base_units(unit_denom) # Count which base units appear both on top and bottom cancelable_base_units = {} for unit, count in numerator_base_units.items(): cancelable_base_units[unit] = min( count, denominator_base_units.get(unit, 0)) # Actually remove the units numer_factor, unit_numer = cancel_base_units(unit_numer, cancelable_base_units) denom_factor, unit_denom = cancel_base_units(unit_denom, cancelable_base_units) # And we're done self.unit_numer = tuple(unit_numer) self.unit_denom = tuple(unit_denom) self.value = amount * (numer_factor / denom_factor) def __repr__(self): value = self.value int_value = int(value) if value == int_value: value = int_value full_unit = ' * '.join(self.unit_numer) if self.unit_denom: full_unit += ' / ' full_unit += ' * '.join(self.unit_denom) if full_unit: full_unit = ' ' + full_unit return "<{0} {1}{2}>".format(type(self).__name__, value, full_unit) def __hash__(self): return hash((self.value, self.unit_numer, self.unit_denom)) def __int__(self): return int(self.value) def __float__(self): return float(self.value) def __pos__(self): return self def __neg__(self): return self * Number(-1) def __str__(self): return self.render() def __eq__(self, other): if not isinstance(other, Number): return Boolean(False) return self._compare(other, operator.__eq__, soft_fail=True) def __lt__(self, other): return self._compare(other, operator.__lt__) def __le__(self, other): return self._compare(other, operator.__le__) def __gt__(self, other): return self._compare(other, operator.__gt__) def __ge__(self, other): return self._compare(other, operator.__ge__) def _compare(self, other, op, soft_fail=False): if not isinstance(other, Number): raise TypeError("Can't compare %r and %r" % (self, other)) # A unitless operand is treated as though it had the other operand's # units, and zero values can cast to anything, so in both cases the # units can be ignored if (self.is_unitless or other.is_unitless or self.value == 0 or other.value == 0): left = self right = other else: left = self.to_base_units() right = other.to_base_units() if left.unit_numer != right.unit_numer or left.unit_denom != right.unit_denom: if soft_fail: # Used for equality only, where == should never fail return Boolean(False) else: raise ValueError("Can't reconcile units: %r and %r" % (self, other)) return Boolean(op(round(left.value, PRECISION), round(right.value, PRECISION))) def __pow__(self, exp): if not isinstance(exp, Number): raise TypeError("Can't raise %r to power %r" % (self, exp)) if not exp.is_unitless: raise TypeError("Exponent %r cannot have units" % (exp,)) if self.is_unitless: return Number(self.value ** exp.value) # Units can only be exponentiated to integral powers -- what's the # square root of 'px'? (Well, it's sqrt(px), but supporting that is # a bit out of scope.) if exp.value != int(exp.value): raise ValueError("Can't raise units of %r to non-integral power %r" % (self, exp)) return Number( self.value ** int(exp.value), unit_numer=self.unit_numer * int(exp.value), unit_denom=self.unit_denom * int(exp.value), ) def __mul__(self, other): if not isinstance(other, Number): return NotImplemented amount = self.value * other.value numer = self.unit_numer + other.unit_numer denom = self.unit_denom + other.unit_denom return Number(amount, unit_numer=numer, unit_denom=denom) def __div__(self, other): if not isinstance(other, Number): return NotImplemented amount = self.value / other.value numer = self.unit_numer + other.unit_denom denom = self.unit_denom + other.unit_numer return Number(amount, unit_numer=numer, unit_denom=denom) def __mod__(self, other): if not isinstance(other, Number): return NotImplemented amount = self.value % other.value if self.is_unitless: return Number(amount) if not other.is_unitless: left = self.to_base_units() right = other.to_base_units() if left.unit_numer != right.unit_numer or left.unit_denom != right.unit_denom: raise ValueError("Can't reconcile units: %r and %r" % (self, other)) return Number(amount, unit_numer=self.unit_numer, unit_denom=self.unit_denom) def __add__(self, other): # Numbers auto-cast to strings when added to other strings if isinstance(other, String): return String(self.render(), quotes=None) + other return self._add_sub(other, operator.add) def __sub__(self, other): return self._add_sub(other, operator.sub) def _add_sub(self, other, op): """Implements both addition and subtraction.""" if not isinstance(other, Number): return NotImplemented # If either side is unitless, inherit the other side's units. Skip all # the rest of the conversion math, too. if self.is_unitless or other.is_unitless: return Number( op(self.value, other.value), unit_numer=self.unit_numer or other.unit_numer, unit_denom=self.unit_denom or other.unit_denom, ) # Likewise, if either side is zero, it can auto-cast to any units if self.value == 0: return Number( op(self.value, other.value), unit_numer=other.unit_numer, unit_denom=other.unit_denom, ) elif other.value == 0: return Number( op(self.value, other.value), unit_numer=self.unit_numer, unit_denom=self.unit_denom, ) # Reduce both operands to the same units left = self.to_base_units() right = other.to_base_units() if left.unit_numer != right.unit_numer or left.unit_denom != right.unit_denom: raise ValueError("Can't reconcile units: %r and %r" % (self, other)) new_amount = op(left.value, right.value) # Convert back to the left side's units if left.value != 0: new_amount = new_amount * self.value / left.value return Number(new_amount, unit_numer=self.unit_numer, unit_denom=self.unit_denom) ### Helper methods, mostly used internally def to_base_units(self): """Convert to a fixed set of "base" units. The particular units are arbitrary; what's important is that they're consistent. Used for addition and comparisons. """ # Convert to "standard" units, as defined by the conversions dict above amount = self.value numer_factor, numer_units = convert_units_to_base_units(self.unit_numer) denom_factor, denom_units = convert_units_to_base_units(self.unit_denom) return Number( amount * numer_factor / denom_factor, unit_numer=numer_units, unit_denom=denom_units, ) ### Utilities for public consumption @classmethod def wrap_python_function(cls, fn): """Wraps an unary Python math function, translating the argument from Sass to Python on the way in, and vice versa for the return value. Used to wrap simple Python functions like `ceil`, `floor`, etc. """ def wrapped(sass_arg): # TODO enforce no units for trig? python_arg = sass_arg.value python_ret = fn(python_arg) sass_ret = cls( python_ret, unit_numer=sass_arg.unit_numer, unit_denom=sass_arg.unit_denom) return sass_ret return wrapped def to_python_index(self, length, check_bounds=True, circular=False): """Return a plain Python integer appropriate for indexing a sequence of the given length. Raise if this is impossible for any reason whatsoever. """ if not self.is_unitless: raise ValueError("Index cannot have units: {0!r}".format(self)) ret = int(self.value) if ret != self.value: raise ValueError("Index must be an integer: {0!r}".format(ret)) if ret == 0: raise ValueError("Index cannot be zero") if check_bounds and not circular and abs(ret) > length: raise ValueError("Index {0!r} out of bounds for length {1}".format(ret, length)) if ret > 0: ret -= 1 if circular: ret = ret % length return ret @property def has_simple_unit(self): """Returns True iff the unit is expressible in CSS, i.e., has no denominator and at most one unit in the numerator. """ return len(self.unit_numer) <= 1 and not self.unit_denom def is_simple_unit(self, unit): """Return True iff the unit is simple (as above) and matches the given unit. """ if self.unit_denom or len(self.unit_numer) > 1: return False if not self.unit_numer: # Empty string historically means no unit return unit == '' return self.unit_numer[0] == unit @property def is_unitless(self): return not self.unit_numer and not self.unit_denom def render(self, compress=False): if not self.has_simple_unit: raise ValueError("Can't express compound units in CSS: %r" % (self,)) if self.unit_numer: unit = self.unit_numer[0] else: unit = '' value = self.value if compress and unit in ZEROABLE_UNITS and value == 0: return '0' if value == 0: # -0.0 is plain 0 value = 0 val = ('%%0.0%df' % PRECISION) % round(value, PRECISION) val = val.rstrip('0').rstrip('.') if compress and val.startswith('0.'): # Strip off leading zero when compressing val = val[1:] return val + unit class List(Value): """A list of other values. May be delimited by commas or spaces. Lists of one item don't make much sense in CSS, but can exist in Sass. Use ...... Lists may also contain zero items, but these are forbidden from appearing in CSS output. """ sass_type_name = 'list' def __init__(self, iterable, separator=None, use_comma=None, literal=False): if isinstance(iterable, List): iterable = iterable.value if (not isinstance(iterable, Iterable) or isinstance(iterable, six.string_types)): raise TypeError("Expected list, got %r" % (iterable,)) self.value = list(iterable) for item in self.value: if not isinstance(item, Value): raise TypeError("Expected a Sass type, got %r" % (item,)) # TODO remove separator argument entirely if use_comma is None: self.use_comma = separator == "," else: self.use_comma = use_comma self.literal = literal @classmethod def maybe_new(cls, values, use_comma=True): """If `values` contains only one item, return that item. Otherwise, return a List as normal. """ if len(values) == 1: return values[0] else: return cls(values, use_comma=use_comma) def maybe(self): """If this List contains only one item, return it. Otherwise, return the List. """ if len(self.value) == 1: return self.value[0] else: return self @classmethod def from_maybe(cls, values, use_comma=True): """If `values` appears to not be a list, return a list containing it. Otherwise, return a List as normal. """ if values is None: values = [] return values @classmethod def from_maybe_starargs(cls, args, use_comma=True): """If `args` has one element which appears to be a list, return it. Otherwise, return a list as normal. Mainly used by Sass function implementations that predate `...` support, so they can accept both a list of arguments and a single list stored in a variable. """ if len(args) == 1: if isinstance(args[0], cls): return args[0] elif isinstance(args[0], (list, tuple)): return cls(args[0], use_comma=use_comma) return cls(args, use_comma=use_comma) def __repr__(self): return "<{0} {1}>".format( type(self).__name__, self.delimiter().join(repr(item) for item in self), ) def __hash__(self): return hash((tuple(self.value), self.use_comma)) def delimiter(self, compress=False): if self.use_comma: if compress: return ',' else: return ', ' else: return ' ' def __len__(self): return len(self.value) def __str__(self): return self.render() def __iter__(self): return iter(self.value) def __contains__(self, item): return item in self.value def __getitem__(self, key): return self.value[key] def to_pairs(self): pairs = [] for item in self: if len(item) != 2: return super(List, self).to_pairs() pairs.append(tuple(item)) return pairs def render(self, compress=False): if not self.value: raise ValueError("Can't render empty list as CSS") delim = self.delimiter(compress) if self.literal: value = self.value else: # Non-literal lists have nulls stripped value = [item for item in self.value if not item.is_null] # Non-empty lists containing only nulls become nothing, just like # single nulls if not value: return '' return delim.join( item.render(compress=compress) for item in value ) def render_interpolated(self, compress=False): return self.delimiter(compress).join( item.render_interpolated(compress) for item in self) # DEVIATION: binary ops on lists and scalars act element-wise def __add__(self, other): if isinstance(other, List): max_list, min_list = (self, other) if len(self) > len(other) else (other, self) return List([item + max_list[i] for i, item in enumerate(min_list)], use_comma=self.use_comma) elif isinstance(other, String): # UN-DEVIATION: adding a string should fall back to canonical # behavior of string addition return super(List, self).__add__(other) else: return List([item + other for item in self], use_comma=self.use_comma) def __sub__(self, other): if isinstance(other, List): max_list, min_list = (self, other) if len(self) > len(other) else (other, self) return List([item - max_list[i] for i, item in enumerate(min_list)], use_comma=self.use_comma) return List([item - other for item in self], use_comma=self.use_comma) def __mul__(self, other): if isinstance(other, List): max_list, min_list = (self, other) if len(self) > len(other) else (other, self) max_list, min_list = (self, other) if len(self) > len(other) else (other, self) return List([item * max_list[i] for i, item in enumerate(min_list)], use_comma=self.use_comma) return List([item * other for item in self], use_comma=self.use_comma) def __div__(self, other): if isinstance(other, List): max_list, min_list = (self, other) if len(self) > len(other) else (other, self) return List([item / max_list[i] for i, item in enumerate(min_list)], use_comma=self.use_comma) return List([item / other for item in self], use_comma=self.use_comma) def __pos__(self): return self def __neg__(self): return List([-item for item in self], use_comma=self.use_comma) class Arglist(List): """An argument list. Acts mostly like a list, with keyword arguments sort of tacked on separately, and only accessible via Python (or the Sass `keywords` function). """ sass_type_name = 'arglist' keywords_retrieved = False def __init__(self, args, kwargs): self._kwargs = Map(kwargs) super(Arglist, self).__init__(args, use_comma=True) def extract_keywords(self): self.keywords_retrieved = True return self._kwargs def _constrain(value, lb=0, ub=1): """Helper for Color constructors. Constrains a value to a range.""" if value < lb: return lb elif value > ub: return ub else: return value class Color(Value): sass_type_name = 'color' original_literal = None def __init__(self, tokens): self.tokens = tokens self.value = (0, 0, 0, 1) if tokens is None: self.value = (0, 0, 0, 1) elif isinstance(tokens, Color): self.value = tokens.value else: raise TypeError("Can't make Color from %r" % (tokens,)) ### Alternate constructors @classmethod def from_rgb(cls, red, green, blue, alpha=1.0, original_literal=None): red = _constrain(red) green = _constrain(green) blue = _constrain(blue) alpha = _constrain(alpha) self = cls.__new__(cls) # TODO self.tokens = None # TODO really should store these things internally as 0-1, but can't # until stuff stops examining .value directly self.value = (red * 255.0, green * 255.0, blue * 255.0, alpha) if original_literal is not None: self.original_literal = original_literal return self @classmethod def from_hsl(cls, hue, saturation, lightness, alpha=1.0): hue = _constrain(hue) saturation = _constrain(saturation) lightness = _constrain(lightness) alpha = _constrain(alpha) r, g, b = colorsys.hls_to_rgb(hue, lightness, saturation) return cls.from_rgb(r, g, b, alpha) @classmethod def from_hex(cls, hex_string, literal=False): if not hex_string.startswith('#'): raise ValueError("Expected #abcdef, got %r" % (hex_string,)) if literal: original_literal = hex_string else: original_literal = None hex_string = hex_string[1:] # Always include the alpha channel if len(hex_string) == 3: hex_string += 'f' elif len(hex_string) == 6: hex_string += 'ff' # Now there should be only two possibilities. Normalize to a list of # two hex digits if len(hex_string) == 4: chunks = [ch * 2 for ch in hex_string] elif len(hex_string) == 8: chunks = [ hex_string[0:2], hex_string[2:4], hex_string[4:6], hex_string[6:8] ] rgba = [int(ch, 16) / 255 for ch in chunks] return cls.from_rgb(*rgba, original_literal=original_literal) @classmethod def from_name(cls, name): """Build a Color from a CSS color name.""" self = cls.__new__(cls) # TODO self.original_literal = name r, g, b, a = COLOR_NAMES[name] self.value = r, g, b, a return self ### Accessors @property def rgb(self): # TODO: deprecate, relies on internals return tuple(self.value[:3]) @property def rgba(self): return ( self.value[0] / 255, self.value[1] / 255, self.value[2] / 255, self.value[3], ) @property def hsl(self): rgba = self.rgba h, l, s = colorsys.rgb_to_hls(*rgba[:3]) return h, s, l @property def alpha(self): return self.value[3] @property def rgba255(self): return ( int(self.value[0] * 1 + 0.5), int(self.value[1] * 1 + 0.5), int(self.value[2] * 1 + 0.5), int(self.value[3] * 255 + 0.5), ) def __repr__(self): return "<{0} {1}>".format(type(self).__name__, self.render()) def __hash__(self): return hash(self.value) def __eq__(self, other): if not isinstance(other, Color): return Boolean(False) # Scale channels to 255 and round to integers; this allows only 8-bit # color, but Ruby sass makes the same assumption, and otherwise it's # easy to get lots of float errors for HSL colors. left = tuple(round(n) for n in self.rgba255) right = tuple(round(n) for n in other.rgba255) return Boolean(left == right) def __add__(self, other): if isinstance(other, (Color, Number)): return self._operate(other, operator.add) else: return super(Color, self).__add__(other) def __sub__(self, other): if isinstance(other, (Color, Number)): return self._operate(other, operator.sub) else: return super(Color, self).__sub__(other) def __mul__(self, other): if isinstance(other, (Color, Number)): return self._operate(other, operator.mul) else: return super(Color, self).__mul__(other) def __div__(self, other): if isinstance(other, (Color, Number)): return self._operate(other, operator.div) else: return super(Color, self).__div__(other) def _operate(self, other, op): if isinstance(other, Number): if not other.is_unitless: raise ValueError("Expected unitless Number, got %r" % (other,)) other_rgb = (other.value,) * 3 elif isinstance(other, Color): if self.alpha != other.alpha: raise ValueError("Alpha channels must match between %r and %r" % (self, other)) other_rgb = other.rgb else: raise TypeError("Expected Color or Number, got %r" % (other,)) new_rgb = [ min(255., max(0., op(left, right))) # for from_rgb / 255. for (left, right) in zip(self.rgb, other_rgb) ] return Color.from_rgb(*new_rgb, alpha=self.alpha) def render(self, compress=False): """Return a rendered representation of the color. If `compress` is true, the shortest possible representation is used; otherwise, named colors are rendered as names and all others are rendered as hex (or with the rgba function). """ if not compress and self.original_literal: return self.original_literal candidates = [] # TODO this assumes CSS resolution is 8-bit per channel, but so does # Ruby. r, g, b, a = self.value r, g, b = int(round(r)), int(round(g)), int(round(b)) # Build a candidate list in order of preference. If `compress` is # True, the shortest candidate is used; otherwise, the first candidate # is used. # Try color name key = r, g, b, a if key in COLOR_LOOKUP: candidates.append(COLOR_LOOKUP[key]) if a == 1: # Hex is always shorter than function notation if all(ch % 17 == 0 for ch in (r, g, b)): candidates.append("#%1x%1x%1x" % (r // 17, g // 17, b // 17)) else: candidates.append("#%02x%02x%02x" % (r, g, b)) else: # Can't use hex notation for RGBA if compress: sp = '' else: sp = ' ' candidates.append("rgba(%d,%s%d,%s%d,%s%.6g)" % (r, sp, g, sp, b, sp, a)) if compress: return min(candidates, key=len) else: return candidates[0] # TODO be unicode-clean and delete this nonsense DEFAULT_STRING_ENCODING = "utf8" class String(Value): """Represents both CSS quoted string values and CSS identifiers (such as `left`). Makes no distinction between single and double quotes, except that the same quotes are preserved on string literals that pass through unmodified. Otherwise, double quotes are used. """ sass_type_name = 'string' bad_identifier_rx = re.compile('[^-_a-zA-Z\x80-\U0010FFFF]') def __init__(self, value, quotes='"', literal=False): if isinstance(value, String): # TODO unclear if this should be here, but many functions rely on # it value = value.value elif isinstance(value, Number): # TODO this may only be necessary in the case of __radd__ and # number values value = six.text_type(value) if isinstance(value, six.binary_type): warn(FutureWarning( "String got a bytes type {0!r} " "-- this will no longer be supported in pyScss 2.0" .format(value) )) value = value.decode(DEFAULT_STRING_ENCODING) if not isinstance(value, six.text_type): raise TypeError("Expected string, got {0!r}".format(value)) self.value = value self.quotes = quotes # TODO this isn't quite used yet if literal: self.original_literal = value else: self.original_literal = None @classmethod def unquoted(cls, value, literal=False): """Helper to create a string with no quotes.""" return cls(value, quotes=None, literal=literal) def __hash__(self): return hash(self.value) def __repr__(self): if self.quotes: quotes = '(' + self.quotes + ')' else: quotes = '' return "<{0}{1} {2!r}>".format( type(self).__name__, quotes, self.value) def __eq__(self, other): return Boolean(isinstance(other, String) and self.value == other.value) def __add__(self, other): if isinstance(other, String): other_value = other.value else: other_value = other.render() return String( self.value + other_value, quotes='"' if self.quotes else None) def __mul__(self, other): # DEVIATION: Ruby Sass doesn't do this, because Ruby doesn't. But # Python does, and in Ruby Sass it's just fatal anyway. if not isinstance(other, Number): return super(String, self).__mul__(other) if not other.is_unitless: raise TypeError("Can only multiply strings by unitless numbers") n = other.value if n != int(n): raise ValueError("Can only multiply strings by integers") return String(self.value * int(other.value), quotes=self.quotes) def _escape_character(self, match): """Given a single character, return it appropriately CSS-escaped.""" # TODO is there any case where we'd want to use unicode escaping? # TODO unsure if this works with newlines return '\\' + match.group(0) def _is_name_start(self, ch): if ch == '_': return True if ord(ch) >= 128: return True if ch in string.ascii_letters: return True return False def render(self, compress=False): # TODO should preserve original literals here too -- even the quotes. # or at least that's what sass does. # Escape and add quotes as appropriate. if self.quotes is None: # If you deliberately construct a bareword with bogus CSS in it, # you're assumed to know what you're doing return self.value else: return self._render_quoted() def render_interpolated(self, compress=False): # Always render without quotes return self.value def _render_bareword(self): # TODO this is currently unused, and only implemented due to an # oversight, but would make for a much better implementation of # escape() # This is a bareword, so almost anything outside \w needs escaping ret = self.value ret = self.bad_identifier_rx.sub(self._escape_character, ret) # Also apply some minor quibbling rules about how barewords can # start: with a "name start", an escape, a hyphen followed by one # of those, or two hyphens. if not ret: # TODO is an unquoted empty string allowed to be rendered? pass elif ret[0] == '-': if ret[1] in '-\\' or self._is_name_start(ret[1]): pass else: # Escape the second character # TODO what if it's a digit, oops ret = ret[0] + '\\' + ret[1:] elif ret[0] == '\\' or self._is_name_start(ret[0]): pass else: # Escape the first character # TODO what if it's a digit, oops ret = '\\' + ret return ret def _render_quoted(self): # Strictly speaking, the only things we need to quote are the quotes # themselves, backslashes, and newlines. # TODO Ruby Sass takes backslashes in barewords literally, but treats # backslashes in quoted strings as escapes -- their mistake? # TODO In Ruby Sass, generated strings never have single quotes -- but # neither do variable interpolations, so I'm not sure what they're # doing quote = self.quotes ret = self.value ret = ret.replace('\\', '\\\\') ret = ret.replace(quote, '\\' + quote) # Note that a literal newline is ignored when escaped, so we have to # use the codepoint instead. But we'll leave the newline as well, to # aid readability. ret = ret.replace('\n', '\\a\\\n') return quote + ret + quote # TODO this needs to pretend the url(...) is part of the string for all string # operations -- even the quotes! alas. # TODO recasting a function to a String will lose the function part? whoops. # maybe .value should just be, uh, the literal value instead of the insides??? class Function(String): """Function call pseudo-type, which crops up frequently in CSS as a string marker. Acts mostly like a string, but has a function name and parentheses around it. """ def __init__(self, string, function_name, quotes='"', literal=False): super(Function, self).__init__(string, quotes=quotes, literal=literal) self.function_name = function_name def render(self, compress=False): return "{0}({1})".format( self.function_name, super(Function, self).render(compress), ) def render_interpolated(self, compress=False): return "{0}({1})".format( self.function_name, super(Function, self).render_interpolated(compress), ) class Url(Function): # Bare URLs may not contain quotes, parentheses, or unprintables. Quoted # URLs may, of course, contain whatever they like. # Ref: http://dev.w3.org/csswg/css-syntax-3/#consume-a-url-token0 bad_identifier_rx = re.compile("[$'\"()\\x00-\\x08\\x0b\\x0e-\\x1f\\x7f]") def __init__(self, string, **kwargs): super(Url, self).__init__(string, 'url', **kwargs) def render(self, compress=False): if self.quotes is None: return self.render_interpolated(compress) else: inside = self._render_quoted() return "url(" + inside + ")" def render_interpolated(self, compress=False): # Always render without quotes. # When doing that, we need to escape some stuff to make sure the result # is valid CSS. inside = self.bad_identifier_rx.sub( self._escape_character, self.value) return "url(" + inside + ")" class Map(Value): sass_type_name = 'map' def __init__(self, pairs, index=None): self.pairs = tuple(pairs) if index is None: self.index = {} for key, value in pairs: self.index[key] = value else: self.index = index def __repr__(self): return "" % (", ".join("%s: %s" % pair for pair in self.pairs),) def __hash__(self): return hash(self.pairs) def __len__(self): return len(self.pairs) def __iter__(self): return iter(self.pairs) def __getitem__(self, index): return List(self.pairs[index], use_comma=True) def __eq__(self, other): try: return self.pairs == other.to_pairs() except ValueError: return NotImplemented def to_dict(self): return self.index def to_pairs(self): return self.pairs def render(self, compress=False): raise TypeError("Cannot render map %r as CSS" % (self,)) def expect_type(value, types, unit=any): if not isinstance(value, types): if isinstance(types, type): types = (type,) sass_type_names = list(set(t.sass_type_name for t in types)) sass_type_names.sort() # Join with commas in English fashion if len(sass_type_names) == 1: sass_type = sass_type_names[0] elif len(sass_type_names) == 2: sass_type = ' or '.join(sass_type_names) else: sass_type = ', '.join(sass_type_names[:-1]) sass_type += ', or ' + sass_type_names[-1] raise TypeError("Expected %s, got %r" % (sass_type, value)) if unit is not any and isinstance(value, Number): if unit is None and not value.is_unitless: raise ValueError("Expected unitless number, got %r" % (value,)) elif unit == '%' and not ( value.is_unitless or value.is_simple_unit('%')): raise ValueError("Expected unitless number or percentage, got %r" % (value,)) pyScss-1.4.0/scss/util.py000066400000000000000000000154431420542636400153170ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import base64 import hashlib import os import re import sys import time from functools import wraps import six from scss import config BASE_DIR = os.path.dirname(__file__) def split_params(params): params = params.split(',') or [] if params: final_params = [] param = params.pop(0) try: while True: while param.count('(') != param.count(')'): try: param = param + ',' + params.pop(0) except IndexError: break final_params.append(param) param = params.pop(0) except IndexError: pass params = final_params return params def dequote(s): if s and s[0] in ('"', "'") and s[-1] == s[0]: s = s[1:-1] s = unescape(s) return s def depar(s): while s and s[0] == '(' and s[-1] == ')': s = s[1:-1] return s def to_str(num): try: render = num.render except AttributeError: pass else: return render() if isinstance(num, dict): s = sorted(num.items()) sp = num.get('_', '') return (sp + ' ').join(to_str(v) for n, v in s if n != '_') elif isinstance(num, float): num = ('%0.05f' % round(num, 5)).rstrip('0').rstrip('.') return num elif isinstance(num, bool): return 'true' if num else 'false' elif num is None: return '' return six.text_type(num) def to_float(num): if isinstance(num, (float, int)): return float(num) num = to_str(num) if num and num[-1] == '%': return float(num[:-1]) / 100.0 else: return float(num) def escape(s): return re.sub(r'''(["'])''', r'\\\1', s) # do not escape '\' # Deprecated; use the unescape() from cssdefs instead def unescape(s): return re.sub(r'''\\(['"\\])''', r'\1', s) # do unescape '\' def normalize_var(var): """Sass defines `foo_bar` and `foo-bar` as being identical, both in variable names and functions/mixins. This normalizes everything to use dashes. """ return var.replace('_', '-') def make_data_url(mime_type, data): """Generate a `data:` URL from the given data and MIME type.""" return "data:{0};base64,{1}".format( mime_type, base64.b64encode(data).decode('ascii')) def make_filename_hash(key): """Convert the given key (a simple Python object) to a unique-ish hash suitable for a filename. """ key_repr = repr(key).replace(BASE_DIR, '').encode('utf8') # This is really stupid but necessary for making the repr()s be the same on # Python 2 and 3 and thus allowing the test suite to run on both. # TODO better solutions include: not using a repr, not embedding hashes in # the expected test results if sys.platform == 'win32': # this is to make sure the hash is the same on win and unix platforms key_repr = key_repr.replace(b'\\\\', b'/') key_repr = re.sub(b"\\bu'", b"'", key_repr) key_hash = hashlib.md5(key_repr).digest() return base64.b64encode(key_hash, b'__').decode('ascii').rstrip('=') ################################################################################ # Function timing decorator profiling = {} def print_timing(level=0): def _print_timing(func): if config.VERBOSITY: def wrapper(*args, **kwargs): if config.VERBOSITY >= level: t1 = time.time() res = func(*args, **kwargs) t2 = time.time() profiling.setdefault(func.func_name, 0) profiling[func.func_name] += (t2 - t1) return res else: return func(*args, **kwargs) return wrapper else: return func return _print_timing ################################################################################ # Profiler decorator def profile(fn): import cProfile import pstats @wraps(fn) def wrapper(*args, **kwargs): profiler = cProfile.Profile() stream = six.StringIO() profiler.enable() try: res = fn(*args, **kwargs) finally: profiler.disable() stats = pstats.Stats(profiler, stream=stream) stats.sort_stats('time') print >>stream, "" print >>stream, "=" * 100 print >>stream, "Stats:" stats.print_stats() print >>stream, "=" * 100 print >>stream, "Callers:" stats.print_callers() print >>stream, "=" * 100 print >>stream, "Callees:" stats.print_callees() print >>sys.stderr, stream.getvalue() stream.close() return res return wrapper ################################################################################ # http://code.activestate.com/recipes/325905-memoize-decorator-with-timeout/ class tmemoize(object): """ Memoize With Timeout Usage: @tmemoize() def z(a,b): return a + b @tmemoize(timeout=5) def x(a,b): return a + b """ _caches = {} _timeouts = {} _collected = time.time() def __init__(self, timeout=60, gc=3600): self.timeout = timeout self.gc = gc def collect(self): """Clear cache of results which have timed out""" for func in self._caches: cache = {} for key in self._caches[func]: if (time.time() - self._caches[func][key][1]) < self._timeouts[func]: cache[key] = self._caches[func][key] self._caches[func] = cache def __call__(self, func): self._caches[func] = {} self._timeouts[func] = self.timeout @wraps(func) def wrapper(*args): key = args now = time.time() cache = self._caches[func] try: ret, last = cache[key] if now - last > self.timeout: raise KeyError except KeyError: ret, last = cache[key] = (func(*args), now) if now - self._collected > self.gc: self.collect() self._collected = time.time() return ret return wrapper ################################################################################ # Memoized getmtime (can accept storage) @tmemoize() def getmtime(filename, storage=None): try: if storage: d_obj = storage.modified_time(filename) return int(time.mktime(d_obj.timetuple())) else: return int(os.path.getmtime(filename)) except: pass pyScss-1.4.0/setup.py000066400000000000000000000110551420542636400145220ustar00rootroot00000000000000#!/usr/bin/env python from distutils.command.build_ext import build_ext from distutils.errors import CCompilerError, DistutilsExecError, \ DistutilsPlatformError import os import platform import sys from setuptools import setup, Extension # this imports PROJECT, URL, VERSION, AUTHOR, AUTHOR_EMAIL, LICENSE, # DOWNLOAD_URL with open('scss/scss_meta.py', 'rb') as f: exec(f.read()) # Dependencies install_requires = ['six'] if sys.version_info < (3, 4): install_requires.append('enum34') install_requires.append('pathlib2') if sys.version_info < (2, 7): install_requires.append('ordereddict') # fail safe compilation shamelessly stolen from the simplejson # setup.py file. Original author: Bob Ippolito ext_modules = [ # NOTE: header files are included by MANIFEST.in; Extension does not # include headers in an sdist (since they're typically in /usr/lib) Extension( 'scss.grammar._scanner', sources=['scss/src/_speedups.c', 'scss/src/block_locator.c', 'scss/src/scanner.c', 'scss/src/hashtable.c'], libraries=['pcre'] ), ] ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError) if sys.platform == 'win32' and sys.version_info > (2, 6): # 2.6's distutils.msvc9compiler can raise an IOError when failing to # find the compiler ext_errors += (IOError,) class BuildFailed(Exception): pass class ve_build_ext(build_ext): """This class allows C extension building to fail.""" def run(self): try: build_ext.run(self) except DistutilsPlatformError: raise BuildFailed() def build_extension(self, ext): try: build_ext.build_extension(self, ext) except ext_errors: raise BuildFailed() except ValueError: # this can happen on Windows 64 bit, see Python issue 7511 if "'path'" in str(sys.exc_info()[1]): # works with Python 2 and 3 raise BuildFailed() raise def echo(msg=''): sys.stdout.write(msg + '\n') def read(fname): try: with open(os.path.join(os.path.dirname(__file__), fname), 'rb') as f: return f.read().decode('utf8').strip() except IOError: return '' def run_setup(with_binary): if with_binary: extra_opts = {} extra_opts['ext_modules'] = ext_modules else: extra_opts = {} setup( name=PROJECT, version=VERSION, description=read('DESCRIPTION'), long_description=read('README.rst'), author=AUTHOR, author_email=AUTHOR_EMAIL, url=URL, zip_safe=False, download_url=DOWNLOAD_URL, license=LICENSE, keywords='css oocss xcss sass scss less precompiler', classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Software Development :: Code Generators", "Topic :: Text Processing :: Markup", "Topic :: Software Development :: Libraries :: Python Modules" ], install_requires=install_requires, packages=[ 'scss', 'scss.extension', 'scss.extension.compass', 'scss.grammar', ], cmdclass={'build_ext': ve_build_ext}, entry_points=""" [console_scripts] pyscss = scss.tool:main less2scss = scss.less2scss:main """, **extra_opts ) def try_building_extension(): try: run_setup(True) except BuildFailed: LINE = '=' * 74 BUILD_EXT_WARNING = 'WARNING: The C extension could not be ' \ 'compiled, speedups are not enabled.' echo(LINE) echo(BUILD_EXT_WARNING) echo('Failure information, if any, is above.') echo('Retrying the build without the C extension now.') echo() run_setup(False) echo(LINE) echo(BUILD_EXT_WARNING) echo('pyScss will still work fine, but may be slower.') echo( 'The most likely cause is missing PCRE headers; you may need to ' 'install libpcre or libpcre-dev, depending on your platform.' ) echo('Plain-Python installation succeeded.') echo(LINE) if platform.python_implementation() == 'CPython': try_building_extension() else: run_setup(False) pyScss-1.4.0/tox.ini000066400000000000000000000006331420542636400143230ustar00rootroot00000000000000[tox] envlist = py26, py27, py33, py34, py35 [testenv] # fontforge bindings cannot be installed from pip, so they may only be # available system-wide sitepackages = True deps = pillow six pytest commands = py.test {posargs:scss/tests} [testenv:py26] deps = {[testenv]deps} enum34 [testenv:py27] deps = {[testenv]deps} enum34 [testenv:py33] deps = {[testenv]deps} enum34 pyScss-1.4.0/yapps2.py000077500000000000000000001130251420542636400146030ustar00rootroot00000000000000#!/usr/bin/env python # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Yapps 3.0 - yet another python parser system # Amit J Patel, January 1999 # German M. Bravo, December 2011 # See http://theory.stanford.edu/~amitp/Yapps/ for documentation and updates # v3.0.0 changes (December 2011) # * PEP 8 cleanups # * Optimizations in the scanning (added cache and cleanup() for it) # v2.0.1 changes (October 2001): # * The exceptions inherit the standard Exception class (thanks Rich Salz) # * The scanner can use either a different set of regular expressions # per instance, or allows the subclass to define class fields with # the patterns. This improves performance when many Scanner objects # are being created, because the regular expressions don't have to # be recompiled each time. (thanks Amaury Forgeot d'Arc) # v2.0.2 changes (April 2002) # * Bug fix: generating the 'else' clause when the comment was too # long. v2.0.1 was missing a newline. (thanks Steven Engelhardt) # v2.0.3 changes (August 2002) # * Bug fix: inline tokens using the r"" syntax. # v.2.0.4 changes (July 2003) # * Style change: Replaced `expr` with repr(expr) # * Style change: Changed (b >= a and b < c) into (a <= b < c) # * Bug fix: identifiers in grammar rules that had digits in them were # not accessible in the {{python code}} section # * Bug fix: made the SyntaxError exception class call # Exception.__init__ (thanks Alex Verstak) # * Style change: replaced raise "string exception" with raise # ClassException(...) (thanks Alex Verstak) from string import find from string import join import sys import re INDENT = " " * 4 class Generator: def __init__(self, name, options, tokens, rules): self.change_count = 0 self.name = name self.options = options self.preparser = '' self.postparser = None self.tokens = {} # Map from tokens to regexps self.sets = {} # Map for restriction sets self.ignore = [] # List of token names to ignore in parsing self.terminals = [] # List of token names (to maintain ordering) for n, t in tokens: if n == '#ignore': n = t self.ignore.append(n) if n in self.tokens.keys() and self.tokens[n] != t: if n not in self.ignore: print 'Warning: token', n, 'multiply defined.' else: self.terminals.append(n) self.tokens[n] = t self.rules = {} # Map from rule names to parser nodes self.params = {} # Map from rule names to parameters self.goals = [] # List of rule names (to maintain ordering) for n, p, r in rules: self.params[n] = p self.rules[n] = r self.goals.append(n) self.output = sys.stdout def __getitem__(self, name): # Get options return self.options.get(name, 0) def non_ignored_tokens(self): return filter(lambda x, i=self.ignore: x not in i, self.terminals) def changed(self): self.change_count = 1 + self.change_count def subset(self, a, b): "See if all elements of a are inside b" for x in a: if x not in b: return 0 return 1 def equal_set(self, a, b): "See if a and b have the same elements" if len(a) != len(b): return 0 if a == b: return 1 return self.subset(a, b) and self.subset(b, a) def add_to(self, parent, additions): "Modify parent to include all elements in additions" for x in additions: if x not in parent: parent.append(x) self.changed() def equate(self, a, b): self.add_to(a, b) self.add_to(b, a) def write(self, *args): for a in args: self.output.write(a) def in_test(self, r, x, full, b): if not b: return '0' if len(b) == 1: return '%s == %s' % (x, repr(b[0])) if full and len(b) > len(full) / 2: # Reverse the sense of the test. not_b = filter(lambda x, b=b: x not in b, full) return self.not_in_test(r, x, full, not_b) n = None for k, v in self.sets.items(): if v == b: n = k if n is None: n = '%s_chks' % r while n in self.sets: n += '_' self.sets[n] = b b_set = 'self.%s' % n return '%s in %s' % (x, b_set) def not_in_test(self, r, x, full, b): if not b: return '1' if len(b) == 1: return '%s != %s' % (x, repr(b[0])) n = None for k, v in self.sets.items(): if v == b: n = k if n is None: n = '%s_chks' % r while n in self.sets: n += '_' self.sets[n] = b b_set = 'self.%s' % n return '%s not in %s' % (x, b_set) def peek_call(self, r, a): n = None for k, v in self.sets.items(): if v == a: n = k if n is None: n = '%s_rsts' % r while n in self.sets: n += '_' self.sets[n] = a a_set = 'self.%s' % n if self.equal_set(a, self.non_ignored_tokens()): a_set = '' if self['context-insensitive-scanner']: a_set = '' return 'self._peek(%s)' % a_set def peek_test(self, r, a, b): if self.subset(a, b): return '1' if self['context-insensitive-scanner']: a = self.non_ignored_tokens() return self.in_test(r, self.peek_call(r, a), a, b) def not_peek_test(self, r, a, b): if self.subset(a, b): return '0' return self.not_in_test(r, self.peek_call(r, a), a, b) def calculate(self): while 1: for r in self.goals: self.rules[r].setup(self, r) if self.change_count == 0: break self.change_count = 0 while 1: for r in self.goals: self.rules[r].update(self) if self.change_count == 0: break self.change_count = 0 def dump_information(self): self.calculate() for r in self.goals: print ' _____' + '_' * len(r) print ('___/Rule ' + r + '\\' + '_' * 80)[:79] queue = [self.rules[r]] while queue: top = queue[0] del queue[0] print repr(top) top.first.sort() top.follow.sort() eps = [] if top.accepts_epsilon: eps = ['(null)'] print ' FIRST:', join(top.first + eps, ', ') print ' FOLLOW:', join(top.follow, ', ') for x in top.get_children(): queue.append(x) def generate_output(self): self.calculate() self.write(self.preparser) self.write("class ", self.name, "Scanner(Scanner):\n") self.write(" patterns = None\n") self.write(" _patterns = [\n") for p in self.terminals: self.write(" (%s, %s),\n" % ( repr(p), repr(self.tokens[p]))) self.write(" ]\n\n") self.write(" def __init__(self, input=None):\n") self.write(" if hasattr(self, 'setup_patterns'):\n") self.write(" self.setup_patterns(self._patterns)\n") self.write(" elif self.patterns is None:\n") self.write(" self.__class__.patterns = []\n") self.write(" for t, p in self._patterns:\n") self.write(" self.patterns.append((t, re.compile(p)))\n") self.write(" super(", self.name, "Scanner, self).__init__(None, %s, input)\n" % repr(self.ignore)) self.write("\n\n") self.write("class ", self.name, "(Parser):\n") for r in self.goals: self.write(INDENT, "def ", r, "(self") if self.params[r]: self.write(", ", self.params[r]) self.write("):\n") self.rules[r].output(self, INDENT + INDENT) self.write("\n") for n, s in self.sets.items(): self.write(" %s = %s\n" % (n, frozenset(s))) if self.postparser is not None: self.write(self.postparser) else: self.write("\n") self.write("P = ", self.name, "(", self.name, "Scanner())\n") self.write("def parse(rule, text, *args):\n") self.write(" P.reset(text)\n") self.write(" return wrap_error_reporter(P, rule, *args)\n") self.write("\n") self.write("if __name__ == '__main__':\n") self.write(INDENT, "from sys import argv, stdin\n") self.write(INDENT, "if len(argv) >= 2:\n") self.write(INDENT * 2, "if len(argv) >= 3:\n") self.write(INDENT * 3, "f = open(argv[2],'r')\n") self.write(INDENT * 2, "else:\n") self.write(INDENT * 3, "f = stdin\n") self.write(INDENT * 2, "print parse(argv[1], f.read())\n") self.write(INDENT, "else: print 'Args: []'\n") ###################################################################### class Node: def __init__(self): self.first = [] self.follow = [] self.accepts_epsilon = 0 self.rule = '?' def setup(self, gen, rule): # Setup will change accepts_epsilon, # sometimes from 0 to 1 but never 1 to 0. # It will take a finite number of steps to set things up self.rule = rule def used(self, vars): "Return two lists: one of vars used, and the other of vars assigned" return vars, [] def get_children(self): "Return a list of sub-nodes" return [] def __repr__(self): return str(self) def update(self, gen): if self.accepts_epsilon: gen.add_to(self.first, self.follow) def output(self, gen, indent): "Write out code to _gen_ with _indent_:string indentation" gen.write(indent, "assert 0 # Invalid parser node\n") class Terminal(Node): def __init__(self, token): Node.__init__(self) self.token = token self.accepts_epsilon = 0 def __str__(self): return self.token def update(self, gen): Node.update(self, gen) if self.first != [self.token]: self.first = [self.token] gen.changed() def output(self, gen, indent): gen.write(indent) if re.match('[a-zA-Z_][a-zA-Z_0-9]*$', self.token): gen.write(self.token, " = ") gen.write("self._scan(%s)\n" % repr(self.token)) class Eval(Node): def __init__(self, expr): Node.__init__(self) self.expr = expr def setup(self, gen, rule): Node.setup(self, gen, rule) if not self.accepts_epsilon: self.accepts_epsilon = 1 gen.changed() def __str__(self): return '{{ %s }}' % self.expr.strip() def output(self, gen, indent): gen.write(indent, self.expr.strip(), '\n') class NonTerminal(Node): def __init__(self, name, args): Node.__init__(self) self.name = name self.args = args def setup(self, gen, rule): Node.setup(self, gen, rule) try: self.target = gen.rules[self.name] if self.accepts_epsilon != self.target.accepts_epsilon: self.accepts_epsilon = self.target.accepts_epsilon gen.changed() except KeyError: # Oops, it's nonexistent print 'Error: no rule <%s>' % self.name self.target = self def __str__(self): return '<%s>' % self.name def update(self, gen): Node.update(self, gen) gen.equate(self.first, self.target.first) gen.equate(self.follow, self.target.follow) def output(self, gen, indent): gen.write(indent) gen.write(self.name, " = ") gen.write("self.", self.name, "(", self.args, ")\n") class Sequence(Node): def __init__(self, *children): Node.__init__(self) self.children = children def setup(self, gen, rule): Node.setup(self, gen, rule) for c in self.children: c.setup(gen, rule) if not self.accepts_epsilon: # If it's not already accepting epsilon, it might now do so. for c in self.children: # any non-epsilon means all is non-epsilon if not c.accepts_epsilon: break else: self.accepts_epsilon = 1 gen.changed() def get_children(self): return self.children def __str__(self): return '( %s )' % join(map(lambda x: str(x), self.children)) def update(self, gen): Node.update(self, gen) for g in self.children: g.update(gen) empty = 1 for g_i in range(len(self.children)): g = self.children[g_i] if empty: gen.add_to(self.first, g.first) if not g.accepts_epsilon: empty = 0 if g_i == len(self.children) - 1: next = self.follow else: next = self.children[1 + g_i].first gen.add_to(g.follow, next) if self.children: gen.add_to(self.follow, self.children[-1].follow) def output(self, gen, indent): if self.children: for c in self.children: c.output(gen, indent) else: # Placeholder for empty sequences, just in case gen.write(indent, 'pass\n') class Choice(Node): def __init__(self, *children): Node.__init__(self) self.children = children def setup(self, gen, rule): Node.setup(self, gen, rule) for c in self.children: c.setup(gen, rule) if not self.accepts_epsilon: for c in self.children: if c.accepts_epsilon: self.accepts_epsilon = 1 gen.changed() def get_children(self): return self.children def __str__(self): return '( %s )' % join(map(lambda x: str(x), self.children), ' | ') def update(self, gen): Node.update(self, gen) for g in self.children: g.update(gen) for g in self.children: gen.add_to(self.first, g.first) gen.add_to(self.follow, g.follow) for g in self.children: gen.add_to(g.follow, self.follow) if self.accepts_epsilon: gen.add_to(self.first, self.follow) def output(self, gen, indent): test = "if" gen.write(indent, "_token_ = ", gen.peek_call(self.rule, self.first), "\n") tokens_seen = [] tokens_unseen = self.first[:] if gen['context-insensitive-scanner']: # Context insensitive scanners can return ANY token, # not only the ones in first. tokens_unseen = gen.non_ignored_tokens() for c in self.children: testset = c.first[:] removed = [] for x in testset: if x in tokens_seen: testset.remove(x) removed.append(x) if x in tokens_unseen: tokens_unseen.remove(x) tokens_seen = tokens_seen + testset if removed: if not testset: print 'Error in rule', self.rule + ':', c, 'never matches.' else: print 'Warning:', self print ' * These tokens are being ignored:', join(removed, ', ') print ' due to previous choices using them.' if testset: if not tokens_unseen: # context sensitive scanners only! if test == 'if': # if it's the first AND last test, then # we can simply put the code without an if/else c.output(gen, indent) else: gen.write(indent, "else:") t = gen.in_test(self.rule, '', [], testset) if len(t) < 70 - len(indent): gen.write(" #", t) gen.write("\n") c.output(gen, indent + INDENT) else: gen.write(indent, test, " ", gen.in_test(self.rule, '_token_', tokens_unseen, testset), ":\n") c.output(gen, indent + INDENT) test = "elif" if gen['context-insensitive-scanner'] and tokens_unseen: gen.write(indent, "else:\n") gen.write(indent, INDENT, "raise SyntaxError(self._pos, ") gen.write("'Could not match ", self.rule, "')\n") class Wrapper(Node): def __init__(self, child): Node.__init__(self) self.child = child def setup(self, gen, rule): Node.setup(self, gen, rule) self.child.setup(gen, rule) def get_children(self): return [self.child] def update(self, gen): Node.update(self, gen) self.child.update(gen) gen.add_to(self.first, self.child.first) gen.equate(self.follow, self.child.follow) class Option(Wrapper): def setup(self, gen, rule): Wrapper.setup(self, gen, rule) if not self.accepts_epsilon: self.accepts_epsilon = 1 gen.changed() def __str__(self): return '[ %s ]' % str(self.child) def output(self, gen, indent): if self.child.accepts_epsilon: print 'Warning in rule', self.rule + ': contents may be empty.' gen.write(indent, "if %s:\n" % gen.peek_test(self.rule, self.first, self.child.first)) self.child.output(gen, indent + INDENT) class Plus(Wrapper): def setup(self, gen, rule): Wrapper.setup(self, gen, rule) if self.accepts_epsilon != self.child.accepts_epsilon: self.accepts_epsilon = self.child.accepts_epsilon gen.changed() def __str__(self): return '%s+' % str(self.child) def update(self, gen): Wrapper.update(self, gen) gen.add_to(self.follow, self.first) def output(self, gen, indent): if self.child.accepts_epsilon: print 'Warning in rule', self.rule + ':' print ' * The repeated pattern could be empty. The resulting' print ' parser may not work properly.' gen.write(indent, "while 1:\n") self.child.output(gen, indent + INDENT) union = self.first[:] gen.add_to(union, self.follow) gen.write(indent + INDENT, "if %s:\n" % gen.not_peek_test(self.rule, union, self.child.first)) gen.write(indent + INDENT * 2, "break\n") class Star(Plus): def setup(self, gen, rule): Wrapper.setup(self, gen, rule) if not self.accepts_epsilon: self.accepts_epsilon = 1 gen.changed() def __str__(self): return '%s*' % str(self.child) def output(self, gen, indent): if self.child.accepts_epsilon: print 'Warning in rule', self.rule + ':' print ' * The repeated pattern could be empty. The resulting' print ' parser probably will not work properly.' gen.write(indent, "while %s:\n" % gen.peek_test(self.rule, self.follow, self.child.first)) self.child.output(gen, indent + INDENT) ###################################################################### # The remainder of this file is from parsedesc.{g,py} def append(lst, x): "Imperative append" lst.append(x) return lst def add_inline_token(tokens, str): tokens.insert(0, (str, eval(str, {}, {}))) return Terminal(str) def cleanup_choice(lst): if len(lst) == 0: return Sequence([]) if len(lst) == 1: return lst[0] return apply(Choice, tuple(lst)) def cleanup_sequence(lst): if len(lst) == 1: return lst[0] return apply(Sequence, tuple(lst)) def cleanup_rep(node, rep): if rep == 'star': return Star(node) elif rep == 'plus': return Plus(node) else: return node def resolve_name(tokens, id, args): if id in map(lambda x: x[0], tokens): # It's a token if args: print 'Warning: ignoring parameters on TOKEN %s<<%s>>' % (id, args) return Terminal(id) else: # It's a name, so assume it's a nonterminal return NonTerminal(id, args) ################################################################################ # Contents of yappsrt follow. # Parser class NoMoreTokens(Exception): """ Another exception object, for when we run out of tokens """ pass class Scanner(object): def __init__(self, patterns, ignore, input=None): """ Patterns is [(terminal,regex)...] Ignore is [terminal,...]; Input is a string """ self.reset(input) self.ignore = ignore # The stored patterns are a pair (compiled regex,source # regex). If the patterns variable passed in to the # constructor is None, we assume that the class already has a # proper .patterns list constructed if patterns is not None: self.patterns = [] for k, r in patterns: self.patterns.append((k, re.compile(r))) def reset(self, input): self.tokens = [] self.restrictions = [] self.input = input self.pos = 0 def __repr__(self): """ Print the last 10 tokens that have been scanned in """ output = '' for t in self.tokens[-10:]: output = "%s\n (@%s) %s = %s" % (output, t[0], t[2], repr(t[3])) return output def _scan(self, restrict): """ Should scan another token and add it to the list, self.tokens, and add the restriction to self.restrictions """ # Keep looking for a token, ignoring any in self.ignore token = None while True: best_pat = None # Search the patterns for a match, with earlier # tokens in the list having preference best_pat_len = 0 for p, regexp in self.patterns: # First check to see if we're restricting to this token if restrict and p not in restrict and p not in self.ignore: continue m = regexp.match(self.input, self.pos) if m: # We got a match best_pat = p best_pat_len = len(m.group(0)) break # If we didn't find anything, raise an error if best_pat is None: msg = "Bad Token" if restrict: msg = "Trying to find one of " + ", ".join(restrict) err = SyntaxError("SyntaxError[@ char %s: %s]" % (repr(self.pos), msg)) err.pos = self.pos raise err # If we found something that isn't to be ignored, return it if best_pat in self.ignore: # This token should be ignored... self.pos += best_pat_len else: end_pos = self.pos + best_pat_len # Create a token with this data token = ( self.pos, end_pos, best_pat, self.input[self.pos:end_pos] ) break if token is not None: self.pos = token[1] # Only add this token if it's not in the list # (to prevent looping) if not self.tokens or token != self.tokens[-1]: self.tokens.append(token) self.restrictions.append(restrict) return 1 return 0 def token(self, i, restrict=None): """ Get the i'th token, and if i is one past the end, then scan for another token; restrict is a list of tokens that are allowed, or 0 for any token. """ tokens_len = len(self.tokens) if i == tokens_len: # We are at the end, get the next... tokens_len += self._scan(restrict) if i < tokens_len: if restrict and self.restrictions[i] and restrict > self.restrictions[i]: raise NotImplementedError("Unimplemented: restriction set changed") return self.tokens[i] raise NoMoreTokens def rewind(self, i): tokens_len = len(self.tokens) if i <= tokens_len: token = self.tokens[i] self.tokens = self.tokens[:i] self.restrictions = self.restrictions[:i] self.pos = token[0] class CachedScanner(Scanner): """ Same as Scanner, but keeps cached tokens for any given input """ _cache_ = {} _goals_ = ['END'] @classmethod def cleanup(cls): cls._cache_ = {} def __init__(self, patterns, ignore, input=None): try: self._tokens = self._cache_[input] except KeyError: self._tokens = None self.__tokens = {} self.__input = input super(CachedScanner, self).__init__(patterns, ignore, input) def reset(self, input): try: self._tokens = self._cache_[input] except KeyError: self._tokens = None self.__tokens = {} self.__input = input super(CachedScanner, self).reset(input) def __repr__(self): if self._tokens is None: return super(CachedScanner, self).__repr__() output = '' for t in self._tokens[-10:]: output = "%s\n (@%s) %s = %s" % (output, t[0], t[2], repr(t[3])) return output def token(self, i, restrict=None): if self._tokens is None: token = super(CachedScanner, self).token(i, restrict) self.__tokens[i] = token if token[2] in self._goals_: # goal tokens self._cache_[self.__input] = self._tokens = self.__tokens return token else: token = self._tokens.get(i) if token is None: raise NoMoreTokens return token def rewind(self, i): if self._tokens is None: super(CachedScanner, self).rewind(i) class Parser(object): def __init__(self, scanner): self._scanner = scanner self._pos = 0 def reset(self, input): self._scanner.reset(input) self._pos = 0 def _peek(self, types): """ Returns the token type for lookahead; if there are any args then the list of args is the set of token types to allow """ tok = self._scanner.token(self._pos, types) return tok[2] def _scan(self, type): """ Returns the matched text, and moves to the next token """ tok = self._scanner.token(self._pos, frozenset([type])) if tok[2] != type: err = SyntaxError("SyntaxError[@ char %s: %s]" % (repr(tok[0]), "Trying to find " + type)) err.pos = tok[0] raise err self._pos += 1 return tok[3] def _rewind(self, n=1): self._pos -= min(n, self._pos) self._scanner.rewind(self._pos) def print_error(input, err, scanner): """This is a really dumb long function to print error messages nicely.""" p = err.pos # Figure out the line number line = input[:p].count('\n') print err.msg + " on line " + repr(line + 1) + ":" # Now try printing part of the line text = input[max(p - 80, 0): p + 80] p = p - max(p - 80, 0) # Strip to the left i = text[:p].rfind('\n') j = text[:p].rfind('\r') if i < 0 or (0 <= j < i): i = j if 0 <= i < p: p = p - i - 1 text = text[i + 1:] # Strip to the right i = text.find('\n', p) j = text.find('\r', p) if i < 0 or (0 <= j < i): i = j if i >= 0: text = text[:i] # Now shorten the text while len(text) > 70 and p > 60: # Cut off 10 chars text = "..." + text[10:] p = p - 7 # Now print the string, along with an indicator print '> ', text print '> ', ' ' * p + '^' print 'List of nearby tokens:', scanner def wrap_error_reporter(parser, rule, *args): try: return getattr(parser, rule)(*args) except SyntaxError, s: input = parser._scanner.input try: print_error(input, s, parser._scanner) raise except ImportError: print "Syntax Error %s on line %d" % (s.msg, input[:s.pos].count('\n') + 1) except NoMoreTokens: print "Could not complete parsing; stopped around here:" print parser._scanner # End yappsrt ################################################################################ class ParserDescriptionScanner(Scanner): def __init__(self, str): Scanner.__init__(self, [ ('"rule"', 'rule'), ('"ignore"', 'ignore'), ('"token"', 'token'), ('"option"', 'option'), ('":"', ':'), ('"parser"', 'parser'), ('[ \011\015\012]+', '[ \011\015\012]+'), ('#.*?\015?\012', '#.*?\015?\012'), ('END', '$'), ('ATTR', '<<.+?>>'), ('STMT', '{{.+?}}'), ('ID', '[a-zA-Z_][a-zA-Z_0-9]*'), ('STR', '[rR]?\'([^\\n\'\\\\]|\\\\.)*\'|[rR]?"([^\\n"\\\\]|\\\\.)*"'), ('LP', '\\('), ('RP', '\\)'), ('LB', '\\['), ('RB', '\\]'), ('OR', '[|]'), ('STAR', '[*]'), ('PLUS', '[+]'), ], ['[ \011\015\012]+', '#.*?\015?\012'], str) class ParserDescription(Parser): def Parser(self): self._scan('"parser"') ID = self._scan('ID') self._scan('":"') Options = self.Options() Tokens = self.Tokens() Rules = self.Rules(Tokens) END = self._scan('END') return Generator(ID, Options, Tokens, Rules) def Options(self): opt = {} while self._peek(frozenset(['"option"', '"token"', '"ignore"', 'END', '"rule"'])) == '"option"': self._scan('"option"') self._scan('":"') Str = self.Str() opt[Str] = 1 return opt def Tokens(self): tok = [] while self._peek(frozenset(['"token"', '"ignore"', 'END', '"rule"'])) in ['"token"', '"ignore"']: _token_ = self._peek(frozenset(['"token"', '"ignore"'])) if _token_ == '"token"': self._scan('"token"') ID = self._scan('ID') self._scan('":"') Str = self.Str() tok.append((ID, Str)) else: # == '"ignore"' self._scan('"ignore"') self._scan('":"') Str = self.Str() tok.append(('#ignore', Str)) return tok def Rules(self, tokens): rul = [] while self._peek(frozenset(['"rule"', 'END'])) == '"rule"': self._scan('"rule"') ID = self._scan('ID') OptParam = self.OptParam() self._scan('":"') ClauseA = self.ClauseA(tokens) rul.append((ID, OptParam, ClauseA)) return rul def ClauseA(self, tokens): ClauseB = self.ClauseB(tokens) v = [ClauseB] while self._peek(frozenset(['OR', 'RP', 'RB', '"rule"', 'END'])) == 'OR': OR = self._scan('OR') ClauseB = self.ClauseB(tokens) v.append(ClauseB) return cleanup_choice(v) def ClauseB(self, tokens): v = [] while self._peek(frozenset(['STR', 'ID', 'LP', 'LB', 'STMT', 'OR', 'RP', 'RB', '"rule"', 'END'])) in ['STR', 'ID', 'LP', 'LB', 'STMT']: ClauseC = self.ClauseC(tokens) v.append(ClauseC) return cleanup_sequence(v) def ClauseC(self, tokens): ClauseD = self.ClauseD(tokens) _token_ = self._peek(frozenset(['PLUS', 'STAR', 'STR', 'ID', 'LP', 'LB', 'STMT', 'OR', 'RP', 'RB', '"rule"', 'END'])) if _token_ == 'PLUS': PLUS = self._scan('PLUS') return Plus(ClauseD) elif _token_ == 'STAR': STAR = self._scan('STAR') return Star(ClauseD) else: return ClauseD def ClauseD(self, tokens): _token_ = self._peek(frozenset(['STR', 'ID', 'LP', 'LB', 'STMT'])) if _token_ == 'STR': STR = self._scan('STR') t = (STR, eval(STR, {}, {})) if t not in tokens: tokens.insert(0, t) return Terminal(STR) elif _token_ == 'ID': ID = self._scan('ID') OptParam = self.OptParam() return resolve_name(tokens, ID, OptParam) elif _token_ == 'LP': LP = self._scan('LP') ClauseA = self.ClauseA(tokens) RP = self._scan('RP') return ClauseA elif _token_ == 'LB': LB = self._scan('LB') ClauseA = self.ClauseA(tokens) RB = self._scan('RB') return Option(ClauseA) else: # == 'STMT' STMT = self._scan('STMT') return Eval(STMT[2:-2]) def OptParam(self): if self._peek(frozenset(['ATTR', '":"', 'PLUS', 'STAR', 'STR', 'ID', 'LP', 'LB', 'STMT', 'OR', 'RP', 'RB', '"rule"', 'END'])) == 'ATTR': ATTR = self._scan('ATTR') return ATTR[2:-2] return '' def Str(self): STR = self._scan('STR') return eval(STR, {}, {}) # This replaces the default main routine yapps_options = [ ('context-insensitive-scanner', 'context-insensitive-scanner', 'Scan all tokens (see docs)') ] def generate(inputfilename, outputfilename='', dump=0, **flags): """Generate a grammar, given an input filename (X.g) and an output filename (defaulting to X.py).""" if not outputfilename: if inputfilename[-2:] == '.g': outputfilename = inputfilename[:-2] + '.py' else: raise Exception("Missing output filename") print 'Input Grammar:', inputfilename print 'Output File:', outputfilename DIVIDER = '\n%%\n' # This pattern separates the pre/post parsers preparser, postparser = None, None # Code before and after the parser desc # Read the entire file s = open(inputfilename, 'r').read() # See if there's a separation between the pre-parser and parser f = find(s, DIVIDER) if f >= 0: preparser, s = s[:f] + '\n\n', s[f + len(DIVIDER):] # See if there's a separation between the parser and post-parser f = find(s, DIVIDER) if f >= 0: s, postparser = s[:f], '\n\n' + s[f + len(DIVIDER):] # Create the parser and scanner p = ParserDescription(ParserDescriptionScanner(s)) if not p: return # Now parse the file t = wrap_error_reporter(p, 'Parser') if not t: return # Error if preparser is not None: t.preparser = preparser if postparser is not None: t.postparser = postparser # Check the options for f in t.options.keys(): for opt, _, _ in yapps_options: if f == opt: break else: print 'Warning: unrecognized option', f # Add command line options to the set for f in flags.keys(): t.options[f] = flags[f] # Generate the output if dump: t.dump_information() else: t.output = open(outputfilename, 'w') t.generate_output() if __name__ == '__main__': import getopt optlist, args = getopt.getopt(sys.argv[1:], 'f:', ['dump']) if not args or len(args) > 2: print 'Usage:' print ' python', sys.argv[0], '[flags] input.g [output.py]' print 'Flags:' print (' --dump' + ' ' * 40)[:35] + 'Dump out grammar information' for flag, _, doc in yapps_options: print (' -f' + flag + ' ' * 40)[:35] + doc else: # Read in the options and create a list of flags flags = {} for opt in optlist: for flag, name, _ in yapps_options: if opt == ('-f', flag): flags[name] = 1 break else: if opt == ('--dump', ''): flags['dump'] = 1 else: print 'Warning: unrecognized option', opt[0], opt[1] apply(generate, tuple(args), flags)