├── LICENSE ├── README.md ├── asciidoctor.json ├── index.adoc └── standard ├── .gitignore ├── 21-026.adoc ├── README.md ├── UML └── README.md ├── abstract_tests ├── ATS_class_geotiff_format.adoc ├── ATS_class_geotiff_keys.adoc ├── ATS_class_geotiff_overviews.adoc ├── ATS_class_httprange.adoc ├── README.md ├── geotiff_format │ ├── ATS_basic_format.adoc │ └── ATS_tiling.adoc ├── geotiff_keys │ ├── ATS_basic_metadata_format.adoc │ ├── ATS_keys_georeference.adoc │ └── ATS_point-of-origin.adoc ├── geotiff_overviews │ └── ATS_overviews.adoc └── httprange │ ├── ATS_httprange.adoc │ └── ATS_httpsrange.adoc ├── annex-a.adoc ├── annex-bibliography.adoc ├── annex-history.adoc ├── clause_0_front_material.adoc ├── clause_1_scope.adoc ├── clause_2_conformance.adoc ├── clause_3_references.adoc ├── clause_4_terms_and_definitions.adoc ├── clause_5_conventions.adoc ├── clause_6_overview.adoc ├── clause_7_geotiff_format_text.adoc ├── clause_8_http_range_text.adoc ├── clause_9_media_types.adoc ├── code └── README.md ├── figures └── README.md ├── images └── README.md ├── recommendations ├── README.md ├── geotiff_format │ ├── basic_format.adoc │ └── recommendation_compression.adoc ├── geotiff_overviews │ └── ifd_order.adoc ├── media_type │ └── media_type.adoc └── optimized_geotiff │ └── size_and_number.adoc ├── requirements ├── README.md ├── geotiff_format │ ├── basic_format.adoc │ └── tiling.adoc ├── geotiff_keys │ ├── basic_metadata_format.adoc │ ├── keys_georeference.adoc │ └── point-of-origin.adoc ├── geotiff_overviews │ └── overviews.adoc ├── httprange │ ├── httprange.adoc │ └── httpsrange.adoc ├── optimized_geotiff │ ├── geotiff.adoc │ ├── number.adoc │ └── small_tiles.adoc ├── requirements_geotiff_format.adoc ├── requirements_geotiff_keys.adoc ├── requirements_geotiff_overviews.adoc ├── requirements_httprange.adoc └── requirements_optimized_geotiff.adoc ├── resources ├── bibtex-file.bib ├── fonts │ ├── Palatino-Bold.ttf │ ├── Palatino-BoldItalic.ttf │ ├── Palatino-Italic.ttf │ ├── Palatino-Roman.ttf │ ├── SourceSansPro-Bold.ttf │ ├── SourceSansPro-BoldItalic.ttf │ ├── SourceSansPro-Italic.ttf │ ├── SourceSansPro-Regular.ttf │ ├── mplus1mn-bold-ascii.ttf │ ├── mplus1mn-bold_italic-ascii.ttf │ ├── mplus1mn-italic-ascii.ttf │ ├── mplus1mn-regular-ascii-conums.ttf │ ├── mplus1p-regular-fallback.ttf │ ├── notoserif-bold-subset.ttf │ ├── notoserif-bold_italic-subset.ttf │ ├── notoserif-italic-subset.ttf │ └── notoserif-regular-subset.ttf ├── lncs.csl ├── ogc-theme.yml └── stylesheets │ ├── coderay-asciidoctor.css │ ├── ogc.css │ └── rocket-panda.css └── standard.css /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | This GitHub repository contains the content for the OGC Candidate to Standard Cloud Optimized GeoTIFF (COG) (OGC 21-026). 4 | 5 | This GitHub repository contains [OGC](https://www.ogc.org/)'s Candidate to Standard Cloud Optimized GeoTIFF (COG) (OGC 21-026). The draft specification is available in [HTML](http://docs.ogc.org/DRAFTS/21-026.html) and [PDF](http://docs.ogc.org/DRAFTS/21-026.pdf). 6 | 7 | The fact that "COG" is a permutation or the "OGC" letters is purely accidental :-). The COG format was originated outside the OGC and the intention is that it becomes an OGC standard with the support of the community or an OGC community standard. That is why this repository is open to anybody. This repository reproduces the current status of the COG practices collected mainly from https://www.cogeo.org/ and https://gdal.org/drivers/raster/cog.html and translates it into formal requirements and an OGC standards template. 8 | 9 | This repository was originated from the work in Testbed 17 and the original documents are in https://gitlab.ogc.org/ogc/T17-D046-COG-Specification-ER/-/tree/master/standardDrafts/COG. The intention is to keep them aligned until the end of Testbed 17 except on the parts where the Testbed17 was "creative" (mainly in relation to 2D-TMS) that has been removed to go back to the original COG direction. Afterwards, the work has exclusively continued in the GeoTIFF.SWG. 10 | 11 | The repo is organized as follows: 12 | 13 | * index.adoc - nothing in this document 14 | * standard - the main Standard document content 15 | - organized in multiple sections and directories 16 | - this is the only part needed to create a Standard 17 | -------------------------------------------------------------------------------- /asciidoctor.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "OGC_doc_number": "21-026", 4 | "urn":"http://www.opengis.net/doc/IS/cog-1/21-026.adoc", 5 | "title":"OGC Cloud Optimized GeoTIFF standard", 6 | "path":"standard/21-026.adoc", 7 | "options": ["--trace"], 8 | "a":[ 9 | "data-uri", 10 | "stylesdir=./resources/stylesheets", 11 | "dot=/usr/bin/dot" 12 | ], 13 | "r":[ 14 | "asciidoctor-diagram" 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /index.adoc: -------------------------------------------------------------------------------- 1 | index.adoc 2 | 3 | nothing here 4 | -------------------------------------------------------------------------------- /standard/.gitignore: -------------------------------------------------------------------------------- 1 | standard_document.html 2 | standard_document.pdf 3 | -------------------------------------------------------------------------------- /standard/21-026.adoc: -------------------------------------------------------------------------------- 1 | :Title: OGC Cloud Optimized GeoTIFF Standard 2 | :titletext: {Title} 3 | :doctype: book 4 | :encoding: utf-8 5 | :lang: en 6 | :toc: 7 | :toc-placement!: 8 | :toclevels: 3 9 | :numbered: 10 | :sectanchors: 11 | :source-highlighter: pygments 12 | 13 | // set media to output format print or screen for pdf export 14 | :media: print 15 | :bibtex-file: resources/bibtex-file.bib 16 | 17 | <<< 18 | [cols = ">",frame = "none",grid = "none"] 19 | |=== 20 | |{set:cellbgcolor:#FFFFFF} 21 | |[big]*Open Geospatial Consortium* 22 | |Submission Date: 2022-06-29 23 | |Approval Date:   2023-05-08 24 | |Publication Date:   2023-07-14 25 | |External identifier of this OGC(R) document: http://www.opengis.net/doc/is/COG/1.0 26 | |Internal reference number of this OGC(R) document:    21-026 27 | |Version: 1.0 28 | |Category: OGC(R) Implementation Standard 29 | |Editor:   Joan Maso 30 | |=== 31 | 32 | [cols = "^", frame = "none"] 33 | |=== 34 | |[big]*{titletext}* 35 | |=== 36 | 37 | [cols = "^", frame = "none", grid = "none"] 38 | |=== 39 | |*Copyright notice* 40 | |Copyright (C) 2023 Open Geospatial Consortium 41 | |To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ 42 | |=== 43 | 44 | [cols = "^", frame = "none"] 45 | |=== 46 | |*Warning* 47 | |=== 48 | 49 | This document is an OGC Member approved international standard. This document is available on a royalty free, non-discriminatory basis. Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation. 50 | 51 | [width = "50%", grid = "none"] 52 | |=== 53 | |Document type:    OGC® Standard 54 | |Document subtype:    55 | |Document stage:    Approved for public release 56 | |Document language:  English 57 | |=== 58 | 59 | <<< 60 | License Agreement 61 | 62 | [small]#Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.# 63 | 64 | [small]#If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.# 65 | 66 | [small]#THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.# 67 | 68 | [small]#THE INTELLECTUAL PROPERTY 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 OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.# 69 | 70 | [small]#This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR's sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.# 71 | 72 | [small]#Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.# 73 | 74 | <<< 75 | toc::[] 76 | 77 | <<< 78 | 79 | //// 80 | Make sure to complete each included document 81 | //// 82 | include::clause_0_front_material.adoc[] 83 | 84 | include::clause_1_scope.adoc[] 85 | 86 | include::clause_2_conformance.adoc[] 87 | 88 | include::clause_3_references.adoc[] 89 | 90 | include::clause_4_terms_and_definitions.adoc[] 91 | 92 | include::clause_5_conventions.adoc[] 93 | 94 | include::clause_6_overview.adoc[] 95 | 96 | include::clause_7_geotiff_format_text.adoc[] 97 | 98 | include::clause_8_http_range_text.adoc[] 99 | 100 | include::clause_9_media_types.adoc[] 101 | 102 | <<< 103 | //// 104 | add or remove annexes after "A" as necessary 105 | //// 106 | include::annex-a.adoc[] 107 | 108 | <<< 109 | //// 110 | Revision History should be the last annex before the Bibliography 111 | Bibliography should be the last annex 112 | //// 113 | include::annex-history.adoc[] 114 | 115 | <<< 116 | include::annex-bibliography.adoc[] 117 | -------------------------------------------------------------------------------- /standard/README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | ## Content 4 | 5 | This folder contains the text for the standard 6 | 7 | * 21-026.adoc - the main standard document with references to all sections 8 | * remaining adocs - each section of the standard document is in a separate document: follow directions in each document to populate 9 | * figures - figures go here 10 | * images - Image files for graphics go here. Image files for figures go in the "figures" directory. Only place in here images not used in figures (e.g., as parts of tables, as logos, etc.) 11 | * requirements - directory for requirements and requirement classes to be referenced in clause_7_normative_text.adoc 12 | * code - sample code to accompany the standard, if desired 13 | * abstract_tests - the Abstract Test Suite comprising one test for every requirement, optional 14 | * UML - UML diagrams, if applicable 15 | 16 | ## Building 17 | 18 | To produce the HTML of the standard run `asciidoctor --safe -a data-uri -o 19 | 21-026.html 21-026.adoc`. 20 | 21 | To produce the PDF of the standard run `asciidoctor-pdf --safe -o 22 | 21-026.pdf 21-026.adoc` 23 | -------------------------------------------------------------------------------- /standard/UML/README.md: -------------------------------------------------------------------------------- 1 | Store UML content in this directory. Feel free to use any organizational scheme that you like. 2 | 3 | Figures derived from UML diagrams should be placed in the "figures" folder. 4 | -------------------------------------------------------------------------------- /standard/abstract_tests/ATS_class_geotiff_format.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-format]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/COG/1.0/conf/geotiff-format 6 | |Target type |TIFF Encoder 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== Basic format 11 | include::geotiff_format/ATS_basic_format.adoc[] 12 | 13 | ==== Tiles 14 | 15 | include::geotiff_format/ATS_tiling.adoc[] 16 | -------------------------------------------------------------------------------- /standard/abstract_tests/ATS_class_geotiff_keys.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-keys]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/COG/1.0/conf/geotiff-keys 6 | |Target type |GeoTIFF Encoder 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== GeoTIFF 11 | 12 | include::geotiff_keys/ATS_basic_metadata_format.adoc[] 13 | 14 | ==== Georeference Keys 15 | 16 | include::geotiff_keys/ATS_keys_georeference.adoc[] 17 | 18 | include::geotiff_keys/ATS_point-of-origin.adoc[] 19 | -------------------------------------------------------------------------------- /standard/abstract_tests/ATS_class_geotiff_overviews.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-overviews]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/COG/1.0/conf/geotiff-overviews 6 | |Target type |TIFF Encoder 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== Overviews 11 | 12 | include::geotiff_overviews/ATS_overviews.adoc[] 13 | -------------------------------------------------------------------------------- /standard/abstract_tests/ATS_class_httprange.adoc: -------------------------------------------------------------------------------- 1 | [[ats_http-range]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/COG/1.0/conf/http-range 6 | |Target type |Web server 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== Range 11 | 12 | include::httprange/ATS_httprange.adoc[] 13 | 14 | include::httprange/ATS_httpsrange.adoc[] 15 | -------------------------------------------------------------------------------- /standard/abstract_tests/README.md: -------------------------------------------------------------------------------- 1 | This folder contains the Abstract Test Suite. 2 | 3 | Each file describes a single test. The naming convention for these files is: 4 | 5 | "TESTn.adoc" where "n" corresponds to the test number. Numbers should have preceeding zeros appropriate for the total number of tests in the project (e.g., the first test could be TEST001 if less than 1000 tests are anticipated). 6 | 7 | The test is expressed according to this pattern: 8 | 9 | NOTE: for each test, there should be a corresponding requirement in the "requirements" folder. 10 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_format/ATS_basic_format.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-format-use-geotiff]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-format/use-geotiff 5 | | Test Purpose | Validate that a COG file bigger than 4 GByte follows the BigTIFF standard 6 | | Requirement | /req/geotiff-format/use-geotiff 7 | | Test method | Validate the requirements of the BiGTIFF 8 | 9 | Test passes if a COG file bigger than 4 GByte follows the BigTIFF standard 10 | |=== 11 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_format/ATS_tiling.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-format-tiling]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-format/tiling 5 | | Test Purpose | Validate that all Image File Directories (IFD) in a COG file are organized into tiles 6 | | Requirement | /req/geotiff-format/tiling 7 | | Test method | Validate the requirements of tiled IFDs 8 | 9 | Test passes if all Image File Directories (IFD) in a COG file are organized into tiles 10 | 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_keys/ATS_basic_metadata_format.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-format-basic-metadata-format]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-format/use-geotiff 5 | | Test Purpose | Validate that a COG file includes and encodes geospatial metadata following the GeoTIFF standard 6 | | Requirement | /req/geotiff-format/use-geotiff 7 | | Test method | Validate the requirements of GeoTIFF metadata 8 | 9 | Test passes if geospatial metadata following the GeoTIFF standard is found on the COG file 10 | 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_keys/ATS_keys_georeference.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-keys-georeference]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-keys/georeference 5 | | Test Purpose | Validate that a COG file contains georeference data using ModelTiepointTag, ModelPixelScaleTag and GeoKeyDirectoryTag tags in the IFD Subfiles of full resolution 6 | | Requirement | /req/geotiff-keys/georeference 7 | | Test method | Validate the requirements of georeference 8 | 9 | Test passes if georeference data using ModelTiepointTag, ModelPixelScaleTag and GeoKeyDirectoryTag tags is found in the IFD Subfiles of full resolution of the COG file (a.k.a IFDs whose bit 0 of the value of the NewSubfileType tag is *not* set, or NewSubfileType absent) 10 | 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_keys/ATS_point-of-origin.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-keys-point-of-origin]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-keys/point-of-origin 5 | | Test Purpose | Validate that all reduced-resolution subfiles do not contain georeference data. 6 | | Requirement | /req/geotiff-keys/point-of-origin 7 | | Test method | Validate the requirements of no metadata in subfiles 8 | 9 | Test passes if all reduced-resolution subfiles do not contain georeference data in the COG file 10 | 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/abstract_tests/geotiff_overviews/ATS_overviews.adoc: -------------------------------------------------------------------------------- 1 | [[ats_geotiff-overviews-overviews]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/geotiff-overviews/overviews 5 | | Test Purpose | Validate that a COG file contains the full resolution image as well as the reduced resolution images 6 | | Requirement | /req/geotiff-overviews/overviews 7 | | Test method | Validate the requirements of overviews 8 | 9 | Test passes if at least one IFD whose bit 0 of the value of the NewSubfileType tag is *not* set, or NewSubfileType absent (full-resolution image data) is present in the COG file and an the IFD with SubfileType 1 has an offset to an IFD with a NewSubfileType tag whose bit 0 is set (reduced-resolution image data), or 0 if there is no reduced-resolution image and all the IFD with a NewSubfileType tag whose bit 0 is set have an Image Width an Image Height inferior than the previous IFD. 10 | |=== 11 | -------------------------------------------------------------------------------- /standard/abstract_tests/httprange/ATS_httprange.adoc: -------------------------------------------------------------------------------- 1 | [[ats_http-range-use-range]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/http-range/use-range 5 | | Test Purpose | Validate that a server supports HTTP range 6 | | Requirement | /req/http-range/use-range 7 | | Test method | Validate the requirements of the HTTP range 8 | 9 | Test passes if an HTTP or HTTPS server supports HTTP range and uses byte ranges. 10 | |=== 11 | -------------------------------------------------------------------------------- /standard/abstract_tests/httprange/ATS_httpsrange.adoc: -------------------------------------------------------------------------------- 1 | [[ats_http-range-https-headers]] 2 | [cols=">20h,<80d",width="100%"] 3 | |=== 4 | |*Abstract Test {counter:ats-id}* |/conf/http-range/https-headers 5 | | Test Purpose | Validate that the header Access-Control-Allow-Headers: range is provided 6 | | Requirement | /req/http-range/https-headers 7 | | Test method | Validate the requirements of HTTPS allow headers 8 | 9 | Test passes if an HTTPS server advertises that allows access control for ranges by adding this line in the headers Access-Control-Allow-Headers: range 10 | |=== 11 | -------------------------------------------------------------------------------- /standard/annex-a.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Conformance Class Abstract Test Suite (Normative) 4 | 5 | A implementation of this standard must satisfy the following system characteristics to be conformant with this specification. 6 | 7 | === Conformance Class GeoTIFF Tiles 8 | 9 | include::abstract_tests/ATS_class_geotiff_format.adoc[] 10 | 11 | === Conformance Class GeoTIFF Overviews 12 | 13 | include::abstract_tests/ATS_class_geotiff_overviews.adoc[] 14 | 15 | === Conformance Class GeoTIFF Keys 16 | 17 | include::abstract_tests/ATS_class_geotiff_keys.adoc[] 18 | 19 | === Conformance Class HTTP range 20 | 21 | include::abstract_tests/ATS_class_httprange.adoc[] 22 | -------------------------------------------------------------------------------- /standard/annex-bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | = Bibliography 5 | 6 | [[COGEO]] 7 | [1] Cloud Optimized GeoTIFF. An imagery format for cloud-native geospatial processing. In Internet: https://www.cogeo.org/ 8 | 9 | [[GDAL_DOG]] 10 | [2] GDAL COG - Cloud Optimized GeoTIFF generator. In Internet: https://gdal.org/drivers/raster/cog.html 11 | 12 | [[OGC-21-025]] 13 | [3] Maso J. OGC Testbed-17: Cloud Optimized GeoTIFF specification Engineering Report. OGC 21-025 (2022) 14 | -------------------------------------------------------------------------------- /standard/annex-history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [width="90%",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2021-10-26 |0.1 |Joan Masó |all |initial version from parts of OGC 21-025 9 | |2022-06-01 |0.2 |Joan Masó |all |First complete version including ATS 10 | |2023-03-31 |1.0 |Joan Masó |all |Revision from the naming authority 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/clause_0_front_material.adoc: -------------------------------------------------------------------------------- 1 | [big]*i. Abstract* 2 | 3 | The Cloud Optimized GeoTIFF (COG) relies on two characteristics of the TIFF v6 format (tiles and reduced resolution subfiles), GeoTIFF keys for georeference, and the HTTP range, which allows for efficient downloading of parts of imagery and grid coverage data on the web and to make fast data visualization of TIFF or BigTIFF files and fast geospatial processing workflows possible. 4 | COG-aware applications can download only the information they need to visualize or process the data on the web. Numerous remote sensing datasets are available in cloud storage facilities that can benefit from optimized visualization and processing. 5 | This standard formalizes the requirements for a TIFF file to become a COG file and for the HTTP server to make COG files available in a fast fashion on the web. 6 | 7 | The key work for crafting this OGC Standard was undertaken in the Open-Earth-Monitor Cyberinfrastructure (OEMC) project, which received funding from the European Union’s Horizon Europe research and innovation program under grant agreement number 101059548 and in the All Data 4 Green Deal - An Integrated, FAIR Approach for the Common European Data Space (AD4GD) project, which received funding from the European Union’s Horizon Europe research and innovation program under grant agreement number 101061001. 8 | 9 | [big]*ii. Keywords* 10 | 11 | The following are keywords to be used by search engines and document catalogues. 12 | 13 | ogcdoc, OGC document, Cloud, GeoTIFF, Imagery, Web, COG 14 | 15 | [big]*iii. Preface* 16 | 17 | COG was previously defined by a community of users with the intention of improving the distribution of remote sensing images on the cloud. This document respects the decisions taken and conventions adopted by the community and formalizes them in standard requirements and recommendations. The Standard name still reflects this original purpose: a format optimized for the cloud. Similar principles are applied to other emerging formats such as Zarr (https://zarr.readthedocs.io/en/stable/) and Cloud Optimized Point Cloud (https://copc.io/). 18 | 19 | This document depends on the TIFF specification and the OGC GeoTIFF Standard. For big files, it may depend on the BigTIFF specification. The Standard takes advantage of some existing characteristics of the TIFF specification and the existing HTTP range specification and does not modify them in anyway. 20 | 21 | [big]*iv. Security Considerations* 22 | 23 | COG mainly describes a data format. Security considerations for implementations utilizing COG are in the domain of the implementing application, deployment platform, operating system, networking environment, and web browsers. 24 | 25 | In general, this Standard does not place constraints on application, platform, operating system level, network, or web browser security. However, this Standard has a requirements class that requires "HTTP range." Attention has been made to also allow secure variants of HTTP such as HTTPS and still be able to mix data from different origins in web browsers using HTTP range. In that respect, considerations to support Cross Origin Resource Sharing (CORS) are done in the document. In particular, servers are encouraged to advertise the support for HTTP ranges in the Control-Allow-Headers header to allow for HTTPS CORS. 26 | 27 | NOTE: The security measures discussed in the following sections only allow various kinds of authentication under HTTPS. HTTPS only provides confidentiality or encryption at the protocol level. Confidentiality or encryption at the data level is not discussed by this Standard. 28 | 29 | [big]*v. Submitting organizations* 30 | 31 | The following organizations submitted this Document to the Open Geospatial Consortium (OGC): 32 | 33 | * UAB-CREAF 34 | * Planet Labs PBC 35 | * Spatialys 36 | * Development Seed 37 | 38 | [big]*vi. Submitters* 39 | 40 | All questions regarding this submission should be directed to the editor or the submitters: 41 | 42 | |=== 43 | |*Name* |*Affiliation* 44 | | Joan Maso | UAB-CREAF 45 | | Quinn Scripter | Planet Labs PBC 46 | | Even Rouault | Spatialys 47 | | Vincent Sarago | Development Seed 48 | |=== 49 | -------------------------------------------------------------------------------- /standard/clause_1_scope.adoc: -------------------------------------------------------------------------------- 1 | == Scope 2 | This document is an OGC Standard that specifies how TIFF files can be organized in a way that favors the extraction of convenient parts of the data at the needed resolution for visualization or analysis purposes. It also specifies how to use HTTP (or HTTPS) to communicate only the part of information needed without downloading the complete file. 3 | 4 | This document depends on the TIFF specification and the OGC GeoTIFF Standard. For big files, it also may depend on the BigTIFF specification. The Standard takes advantage of some existing characteristics of the TIFF specification and the existing HTTP range RFC and does not modify them in anyway. 5 | -------------------------------------------------------------------------------- /standard/clause_2_conformance.adoc: -------------------------------------------------------------------------------- 1 | == Conformance 2 | This Standard defines 5 conformance classes. 3 | 4 | The following are the conformance classes that target TIFF Encoders. 5 | 6 | *<>* (http://www.opengis.net/spec/COG/1.0/req/geotiff-format) 7 | 8 | This class defines what characteristics of the TIFF (or BigTIFF) format should be used. Used alone responds to use cases doing analysis on images that can be processed by tiles. This images can be geospatial or other (e.g. medical scans) 9 | 10 | *<>* (http://www.opengis.net/spec/COG/1.0/req/geotiff-overviews) 11 | 12 | This class defines the overview characteristics of the TIFF (or BigTIFF) format that should be used. Used alone responds to use cases doing data visualization on images. This images can be geospatial or other (e.g., medical scans). 13 | 14 | *<>* http://www.opengis.net/spec/COG/1.0/req/geotiff-keys 15 | 16 | This class defines which GeoKeys to georeference the data should be used. It restricts the applicability to geospatial images. 17 | 18 | *<>* http://www.opengis.net/spec/COG/1.0/req/optimized_geotiff 19 | 20 | This class defines more rules on how the images should be built to accelerate visualization in the cloud and web environments in general. This approach is what has made COG format popular. 21 | 22 | The following conformance classes target web servers. 23 | 24 | *<>* (http://www.opengis.net/spec/COG/1.0/req/http-range) 25 | 26 | This class defines how to use COG in the cloud and the web to allow downloading only a fragment of the data. 27 | 28 | Conformance with this Standard shall be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site. 29 | 30 | In order to conform to this OGC Standard, a software implementation shall choose to implement: 31 | * Any one or more of the conformance levels specified in Annex A (normative). 32 | 33 | All requirements-classes and conformance-classes described in this document are owned by the Standard(s) identified. 34 | 35 | NOTE: Currently there is no way to list the conformance classes that a GeoTIFF file conforms to, so the COG is not specifying how to do so. 36 | -------------------------------------------------------------------------------- /standard/clause_3_references.adoc: -------------------------------------------------------------------------------- 1 | == References 2 | The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. For dated references, subsequent amendments to, or revisions of, any of these publications do not apply. For undated references, the latest edition of the normative document referred to applies. 3 | 4 | Adobe Development Association. TIFF Revision 6.0 Final — June 3, (1992) https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf 5 | 6 | Fielding, R., Nottingham, M. and Reschke, J.: HTTP Semantics RFC 9110, Section 14. Range Requests. Internet Engineering Task Force (IETF). ISSN: 2070-1721 (June 2022) https://www.rfc-editor.org/rfc/rfc9110#name-range-requests 7 | 8 | OGC: OGC GeoTIFF Standard. OGC 19-008r4. (2019) http://docs.opengeospatial.org/is/19-008r4/19-008r4.html 9 | 10 | van Damme J.: The BigTIFF File Format. https://www.awaresystems.be/imaging/tiff/bigtiff.html (No normative reference) 11 | -------------------------------------------------------------------------------- /standard/clause_4_terms_and_definitions.adoc: -------------------------------------------------------------------------------- 1 | == Terms and Definitions 2 | This document used the terms defined in https://portal.ogc.org/public_ogc/directives/directives.php[OGC Policy Directive 49], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2. 3 | 4 | This document also uses terms defined in the OGC Standard for Modular specifications (https://portal.opengeospatial.org/files/?artifact_id=34762[OGC 08-131r3]), also known as the 'ModSpec'. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec. 5 | 6 | For the purposes of this document, the following additional terms and definitions apply. 7 | 8 | === cloud computing:: 9 | 10 | on-demand availability of computer system resources, especially data storage (cloud storage) and computing power, without direct active management by the user [Wikipedia] 11 | 12 | === geokey:: 13 | 14 | key in a GeoTIFF equivalent in function to a TIFF tag, but using a different offset mechanism 15 | 16 | === GeoTIFF:: 17 | 18 | standard for storing georeference and geocoding information in a TIFF 6.0 compliant raster file or in a BigTIFF [GeoTIFF Format Specification 1.0, modified] 19 | 20 | === overview:: 21 | 22 | downsampled versions of the same image. 23 | 24 | NOTE: There is no mention of the term _overview_ in the TIFF v6 specification. This standard favors the use of the expression Reduced-Resolution Subfile to talk about an _overview_ 25 | 26 | === tag:: 27 | 28 | packet of numerical or ASCII values, which have a numerical TIFF "Tag" identifier indicating their information content 29 | 30 | === tile:: 31 | 32 | geometric shape with known properties that may or may not be the result of a tiling (tessellation) process. A tile consists of a single connected "piece" (topological disc) without "holes" or "lines" [OGC 19-014r3]+ 33 | 34 | In the context of a 2D _tile matrix_, a _tile_ is one of the rectangular regions of space, which can be uniquely identified by an integer row and column, making up the tile matrix. 35 | 36 | In the context of a geospatial data _tile set_, a _tile_ contains data for such a partition of space as part of an overall set of tiles for that tiled geospatial data. [OGC 2DTMS] 37 | 38 | === subfile:: 39 | 40 | mechanism for including multiple images in a single TIFF file based on the use of IFDs 41 | -------------------------------------------------------------------------------- /standard/clause_5_conventions.adoc: -------------------------------------------------------------------------------- 1 | == Conventions 2 | This section provides details and examples for any conventions used in the document. Examples of conventions are symbols, abbreviations, use of XML schema, or special notes regarding how to read the document. 3 | 4 | === Abbreviations 5 | 6 | [horizontal] 7 | BigTIFF:: Big Tagged Image File Format 8 | COG:: Cloud Optimized GeoTIFF 9 | CORS:: Cross-Origin Resource Sharing 10 | EPSG:: Registry of CRS descriptions maintained by the International Association of Oil and Gas Producers (IOGP) formerly known as the "European Petroleum Survey Group (EPSG)" and currently used only as an acronym 11 | HTTP:: Hypertext Transfer Protocol 12 | HTTPS:: Hypertext Transfer Protocol Secure 13 | IFD:: Image File Directory 14 | TIFF:: Tagged Image File Format 15 | 16 | === Identifiers 17 | The normative provisions in this Standard are denoted by the URI 18 | 19 | http://www.opengis.net/spec/cog/1.0 20 | 21 | All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base. 22 | -------------------------------------------------------------------------------- /standard/clause_6_overview.adoc: -------------------------------------------------------------------------------- 1 | == Overview 2 | Traditionally, high resolution imagery over the web requires that big files have to be entirely downloaded to the client before they can be analyzed or visualized. In the past, these files were provided by servers in the provider premises. Depending on the circumstances, this process can require considerable download time thus preventing the creation of responsive real time applications. Nowadays, cloud services offer almost unlimited storage, but the cost of the service depends on the intensity of use. The solution to the problems specified here is commonly called Cloud Optimized GeoTIFF (COG) that is based on a particular usage of one of the most popular formats in the world: the TIFF format. While the solution is popular in the cloud, the solution is equally effective in the web in general, and it is some times named as "web optimized." 3 | 4 | The TIFF format was created by the Aldus Corporation for use in desktop publishing. Aldus released the last version of the TIFF specification in 1992 (v. 6.0), subsequently only updated with an Adobe Systems copyright after the Adobe acquired Aldus in 1994. Several Aldus or Adobe technical notes have been published with minor extensions to the format, and several specifications have been based on TIFF 6.0, including TIFF/EP (ISO 12234-2), TIFF/IT (ISO 12639), TIFF-F (RFC 2306) and TIFF-FX (RFC 3949), GeoTIFF (OGC 19-008r4, v1.1) and BigTIFF. 5 | 6 | TIFF is a flexible, adaptable file format for handling images and data within a single file, by including the header tags (size, definition, image-data arrangement, applied image compression) that provide metadata about the images. The ability to store image data in a lossless format makes a TIFF file a useful image archive. TIFF can be used to store grey scale, color or RGB images as well as integer of floating point data, making it ideal as a support for storing the rangeset of a 2D grid coverage data. 7 | 8 | To improve TIFF performance over the web, COG relies on two characteristics of the TIFF v6 format, the georeference GeoTIFF keys and a relatively unused HTTP property. This way, COG allows for efficient downloading of parts of imagery and grid coverage data on the web, enables fast data visualization, and facilitates faster geospatial processing workflows. This particular type of TIFF has been recently used to set up a large series of remote sensing images on cloud providers repositories (e.g., Amazon Web Services), enabling cloud processing at lower traffic. In fact, COG-aware software can request just the portions of data that it needs, improving access time and bandwidth. 9 | 10 | COG is based on the GeoTIFF standard and does not introduce additional capabilities to the TIFF v6. As such, legacy software should be able to read COG files with no additional modifications. However, legacy software may not be able to take advantage of the streaming (understood here as partial download) capabilities, but still can easily download the whole file and read it. 11 | 12 | The amount of data available for geospatial analytics has increased considerably in recent years. Therefore, downloading the data into a single computer is often not feasible. Data producers that provide data in the COG format can help decrease how much data is downloaded and copied. This is because online software systems do not need to keep their own copy of the data for efficient access. New online software can access the content efficiently, while old versions can still download the data completely. This avoids the need to have two copies of the file: one for fast access and another for download purposes. 13 | 14 | COG relies on two complementary approaches already available in the existing standards to achieve its goal: 15 | 16 | * The first is the ability of GeoTIFF to store the raw pixels of the image organized in an efficient way using tiles and overviews; and 17 | * The second is HTTP GET Range request, that let web clients request just the portions of a file that they need. 18 | 19 | Using the first approach, COG organizes the GeoTIFF so the latter requests can easily select and get the parts of the file that are useful for processing. 20 | 21 | === Efficient organization of data in a TIFF file 22 | The Tiling and Reduced-Resolution Subfiles (sometimes called _overviews_) in the GeoTIFF format supports the necessary structure for COG files so that the HTTP GET Range queries can request just the part of the file that is relevant. 23 | 24 | Reduced-Resolution Subfiles come into play when the client wants to render a quick image of the whole or a big part of the area represented in the file. Instead of downloading every pixel, the software can just request a smaller, already created, lower resolution version. The structure of the COG file on an HTTP Range supporting web server enables client software to easily find and download just the part of the whole file that is needed. 25 | 26 | Tiles come into play when some small area of the overall extent of the COG file needs to be processed or visualized. This could be part of a reduced-resolution subfile, or it could be at full resolution. Tile organization makes all the relevant bytes of an area (a tile) to be in the same part of the file, so the software can use HTTP GET Range request to get only the tiles it needs. 27 | 28 | The number of requirements classes can be confusing and respond to different use cases. The Efficient organization of TIFF into COG is handled by the http://www.opengis.net/spec/COG/1.0/req/optimized_geotiff conformance class and its dependencies. 29 | 30 | === Relation to OGC Tile Set Standards 31 | 32 | The combined use of tiles and resolution levels is not new in OGC Standards. In fact the OGC Two-dimensional Tile Matrix Set Standard (and the older OGC WMTS 1.0) use the same approach. However, the OGC API - Tiles Standard and the older WMTS 1.0 Standard require either a service to be installed in the web server provider or thousands of pre-generated independent files (one for each tile) to be created. None of this is necessary in the COG approach as most of the modern web services natively support HTTP range. 33 | -------------------------------------------------------------------------------- /standard/clause_7_geotiff_format_text.adoc: -------------------------------------------------------------------------------- 1 | [[GeoTIFFFormatRequirements]] 2 | == GeoTIFF format requirements 3 | A COG file is a file that conforms to a subset of the TIFF specification (or the BigTIFF specification) and adheres to the GeoTIFF tag requirements. A COG uses two main organization techniques available in the TIFF version 6.0 specification: Tiling and Reduced-Resolution Subfiles (sometimes called _Overviews_). 4 | The tiled data can also be compressed for more efficient passage online. 5 | In addition, a COG file uses the GeoTIFF conventions for storing the relevant geospatial metadata. For convenience, Tiling and Reduced-Resolution Subfiles are presented in two independent conformance classes. 6 | 7 | [[geotiff-format-requirements-class]] 8 | === Requirement Class GeoTIFF Tiles 9 | include::requirements/requirements_geotiff_format.adoc[] 10 | 11 | ==== Basic format 12 | A COG file is a TIFF or a BigTiFF file. 13 | include::requirements/geotiff_format/basic_format.adoc[] 14 | 15 | include::recommendations/geotiff_format/basic_format.adoc[] 16 | 17 | ==== Tiles 18 | In the context for a TIFF file, *Tiling* is a strategy for dividing the content in the TIFF file differently than using the classical _Strips_. In the _Strips_ approach the data are organized into sequences of lines (rows) while *tiling* creates a number of internal rectangular _tiles_ stored in the actual image. _Strips_ divide the content of an image vertically (rows) but not horizontally (columns). With _Tiling_, a much quicker access to a certain area or two dimensional bounding box is possible as the relevant data is closer in the file and the portion of bytes that needs to be read is smaller than in the _strips_ approach. 19 | 20 | include::requirements/geotiff_format/tiling.adoc[] 21 | 22 | NOTE: The ability to have multiple Image File Directories (IFD) becomes important when the COG has also _overviews_. See the next requirements class for more details. 23 | 24 | Tiles, as defined in the TIFF version 6.0 specification, can be mapped to the ones defined in the OGC Two Dimensional Tile Matrix Set Standard (2D-TMS). 25 | For example in 2D-TMS, the TIFF 6.0 forces all tiles to be of the same size. 26 | This is possible with the introduction of the concept of padding: 27 | if necessary extra blank rows or columns are added to the right-most and bottom-most tile to make them the same shape as other tiles. 28 | However, the naming of the TIFF tags used version 6.0 and the property names used in the 2D-TMS differ. 29 | The following table provides a mapping between the two standards. 30 | 31 | [#mapping-tiff-and-2d-tms,reftext='{table-caption} {couner:table-num}'] 32 | .Mapping between the OGC the 2D-TMS standard and the TIFF version 6.0, section 15 33 | [width = "100%",options="header"] 34 | |=== 35 | | OGC 2D-TMS | TIFF v. 6.0 | Definition 36 | | TileWidth | TileWidth | The tile width in pixels. The number of columns in each tile 37 | | TileHeight | TileLength | The tile height in pixels. The number of rows in each tile 38 | | MatrixWidth | TilesAcross | Number of tiles in the width direction 39 | | MatrixHeight | TilesDown | Number of tiles in the height direction 40 | |=== 41 | 42 | Please note that the TIFF 6.0 specification 43 | imposes the requirement that _TileWidth and TileLength must be a multiple of 16_. 44 | The specification argues that this restriction improves performance in some graphics environments 45 | and enhances compatibility with compression schemes such as JPEG. 46 | There is no such restriction in the OGC 2D-TMS. 47 | 48 | ==== Compression 49 | Compression of the bytes is a general best practice for enabling software 50 | to quickly access data, in particular over the network. 51 | The combination of compression with the HTTP GET Range requests maximizes efficiency. 52 | HTTP GET Range will be standardized in another requirements class. 53 | 54 | include::recommendations/geotiff_format/recommendation_compression.adoc[] 55 | 56 | ==== Planar Configuration considerations 57 | 58 | When more than one component is encoded in a TIFF file, the TIFF provides two possibilities. 59 | 60 | * The component values for each pixel are stored contiguously. This is marked in the file as PlanarConfiguration=Contig (a.k.a. Chunky format, value 1). This is a common arrangement for RGB combinations of bands. The data is stored as RGBRGBRGB… (this arrangement is also known as Band Interleaved by Pixel, BIP). 61 | * The components are stored in separate _component planes_. This is marked in the file as PlanarConfiguration=Separate (a.k.a. Planar format, value 2). This is the common arrangement for the bands of a multispectral image (this arrangement is also known as Band Sequential, BSQ). 62 | 63 | NOTE: (extracted from the TIFF 6.0 specification) PlanarConfiguration=2 is not currently [written in 1992] in widespread use and it is not recommended for general interchange. 64 | 65 | Following this note, most common implementations of the COG encoders (e.g., GDAL) use PlanarConfiguration=1 (see https://gdal.org/drivers/raster/cog.html#high-level). 66 | 67 | [[geotiff-overviews-requirements-class]] 68 | === Requirement Class GeoTIFF Overviews 69 | 70 | include::requirements/requirements_geotiff_overviews.adoc[] 71 | 72 | ==== Requirement Reduced-Resolution Subfiles 73 | *Reduced-Resolution Subfiles* (a.k.a _Overviews_) are down-sampled versions of the same image included in the same TIFF file. This means that an overview is a _zoomed out_ version from the original image. It has less detail but is also smaller. For visualization purposes or for analytical processes that do not require full resolution, a COG can provide _Reduced-Resolution Subfiles_ that match different scale denominators or cell sizes required by clients. _Reduced-Resolution Subfiles_ increase the size of the file but also increase performance. 74 | 75 | NOTE: The general description of the COG use the concept of _overviews_. Actually, 76 | there is nothing called _overviews_ in the TIFF version 6.0 specification. 77 | Instead, the TIFF version 6.0 describes how a TIFF file can be composed of one or more images, each one stored in 78 | an Image File Directories (IFD). Some IFDs may contain reduced-resolution subfiles. 79 | This is the reason why this standard favors the use of the expression _Reduced-Resolution Subfiles_ to talk about _overviews_. 80 | 81 | There may be more than one IFD in a TIFF file and each IFD indicates 82 | the offset of the next IFD sits in the file (or 0 if no other IFD is available). 83 | Each IFD defines a subfile. Having images as subfiles has several applications. 84 | The NewSubfileType entry specifies several types of subfiles, among which we distinguish: 85 | - IFD with a NewSubfileType tag whose bit 0 is *not* set, or without a NewSubfileType tag, to mean a _full-resolution image data_; and 86 | - IFD with a NewSubfileType tag whose bit 0 is set, to mean a _reduced-resolution image data of the full resolution one_. 87 | 88 | include::requirements/geotiff_overviews/overviews.adoc[] 89 | 90 | NOTE: The presence of _reduced-resolution subfiles_ in a COG file is optional. Only the COG files that conform to this conformance class are forced to have _reduced-resolution subfiles_. 91 | 92 | The TIFF specification is very flexible with how IFDs are positioned in the file; the only requirement is that the last 4 bytes of the IFD point to the byte offset of the next. So a totally valid TIFF could contain an optimized image where the full resolution image IFD is at the start of the file, the IFD of the first overview is at the end of the file, and the IFD of the second overview is at the middle of the file. Reading the header of an TIFF like this would require making three consecutive requests. 93 | 94 | To increase performance, the IFD should be arranged in a particular order expressed in the following recommendation. In the following recommendation, the "order" implies both the order of the IFD links as well as the position in the file implied by the offset. 95 | 96 | The advantage of this IFD order is allowing readers to fetch the entire TIFF header (including all IFDs for all subfiles) in a single request upon opening the file for the first time. This reduces the number of file accesses needed to read it and improves cache-ability of the TIFF header for repeat requests to the same image. 97 | 98 | For example, when the file is accessed by HTTP range, available from a S3 backend, the latency per HTTP request is about ~20-30ms that will be added other latencies due to data locality and internet transfer (~150ms is a common value). Fetching the header of a COG over 3 consecutive HTTP requests adds ~540ms of latency which is large enough to be perceived by the user, giving a feeling of slow/clunky display especially if rendered in a web browser. Minimizing the number of requests needed to read a COG file is more important over slow internet connections where latencies are exacerbated. 99 | 100 | include::recommendations/geotiff_overviews/ifd_order.adoc[] 101 | 102 | NOTE: There can be more than one full-resolution image data in the file. In this case, each full-resolution image data will be contiguous to its _reduced-resolution subfiles_ and their IFDs. 103 | 104 | [[geotiff-keys-requirements-class]] 105 | === Requirement Class GeoTIFF Keys 106 | The GeoTIFF standard defines a mechanism to add GeoTIFF keys to a TIFF file. 107 | The main purpose of these keys is to add a geospatial reference to the data stored in the TIFF file. In a COG, GeoTIFF keys are a fundamental part of the standard as most of the COG files are geospatially-referenced TIFFs. 108 | 109 | include::requirements/requirements_geotiff_keys.adoc[] 110 | 111 | ==== Requirement GeoTIFF 112 | A COG uses GeoTIFF to document the metadata about the TIFF file, including the georeference of the full resolution images IFDs. The georeference of the Reduced-Resolution Subfiles is derived from the georeference of the full resolution images IFDs. 113 | 114 | include::requirements/geotiff_keys/basic_metadata_format.adoc[] 115 | 116 | The OGC Naming Authority (OGC-NA) maintains a register of TIFF tags relevant for the geospatial community (most of them defined in the GeoTIFF standard) with the URL http://www.opengis.net/def/geotiff-tag. The COG standard does neither defines COG specific TIFF tags nor GeoTIFF keys. In the future it may be necessary for the communities that use COG to register tags for their specialist use cases. It is also possible that they reuse the existing GeoTIFF tags to define new GeoTIFF keys. Such tags or keys could then be organized into groups that deal with the needs of a particular domain. 117 | 118 | ==== Requirement Georeference Keys 119 | There is a geometrical relation between the reduced-resolution subfiles and the corresponding full-resolution subfile. Only full-resolution subfiles are required to have GeoTIFF keys. 120 | 121 | include::requirements/geotiff_keys/keys_georeference.adoc[] 122 | 123 | All linked reduced-resolution subfiles (a.k.a IFDs whose bit 0 of the value of the NewSubfileType tag is set) that are linked 124 | to a full resolution IFD (i.e., an IFD whose bit 0 of the value of the NewSubfileType tag is *not* set, or NewSubfileType absent) share the set of georeference keys from the full resolution IFD. In practice this means that they have a common CRS and extent information, and differ only by their resolution. 125 | This means that there is the assumption that all related subfiles share the same point of origin for the top left corner or the image. 126 | 127 | include::requirements/geotiff_keys/point-of-origin.adoc[] 128 | 129 | The pixel size in the first dimension of a reduced-resolution subfile can be calculated by multiplying the full-resolution subfile pixel size by the ImageWidth ratio between the full-resolution and the reduced-resolution. 130 | The pixel size in the second dimension of a reduced-resolution subfile can be calculated by multiplying the full-resolution subfile pixel size by the ImageHeight ratio between the full-resolution and the reduced-resolution. 131 | 132 | For the IFD reduced-resolution subfiles linked to IFD0, IFDn_PixelScaleX and IFDn_PixelScaleY can be calculated like this: 133 | 134 | [%unnumbered] 135 | ---- 136 | IFDn_PixelScaleX=IFD0_PixelScaleX*IFD0_ImageWidth/IFDn_ImageWidth 137 | IFDn_PixelScaleY=IFD0_PixelScaleY*IFD0_ImageHeight/IFDn_ImageHeight 138 | ---- 139 | 140 | For a georeferenced file with a projected CRS that is fully defined in the EPSG database 141 | there is no need to define the base Geographic CRS, geodetic datum, etc. in the TIFF file. 142 | In these cases, the following keys in the IFD0 are sufficient. 143 | 144 | [%unnumbered] 145 | ---- 146 | ImageWidth = 20111 147 | ImageHeight = 16882 148 | ModelTiepointTag = (0 0 0 187334 3255440 0) 149 | ModelPixelScaleTag = (30 30 0) 150 | GeoKeyDirectoryTag: 151 | - GTModelTypeGeoKey = 1 (ModelTypeProjected 2D) 152 | - GTRasterTypeGeoKey = 1 (RasterPixelIsArea) 153 | - ProjectedCRSGeoKey = 32628 (Projected 2D CRS WGS 84 / UTM zone 28N) 154 | ---- 155 | 156 | This example corresponds to imagery over the Canary Islands with a resolution 157 | of 30 meters per pixel. 158 | There is a grid intersection line in the image at pixel location (0, 0). 159 | 160 | The 2 first numbers in ModelTiepointTag correspond to 161 | the projected coordinate reference system easting/northing of (X:187334, Y:3255440) 162 | (the numbers 4th and 5th in ModelTiepointTag) in the EPSG:32628 (WGS 84 / UTM zone 28N). 163 | 164 | The georeference of the reduced-resolution subfiles (a.k.a. IFDs whose bit 0 of the value of the NewSubfileType tag is set) 165 | that are linked to this IFD0 are supposed to be the same except where `ModelPixelScaleTag` 166 | represents meters per pixel (pixel size). 167 | In this example, IFD0 has `ImageWidth=20111` and `ImageHeigth=16882` while IFD1 has `ImageWidth=10056` and `ImageHeigth=8441`, so 168 | `IFD1_PixelScaleX` and `IFD1_PixelScaleY` can be calculated as: 169 | 30*20111/10056=59.997 and 30*16882/8441=60. 170 | 171 | As we can see in the example, tiles can easily result in non-square-pixels; a situation that should be handled by clients combining the data with other imagery that have square pixels. 172 | 173 | [[optimized_geotiff-requirements-class]] 174 | === Requirement Class Optimized GeoTIFF 175 | 176 | include::requirements/requirements_optimized_geotiff.adoc[] 177 | 178 | In the <> requirement class, there is no guidance on how many reduced resolution subfiles a given COG should have. In a TIFF file with a big image, a COG with zero or one overview, can be rendered on a web client but it could be too slow to process and show in a client app. This requirement class provides more restrictions on how the COG should be build to accelerate visualization in web clients. It also adds the need for GeoTIFF as a dependency to <>. The implementation of this conformance class and its dependencies generates what has been commonly called COG. 179 | 180 | ==== Requirement Small Tiles 181 | 182 | For optimized visualization, tiles should be small in their number of pixels, ideally a number smaller than the common number of pixels of a screen view port. 183 | 184 | include::requirements/optimized_geotiff/small_tiles.adoc[] 185 | 186 | ==== Requirement Reduced-Resolution Subfiles Number 187 | 188 | The number of reduced resolution subfiles is defined as a function of the number of pixels of the original image by creating progressive reduced resolution subfiles with less tiles until the number of tiles very small. 189 | 190 | include::requirements/optimized_geotiff/number.adoc[] 191 | 192 | It is a common practice for visualization purposes that pixel sizes are generated as a power of 2. By selecting the number columns and rows of the original image also as a power of 2, each reduced resolution subfile can be generated from the previous smaller resolution by averaging the values of 4 contiguous pixels in one of the new subfile. 193 | 194 | include::recommendations/optimized_geotiff/size_and_number.adoc[] 195 | 196 | ==== Requirement GeoTIFF 197 | 198 | The geospatial reference is necessary for optimized visualization with other geospatial data. 199 | 200 | include::requirements/optimized_geotiff/geotiff.adoc[] 201 | -------------------------------------------------------------------------------- /standard/clause_8_http_range_text.adoc: -------------------------------------------------------------------------------- 1 | [[HTTPRangeSupportRequirements]] 2 | == HTTP range support requirements 3 | HTTP Version 1.1 introduced a range header in the GET requests that supports requesting only a fragment of a resource. 4 | If the server advertises "Accept-Ranges: bytes" in its response headers of a HEAD or GET request, the server is telling the client that bytes of data can be requested in parts, in separated requests. 5 | The client can request just the bytes that it needs from the server at any time. In a web environment, this is very useful for serving files such as video. By using range requests, clients do not need to download the entire file to begin playing it. 6 | In the case of COG, HTTP range is useful to get only the tiles needed to be processed or shown. This is done by getting the headers and IFDs of the TIFF file first and using this information to determine the conversion between tile indices to byte ranges containing the needed tiles. 7 | A client trying to show a COG file on the screen can request the resolutions needed and only the tiles needed to cover the screen. Once the user moves or pans, other GET range requests will get the new needed resolutions and tiles. 8 | 9 | [[http-range-requirements-class]] 10 | === Requirement Class HTTP range 11 | 12 | include::requirements/requirements_httprange.adoc[] 13 | 14 | ==== Requirement range 15 | 16 | include::requirements/httprange/httprange.adoc[] 17 | 18 | The use of range in web browsers using HTTPS is restricted by the Cross-Origin Resource Sharing (CORS) rules (read more about this here: https://support.streamroot.io/hc/en-us/articles/115003168773-Range-request-basics). If the client and the server are in different domains (e.g., by using a generic COG-enabled web map client requesting COG files in a Amazon Cloud bucket) servers have to explicitly declare 19 | that they allow the "range" header from a client that is not in the same domain. 20 | Since this is a very common use case in geospatial data sharing 21 | the decision was to make this a requirement. 22 | 23 | include::requirements/httprange/httpsrange.adoc[] 24 | 25 | NOTE: Support for range in HTTPS is necessary but not sufficient. It is not the purpose of this standard to specify how CORS is supported and that may change as web browsers and servers become more concerned about security. 26 | However, it is worth notice that a server that wants to authorize a client application from another domain 27 | (under the CORS rules) should also use the `Access-Control-Allow-Origin:` header 28 | to list what domains are authorized to read the COG file 29 | (or use `* to indicate that all domains are authorized). 30 | Services that want to comply about the open data sharing principles should be willing to allow all clients reading the data even if they are in other domains. 31 | However, this is up to the server implementers. 32 | -------------------------------------------------------------------------------- /standard/clause_9_media_types.adoc: -------------------------------------------------------------------------------- 1 | == Media Types for any data encoding(s) 2 | A GeoTIFF file is a TIFF file. It is common to use the tiff MIME type, _image/tiff_ according to [RFC3302] (see https://www.iana.org/assignments/media-types/image/tiff). The registration of the MIME type also allows for a _application_ with no format restriction for default value. 3 | 4 | include::recommendations/media_type/media_type.adoc[] 5 | -------------------------------------------------------------------------------- /standard/code/README.md: -------------------------------------------------------------------------------- 1 | Sample code may be stored in this folder, organized as you see fit 2 | -------------------------------------------------------------------------------- /standard/figures/README.md: -------------------------------------------------------------------------------- 1 | Figures go here. 2 | 3 | Each figure is a separate file with the naming convention: 4 | 5 | "FIGn.xxx" where "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. -------------------------------------------------------------------------------- /standard/images/README.md: -------------------------------------------------------------------------------- 1 | Image files for graphics go here. Image files for figures go in the "figures" directory. Only place in here images not used in figures (e.g., as parts of tables, as logos, etc.) 2 | 3 | Each graphic is a separate file with the naming convention: 4 | 5 | "GRPn.xxx" where "n" is a sequential number with leading zeroes appropriate for the total number of graphics and "xxx" is the appropriate extension for the file type. 6 | -------------------------------------------------------------------------------- /standard/recommendations/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "REQn.adoc" where "n" corresponds to the requirement number. Numbers should have preceding zeros appropriate for the total number of requirements in the project (e.g., the first requirement could be REQ001 if less than 1000 requirements are anticipated). 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | NOTE: for each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 12 | 13 | NOTE: sample code may reference one or more requirements and should state which requirements are included in the code by adding the following line to the Extended Description: 14 | 15 | "#REQS: reqnum1,reqnum2,...reqnumn" 16 | -------------------------------------------------------------------------------- /standard/recommendations/geotiff_format/basic_format.adoc: -------------------------------------------------------------------------------- 1 | [%unnumbered] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Recommendation {counter:rec-id}* {set:cellbgcolor:#CACCCE}|/rec/geotiff-format/use-geotiff 5 | | A {set:cellbgcolor:#EEEEEE} | If the resulting COG file is smaller than 4 GByte a COG file SHOULD follow the TIFF version 6.0 standard {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/recommendations/geotiff_format/recommendation_compression.adoc: -------------------------------------------------------------------------------- 1 | [%unnumbered] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Recommendation {counter:rec-id}* {set:cellbgcolor:#CACCCE}|/rec/geotiff-format/rec-compression 5 | | A {set:cellbgcolor:#EEEEEE}| In a COG file, tiled data should be compressed efficiently using the original compression algorithm indicated in TIFF v6 (LZW or JPEG) or a more modern image compression algorithm. Be aware that certain compressions may not be supported by specific TIFF readers.{set:cellbgcolor:#FFFFFF}. 6 | |=== 7 | 8 | NOTE: While LZW and JPEG are the two image compressions mentioned in TIFF v6, there are many other image-based compressions that have become popular since the TIFF v6 original release in 1992. Other possible compressions are: ZSTD, DEFLATE, WEBP, LERC, LERC_ZSTD, etc. In particular, modern lossless compressions are better than the initially proposed LZW. New compressions are constantly being released so this recommendation cannot limit compression to a fixed list. See https://www.awaresystems.be/imaging/tiff/tifftags/compression.html for more details. 9 | -------------------------------------------------------------------------------- /standard/recommendations/geotiff_overviews/ifd_order.adoc: -------------------------------------------------------------------------------- 1 | [%unnumbered] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Recommendation {counter:rec-id}* {set:cellbgcolor:#CACCCE}|/rec/geotiff-overviews/ifd-order 5 | | A {set:cellbgcolor:#EEEEEE}| In a COG file, and after the TIFF/BigTIFF header/signature and pointer to first IFD (and an eventual _ghost area_) sections SHOULD follow the following order: 6 | 7 | 1. IFD of the full resolution image, followed by TIFF tags values, excluding the TileOffsets and TileByteCounts arrays 8 | 9 | 2. IFD of the mask of the full resolution image, if present, followed by TIFF tags values, excluding the TileOffsets and TileByteCounts arrays 10 | 11 | 3. IFD of the first (largest in dimensions) Reduced-Resolution Subfile, if present 12 | 13 | 4. ...(there may be several sections for IFD of intermediate dimensions) 14 | 15 | 5. IFD of the last (smallest) Reduced-Resolution Subfile, if present 16 | 17 | 6. IFD of the first (largest in dimensions) Reduced-Resolution Subfile of the mask, if present 18 | 19 | 7. ...(there may be several sections or IFD of intermediate dimensions for the mask) 20 | 21 | 8. IFD of the last (smallest) Reduced-Resolution Subfile of the mask, if present TileOffsets and TileByteCounts arrays of the above IFDs 22 | 23 | 9. tile data of the smallest Reduced-Resolution Subfile, if present (with each tile followed by the corresponding tile of mask data, if present), with leader and trailer bytes 24 | 25 | 10. ...(there may be several tile data sections of intermediate resolutions) 26 | 27 | 11. tile data of the largest Reduced-Resolution Subfile, if present (interleaved with mask data if present) 28 | 29 | 12. tile data of the full resolution image, if present (interleaved with corresponding mask data if present) 30 | |=== 31 | -------------------------------------------------------------------------------- /standard/recommendations/media_type/media_type.adoc: -------------------------------------------------------------------------------- 1 | [%unnumbered] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Recommendation {counter:rec-id}* {set:cellbgcolor:#CACCCE}|/rec/media-type/media-type 5 | | A {set:cellbgcolor:#EEEEEE}| When required, a COG file should use the MIME type _image/tiff_ with the application parameter value _geotiff_ and the _profile_ parameters value _cloud-optimized_, therefore as follows: 6 | 7 | image/tiff; application=geotiff; profile=cloud-optimized 8 | {set:cellbgcolor:#FFFFFF} 9 | | B {set:cellbgcolor:#EEEEEE}| Alternatively in an HTTP content negotiation a combination of Content-Type and Content-Profile can be used as follows: 10 | 11 | `Content-Type: image/tiff; application=geotiff` + 12 | `Content-Profile: http://www.opengis.net/def/profile/geotiff/cloud-optimized` 13 | 14 | {set:cellbgcolor:#FFFFFF} 15 | |=== 16 | -------------------------------------------------------------------------------- /standard/recommendations/optimized_geotiff/size_and_number.adoc: -------------------------------------------------------------------------------- 1 | [%unnumbered] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Recommendation {counter:rec-id}* {set:cellbgcolor:#CACCCE}|/rec/optimized-geotiff/size-and-numbers 5 | | A {set:cellbgcolor:#EEEEEE}| 6 | A COG file SHOULD define TileWidth and TileLength as a power of two. 7 | | B {set:cellbgcolor:#EEEEEE}| 8 | All tiles in the file SHUOLD have the same TileWidth and TileLength. Recomended values are 256, 512 or 1024 9 | | C {set:cellbgcolor:#EEEEEE}| 10 | The size of a pixel (a.k.a resolution) _r_ of the _n_ reduced resolution subfile SHOULD be generated by this formula: _r~n~=2^n^ r~0~_ (where r~0~ is the size of a pixel of the original image). 11 | |=== 12 | -------------------------------------------------------------------------------- /standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "REQn.adoc" where "n" corresponds to the requirement number. Numbers should have preceding zeros appropriate for the total number of requirements in the project (e.g., the first requirement could be REQ001 if less than 1000 requirements are anticipated). 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | NOTE: for each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 12 | 13 | NOTE: sample code may reference one or more requirements and should state which requirements are included in the code by adding the following line to the Extended Description: 14 | 15 | "#REQS: reqnum1,reqnum2,...reqnumn" 16 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_format/basic_format.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-format-use-geotiff]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-format/use-geotiff 5 | | A {set:cellbgcolor:#EEEEEE} | If the resulting COG file is bigger than 4 GByte, the COG file SHALL follow the BigTIFF standard that modifies the TIFF version 6.0 standard {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_format/tiling.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-format-tiling]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-format/tiling 5 | | A {set:cellbgcolor:#EEEEEE} | All Image File Directories (IFD) in a COG file SHALL be organized into *tiles* (instead of strips) as described in section 15 of the TIFF version 6.0 specification {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_keys/basic_metadata_format.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-keys-basic-metadata-format]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-keys/basic-metadata-format 5 | | A {set:cellbgcolor:#EEEEEE} | A COG file SHALL include and encode geospatial metadata in the GeoTIFF format following the GeoTIFF standard {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_keys/keys_georeference.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-keys-georeference]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-keys/georeference 5 | | A {set:cellbgcolor:#EEEEEE} | In a COG file, the IFD Subfiles of full resolution (a.k.a IFDs whose bit 0 of the value of the NewSubfileType tag is *not* set, or NewSubfileType absent) SHALL contain georeference data using ModelTiepointTag, ModelPixelScaleTag and GeoKeyDirectoryTag tags. {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | 8 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_keys/point-of-origin.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-keys-point-of-origin]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-keys/point-of-origin 5 | | A {set:cellbgcolor:#EEEEEE} | In a COG file all reduced-resolution subfiles SHALL not contain georeference data and use the one in the corresponding full resolution subfile. As a consequence, COG readers SHALL consider that all reduced-resolution subfiles share the same point of origin for the top left corner of the image as the full resolution subfile {set:cellbgcolor:#FFFFFF} 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/requirements/geotiff_overviews/overviews.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-overviews-overviews]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/geotiff-overviews/overviews 5 | | A {set:cellbgcolor:#EEEEEE} | A COG file SHALL have at least one IFD with a NewSubfileType tag whose bit 0 is *not* set, or without a NewSubfileType tag (full-resolution image data). {set:cellbgcolor:#FFFFFF} 6 | | B {set:cellbgcolor:#EEEEEE} | An IFD with a NewSubfileType tag whose bit 0 is *not* set, or without a NewSubfileType tag SHALL have an offset to the next IFD that will point to an IFD with a NewSubfileType tag whose bit 0 is set (reduced-resolution image data) if there is one, or an offset to the next full-resolution image data (e.g., another band or a mask) or an offset 0 if there is no other image. {set:cellbgcolor:#FFFFFF} 7 | | C {set:cellbgcolor:#EEEEEE} | This IFD with a NewSubfileType tag whose bit 0 is set SHALL have an Image Width an Image Height inferior than the previous IFD. {set:cellbgcolor:#FFFFFF} 8 | | D {set:cellbgcolor:#EEEEEE} | If other reduced resolution images are needed, a IFD with a NewSubfileType tag whose bit 0 is set SHALL have an offset to the next IFD that will point to an IFD with a NewSubfileType tag whose bit 0 is set (reduced-resolution image data). {set:cellbgcolor:#FFFFFF} 9 | | E {set:cellbgcolor:#EEEEEE} | This additional IFD with a NewSubfileType tag whose bit 0 is set SHALL have an Image Width an Image Height inferior than the previous IFD. {set:cellbgcolor:#FFFFFF} 10 | | F {set:cellbgcolor:#EEEEEE} | When no additional reduced-resolution image data is available for this image, the IFD SHALL have an offset to the next IFD pointing to the next full-resolution image data (e.g. another band or a mask) or an offset 0 if there is no other image. {set:cellbgcolor:#FFFFFF} 11 | |=== 12 | 13 | NOTE: The wording of this requirement is complex due to the possible presence of several images (e.g. bands or masks) in the file. In essence, it says that for a single image, the full resolution image IFD should be immediately linked to its overview IFDs. If there is more than one image in the file, the last overview IFD of the previous image will linked to the full resolution next image IFD. -------------------------------------------------------------------------------- /standard/requirements/httprange/httprange.adoc: -------------------------------------------------------------------------------- 1 | [[req_http-range-use-range]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/http-range/range 5 | | A {set:cellbgcolor:#EEEEEE} | A HTTP or HTTPS server SHALL support serving TIFF files{set:cellbgcolor:#FFFFFF} 6 | | B {set:cellbgcolor:#EEEEEE} | A HTTP or HTTPS server SHALL support HTTP range {set:cellbgcolor:#FFFFFF} 7 | | C {set:cellbgcolor:#EEEEEE} | A HTTP or HTTPS server shall support _bytes_ ranges. {set:cellbgcolor:#FFFFFF} 8 | |=== 9 | 10 | NOTE: Some web services are only capable to serve TIFF files if the MIME type (image/tiff) is registered 11 | 12 | NOTE: HTTP servers serving COG files advertise the support to _bytes_ ranges by adding this line in the headers: `Access-Ranges: bytes` of the response 13 | -------------------------------------------------------------------------------- /standard/requirements/httprange/httpsrange.adoc: -------------------------------------------------------------------------------- 1 | [[req_http-range-https-headers]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/http-range/https-headers 5 | | A {set:cellbgcolor:#EEEEEE} | A HTTPS server serving COG files SHALL support Cross-Origin Resource Sharing (CORS). 6 | {set:cellbgcolor:#FFFFFF} 7 | | A {set:cellbgcolor:#EEEEEE} | A HTTPS server serving COG files SHALL advertise that it allows the presence of a header requesting access control for ranges by adding this line in the headers of the response: `Access-Control-Allow-Headers: range` 8 | {set:cellbgcolor:#FFFFFF} 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/requirements/optimized_geotiff/geotiff.adoc: -------------------------------------------------------------------------------- 1 | [[req_optimized-geotiff-geotiff]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/optimized_geotiff/geotiff 5 | | A {set:cellbgcolor:#EEEEEE} | A COG file SHALL describe the georeference of the full resolution images IFDs, using geotiff keys. 6 | |=== 7 | -------------------------------------------------------------------------------- /standard/requirements/optimized_geotiff/number.adoc: -------------------------------------------------------------------------------- 1 | [[req_optimized-geotiff-number]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/optimized_geotiff/number 5 | | A {set:cellbgcolor:#EEEEEE} | A COG file SHALL contain reduced resolution subfiles each one reducing the resolution by a minimum factor of 2 and a maximum factor of 10 from the previous one. 6 | | B {set:cellbgcolor:#EEEEEE} | In a COG file, the last reduced resolution subfile (the one with bigger pixel size) SHALL have TilesAcross or TilesDown equal to one. 7 | |=== 8 | 9 | 10 | -------------------------------------------------------------------------------- /standard/requirements/optimized_geotiff/small_tiles.adoc: -------------------------------------------------------------------------------- 1 | [[req_optimized-geotiff-small-size]] 2 | [width="90%",cols="2,6"] 3 | |=== 4 | |*Requirement {counter:req-id}* {set:cellbgcolor:#CACCCE}|/req/optimized_geotiff/small-sizes 5 | | A {set:cellbgcolor:#EEEEEE} | A COG file SHALL have square tiles (TileWidth=TileLength) 6 | | B {set:cellbgcolor:#EEEEEE} | A COG file SHALL define TileWidth and TileLength as a number smaller than or equal to the common screen viewport. 7 | |=== 8 | 9 | NOTE: While years ago 256x256 was a recommended size, today common sizes are 512x512 or 1024x1024. 10 | -------------------------------------------------------------------------------- /standard/requirements/requirements_geotiff_format.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-format]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* {set:cellbgcolor:#CACCCE} 5 | 2+|http://www.opengis.net/spec/COG/1.0/req/geotiff-format {set:cellbgcolor:#FFFFFF} 6 | |Target type |TIFF Encoder 7 | |Dependency |https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf 8 | |Dependency |http://bigtiff.org/ | 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/requirements/requirements_geotiff_keys.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-keys]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* {set:cellbgcolor:#CACCCE} 5 | 2+|http://www.opengis.net/spec/COG/1.0/req/geotiff-keys {set:cellbgcolor:#FFFFFF} 6 | |Target type |GeoTIFF Encoder 7 | |Dependency |http://www.opengis.net/spec/GeoTIFF/1.1/req/Core 8 | |Dependency |http://www.opengis.net/spec/COG/1.0/req/geotiff-format 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/requirements/requirements_geotiff_overviews.adoc: -------------------------------------------------------------------------------- 1 | [[req_geotiff-overviews]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* {set:cellbgcolor:#CACCCE} 5 | 2+|http://www.opengis.net/spec/COG/1.0/req/geotiff-overviews {set:cellbgcolor:#FFFFFF} 6 | |Target type |TIFF encoder 7 | |Dependency |http://www.opengis.net/spec/COG/1.0/req/geotiff-format 8 | |=== 9 | -------------------------------------------------------------------------------- /standard/requirements/requirements_httprange.adoc: -------------------------------------------------------------------------------- 1 | [[req_http-range]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* {set:cellbgcolor:#CACCCE} 5 | 2+|http://www.opengis.net/spec/COG/1.0/req/http-range {set:cellbgcolor:#FFFFFF} 6 | |Target type |Web server 7 | |Dependency |https://www.rfc-editor.org/rfc/rfc9110#name-range-requests 8 | |Dependency |http://www.opengis.net/spec/COG/1.0/req/geotiff-format 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/requirements/requirements_optimized_geotiff.adoc: -------------------------------------------------------------------------------- 1 | [[req_optimized_geotiff]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* {set:cellbgcolor:#CACCCE} 5 | 2+|http://www.opengis.net/spec/COG/1.0/req/optimized_geotiff {set:cellbgcolor:#FFFFFF} 6 | |Target type |TIFF encoder 7 | |Dependency |http://www.opengis.net/spec/COG/1.0/req/geotiff-overviews 8 | |Dependency |http://www.opengis.net/spec/COG/1.0/req/geotiff-keys 9 | |=== 10 | -------------------------------------------------------------------------------- /standard/resources/bibtex-file.bib: -------------------------------------------------------------------------------- 1 | @article{VanZyl2009, 2 | abstract = {Global Earth Observing System of Systems (GEOSS) presents a great challenge of System of Systems integration across organisational and political boundaries. One existing paradigm that can address the scale of the challenge is that of the Sensor Web. In this paradigm, the internet is evolving into an active, macro sensing instrument, capable of drawing sensory data from around the globe to the fingertips of individuals. The Sensor Web will support scientific research and facilitate transparent political decision making. This article presents some of the technologies explored and activities engaged in by the GEOSS Sensor Web community, towards achieving GEOSS goals. Keywords:}, 3 | author = {van Zyl, Terence and Simonis, Ingo and McFerren, Graeme}, 4 | doi = {10.1080/17538940802439549}, 5 | file = {:Users/isi/Library/Application Support/Mendeley Desktop/Downloaded/van Zyl, Simonis, McFerren - 2009 - The Sensor Web systems of sensor systems.pdf:pdf}, 6 | isbn = {1753894080243}, 7 | issn = {1753-8947}, 8 | journal = {International Journal of Digital Earth}, 9 | keywords = {Sensor Web,data acquisition,digital earth architecture,earth observation,systems of systems}, 10 | month = {mar}, 11 | number = {1}, 12 | pages = {16--30}, 13 | publisher = {Taylor {\&} Francis}, 14 | title = {{The Sensor Web: Systems of Sensor Systems}}, 15 | url = {http://www.tandfonline.com/doi/abs/10.1080/17538940802439549}, 16 | volume = {2}, 17 | year = {2009} 18 | } 19 | -------------------------------------------------------------------------------- /standard/resources/fonts/Palatino-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/Palatino-Bold.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/Palatino-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/Palatino-BoldItalic.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/Palatino-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/Palatino-Italic.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/Palatino-Roman.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/Palatino-Roman.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/SourceSansPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/SourceSansPro-Bold.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/SourceSansPro-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/SourceSansPro-BoldItalic.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/SourceSansPro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/SourceSansPro-Italic.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/SourceSansPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/SourceSansPro-Regular.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/mplus1mn-bold-ascii.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/mplus1mn-bold-ascii.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/mplus1mn-bold_italic-ascii.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/mplus1mn-bold_italic-ascii.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/mplus1mn-italic-ascii.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/mplus1mn-italic-ascii.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/mplus1mn-regular-ascii-conums.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/mplus1mn-regular-ascii-conums.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/mplus1p-regular-fallback.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/mplus1p-regular-fallback.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/notoserif-bold-subset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/notoserif-bold-subset.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/notoserif-bold_italic-subset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/notoserif-bold_italic-subset.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/notoserif-italic-subset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/notoserif-italic-subset.ttf -------------------------------------------------------------------------------- /standard/resources/fonts/notoserif-regular-subset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/CloudOptimizedGeoTIFF/d4f5f0fa92d4c1fabb9a802b2e7f5b1adec1004a/standard/resources/fonts/notoserif-regular-subset.ttf -------------------------------------------------------------------------------- /standard/resources/lncs.csl: -------------------------------------------------------------------------------- 1 | 2 | 148 | -------------------------------------------------------------------------------- /standard/resources/ogc-theme.yml: -------------------------------------------------------------------------------- 1 | font: 2 | catalog: 3 | # Ingo: font-family: 'Source Sans Pro', sans-serif; 4 | Source Sans Pro: 5 | normal: SourceSansPro-Regular.ttf 6 | bold: SourceSansPro-Bold.ttf 7 | italic: SourceSansPro-Italic.ttf 8 | bold_italic: SourceSansPro-BoldItalic.ttf 9 | # Ingo: Palatino 10 | Palatino: 11 | normal: Palatino-Roman.ttf 12 | bold: Palatino-Bold.ttf 13 | italic: Palatino-Italic.ttf 14 | bold_italic: Palatino-BoldItalic.ttf 15 | # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols 16 | Noto Serif: 17 | normal: notoserif-regular-subset.ttf 18 | bold: notoserif-bold-subset.ttf 19 | italic: notoserif-italic-subset.ttf 20 | bold_italic: notoserif-bold_italic-subset.ttf 21 | # M+ 1mn supports ASCII and the circled numbers used for conums 22 | M+ 1mn: 23 | normal: mplus1mn-regular-ascii-conums.ttf 24 | bold: mplus1mn-bold-ascii.ttf 25 | italic: mplus1mn-italic-ascii.ttf 26 | bold_italic: mplus1mn-bold_italic-ascii.ttf 27 | # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols 28 | # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font 29 | M+ 1p Fallback: 30 | normal: mplus1p-regular-fallback.ttf 31 | bold: mplus1p-regular-fallback.ttf 32 | italic: mplus1p-regular-fallback.ttf 33 | bold_italic: mplus1p-regular-fallback.ttf 34 | fallbacks: 35 | - M+ 1p Fallback 36 | page: 37 | background_color: ffffff 38 | layout: portrait 39 | #ingo: margins: botton, right, upper, left 40 | margin: [0.5in, 0.75in, 0.67in, 0.75in] 41 | # margin_inner and margin_outer keys are used for recto/verso print margins when media=press 42 | margin_inner: 0.75in 43 | margin_outer: 0.59in 44 | size: A4 45 | base: 46 | align: justify 47 | # color as hex string (leading # is optional) 48 | font_color: 000000 49 | # color as RGB array 50 | #font_color: [51, 51, 51] 51 | # color as CMYK array (approximated) 52 | #font_color: [0, 0, 0, 0.92] 53 | #font_color: [0, 0, 0, 92%] 54 | font_family: Source Sans Pro #ingo: Palatino #ingo: Noto Serif 55 | # choose one of these font_size/line_height_length combinations 56 | font_size: 12 57 | line_height_length: 16 58 | #font_size: 11.25 59 | #line_height_length: 18 60 | #font_size: 11.2 61 | #line_height_length: 16 62 | #ingo orig: font_size: 10.5 63 | #line_height_length: 15 64 | # correct line height for Noto Serif metrics 65 | #ingo orig: line_height_length: 12 66 | #font_size: 11.25 67 | #line_height_length: 18 68 | line_height: $base_line_height_length / $base_font_size 69 | font_size_large: round($base_font_size * 1.25) 70 | font_size_small: round($base_font_size * 0.85) 71 | font_size_min: $base_font_size * 0.75 72 | font_style: normal 73 | border_color: 8c8c8c 74 | border_radius: 4 75 | border_width: 0.75 76 | # FIXME vertical_rhythm is weird; we should think in terms of ems 77 | #vertical_rhythm: $base_line_height_length * 2 / 3 78 | # correct line height for Noto Serif metrics (comes with built-in line height) 79 | vertical_rhythm: $base_line_height_length 80 | horizontal_rhythm: $base_line_height_length 81 | # QUESTION should vertical_spacing be block_spacing instead? 82 | vertical_spacing: $vertical_rhythm 83 | link: 84 | font_color: b02442 #ingo: 428bca 85 | # literal is currently used for inline monospaced in prose and table cells 86 | literal: 87 | font_color: b12146 88 | font_family: M+ 1mn 89 | menu_caret_content: " \u203a " 90 | heading: 91 | align: left 92 | #font_color: 181818 93 | font_color: $base_font_color 94 | font_family: $base_font_family 95 | font_style: bold 96 | # h1 is used for part titles (book doctype only) 97 | h1_font_size: floor($base_font_size * 2.6) 98 | # h2 is used for chapter titles (book doctype only) 99 | h2_font_size: floor($base_font_size * 2.15) 100 | h3_font_size: round($base_font_size * 1.7) 101 | h4_font_size: $base_font_size_large 102 | h5_font_size: $base_font_size 103 | h6_font_size: $base_font_size_small 104 | #line_height: 1.4 105 | # correct line height for Noto Serif metrics (comes with built-in line height) 106 | line_height: 1 107 | margin_top: $vertical_rhythm * 0.4 108 | margin_bottom: $vertical_rhythm * 0.9 109 | title_page: 110 | align: right 111 | logo: 112 | top: 10% 113 | title: 114 | top: 55% 115 | font_size: $heading_h1_font_size 116 | font_color: 999999 117 | line_height: 0.9 118 | subtitle: 119 | font_size: $heading_h3_font_size 120 | font_style: bold_italic 121 | line_height: 1 122 | authors: 123 | margin_top: $base_font_size * 1.25 124 | font_size: $base_font_size_large 125 | font_color: 181818 126 | revision: 127 | margin_top: $base_font_size * 1.25 128 | block: 129 | margin_top: 0 130 | margin_bottom: $vertical_rhythm 131 | caption: 132 | align: center 133 | font_size: $base_font_size * 0.95 134 | font_style: italic 135 | # FIXME perhaps set line_height instead of / in addition to margins? 136 | margin_inside: $vertical_rhythm / 3 137 | #margin_inside: $vertical_rhythm / 4 138 | margin_outside: 0 139 | lead: # ingo: relevant for abbreviations and corrigenda 140 | #ingo: orig: font_size: $base_font_size_large 141 | #ingo: orig: line_height: 1.4 142 | font_size: $base_font_size 143 | abstract: 144 | font_color: 5c6266 145 | font_size: $lead_font_size 146 | line_height: $lead_line_height 147 | font_style: italic 148 | first_line_font_style: bold 149 | title: 150 | align: center 151 | font_color: $heading_font_color 152 | font_family: $heading_font_family 153 | font_size: $heading_h1_font_size 154 | font_style: $heading_font_style 155 | admonition: 156 | column_rule_color: $base_border_color 157 | column_rule_width: $base_border_width 158 | padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm] 159 | #icon: 160 | # tip: 161 | # name: fa-lightbulb-o 162 | # stroke_color: 111111 163 | # size: 24 164 | label: 165 | text_transform: uppercase 166 | font_style: bold 167 | blockquote: 168 | font_color: $base_font_color 169 | font_size: $base_font_size_large 170 | border_color: $base_border_color 171 | border_width: 5 172 | # FIXME disable negative padding bottom once margin collapsing is implemented 173 | padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_width / 2] 174 | cite_font_size: $base_font_size_small 175 | cite_font_color: 999999 176 | # code is used for source blocks (perhaps change to source or listing?) 177 | code: 178 | font_color: $base_font_color 179 | font_family: $literal_font_family 180 | font_size: ceil($base_font_size) 181 | padding: $code_font_size 182 | line_height: 1.25 183 | # line_gap is an experimental property to control how a background color is applied to an inline block element 184 | line_gap: 3.8 185 | background_color: f5f5f5 186 | border_color: cccccc 187 | border_radius: $base_border_radius 188 | border_width: 0.75 189 | conum: 190 | font_family: M+ 1mn 191 | font_color: $literal_font_color 192 | font_size: $base_font_size 193 | line_height: 4 / 3 194 | example: 195 | border_color: $base_border_color 196 | border_radius: $base_border_radius 197 | border_width: 0.75 198 | background_color: ffffff 199 | # FIXME reenable padding bottom once margin collapsing is implemented 200 | padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm] 201 | image: 202 | align: left 203 | prose: 204 | margin_top: $block_margin_top 205 | margin_bottom: $block_margin_bottom 206 | sidebar: 207 | border_color: $page_background_color 208 | border_radius: $base_border_radius 209 | border_width: $base_border_width 210 | background_color: eeeeee 211 | # FIXME reenable padding bottom once margin collapsing is implemented 212 | padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25] 213 | title: 214 | align: center 215 | font_color: $heading_font_color 216 | font_family: $heading_font_family 217 | font_size: $heading_h4_font_size 218 | font_style: $heading_font_style 219 | thematic_break: 220 | border_color: $base_border_color 221 | border_style: solid 222 | border_width: $base_border_width 223 | margin_top: $vertical_rhythm * 0.5 224 | margin_bottom: $vertical_rhythm * 1.5 225 | description_list: 226 | term_font_style: italic 227 | term_spacing: $vertical_rhythm / 4 228 | description_indent: $horizontal_rhythm * 1.25 229 | outline_list: 230 | indent: $horizontal_rhythm * 1.5 231 | #marker_font_color: 404040 232 | # NOTE outline_list_item_spacing applies to list items that do not have complex content 233 | item_spacing: $vertical_rhythm / 2 234 | table: 235 | background_color: $page_background_color 236 | head_background_color: c1c1c1 237 | #head_font_color: $base_font_color 238 | head_font_style: bold 239 | even_row_background_color: f9f9f9 240 | odd_row_background_color: e6e6e6 241 | foot_background_color: f0f0f0 242 | border_color: dddddd 243 | border_width: $base_border_width 244 | cell_padding: 3 245 | caption_side: bottom 246 | toc: 247 | indent: $horizontal_rhythm 248 | line_height: 1.4 249 | dot_leader: 250 | #content: ". " 251 | font_color: a9a9a9 252 | #levels: 2 3 253 | toc_h1: 254 | font_style: bold 255 | toc_h2: 256 | font_style: bold 257 | # NOTE in addition to footer, header is also supported 258 | footer: 259 | font_size: $base_font_size_small 260 | # NOTE if background_color is set, background and border will span width of page 261 | border_color: dddddd 262 | border_width: 0.25 263 | height: $base_line_height_length * 2.5 264 | line_height: 1 265 | padding: [$base_line_height_length / 2, 1, 0, 1] 266 | vertical_align: top 267 | # ingo all marked out 268 | #image_vertical_align: or 269 | # additional attributes for content: 270 | # * {page-count} 271 | # * {page-number} 272 | # * {document-title} 273 | # * {document-subtitle} 274 | # * {chapter-title} 275 | # * {section-title} 276 | # * {section-or-chapter-title} 277 | recto: 278 | #columns: "<50% =0% >50%" 279 | right: 280 | content: '{page-number}' 281 | #content: '{section-or-chapter-title} | {page-number}' 282 | #content: '{document-title} | {page-number}' 283 | #center: 284 | # content: '{page-number}' 285 | verso: 286 | #columns: $footer_recto_columns 287 | left: 288 | content: $footer_recto_right_content 289 | #content: '{page-number} | {chapter-title}' 290 | #center: 291 | # content: '{page-number}' 292 | #ingo new header 293 | #header: 294 | # height: 0.75in 295 | # line_height: 1 296 | # recto: 297 | # center: 298 | # content: '(C) ACME -- v{revnumber}, {docdate}' 299 | # verso: 300 | # center: 301 | # content: $header_recto_center_content 302 | -------------------------------------------------------------------------------- /standard/resources/stylesheets/coderay-asciidoctor.css: -------------------------------------------------------------------------------- 1 | /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */ 2 | pre.CodeRay{background:#f7f7f8} 3 | .CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0} 4 | .CodeRay span.line-numbers{display:inline-block;margin-right:.75em} 5 | .CodeRay .line-numbers strong{color:#000} 6 | table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none} 7 | table.CodeRay td{vertical-align:top;line-height:inherit} 8 | table.CodeRay td.line-numbers{text-align:right} 9 | table.CodeRay td.code{padding:0 0 0 .75em} 10 | .CodeRay .debug{color:#fff !important;background:#000080 !important} 11 | .CodeRay .annotation{color:#007} 12 | .CodeRay .attribute-name{color:#000080} 13 | .CodeRay .attribute-value{color:#700} 14 | .CodeRay .binary{color:#509} 15 | .CodeRay .comment{color:#998;font-style:italic} 16 | .CodeRay .char{color:#04d} 17 | .CodeRay .char .content{color:#04d} 18 | .CodeRay .char .delimiter{color:#039} 19 | .CodeRay .class{color:#458;font-weight:bold} 20 | .CodeRay .complex{color:#a08} 21 | .CodeRay .constant,.CodeRay .predefined-constant{color:#008080} 22 | .CodeRay .color{color:#099} 23 | .CodeRay .class-variable{color:#369} 24 | .CodeRay .decorator{color:#b0b} 25 | .CodeRay .definition{color:#099} 26 | .CodeRay .delimiter{color:#000} 27 | .CodeRay .doc{color:#970} 28 | .CodeRay .doctype{color:#34b} 29 | .CodeRay .doc-string{color:#d42} 30 | .CodeRay .escape{color:#666} 31 | .CodeRay .entity{color:#800} 32 | .CodeRay .error{color:#808} 33 | .CodeRay .exception{color:inherit} 34 | .CodeRay .filename{color:#099} 35 | .CodeRay .function{color:#900;font-weight:bold} 36 | .CodeRay .global-variable{color:#008080} 37 | .CodeRay .hex{color:#058} 38 | .CodeRay .integer,.CodeRay .float{color:#099} 39 | .CodeRay .include{color:#555} 40 | .CodeRay .inline{color:#000} 41 | .CodeRay .inline .inline{background:#ccc} 42 | .CodeRay .inline .inline .inline{background:#bbb} 43 | .CodeRay .inline .inline-delimiter{color:#d14} 44 | .CodeRay .inline-delimiter{color:#d14} 45 | .CodeRay .important{color:#555;font-weight:bold} 46 | .CodeRay .interpreted{color:#b2b} 47 | .CodeRay .instance-variable{color:#008080} 48 | .CodeRay .label{color:#970} 49 | .CodeRay .local-variable{color:#963} 50 | .CodeRay .octal{color:#40e} 51 | .CodeRay .predefined{color:#369} 52 | .CodeRay .preprocessor{color:#579} 53 | .CodeRay .pseudo-class{color:#555} 54 | .CodeRay .directive{font-weight:bold} 55 | .CodeRay .type{font-weight:bold} 56 | .CodeRay .predefined-type{color:inherit} 57 | .CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold} 58 | .CodeRay .key{color:#808} 59 | .CodeRay .key .delimiter{color:#606} 60 | .CodeRay .key .char{color:#80f} 61 | .CodeRay .value{color:#088} 62 | .CodeRay .regexp .delimiter{color:#808} 63 | .CodeRay .regexp .content{color:#808} 64 | .CodeRay .regexp .modifier{color:#808} 65 | .CodeRay .regexp .char{color:#d14} 66 | .CodeRay .regexp .function{color:#404;font-weight:bold} 67 | .CodeRay .string{color:#d20} 68 | .CodeRay .string .string .string{background:#ffd0d0} 69 | .CodeRay .string .content{color:#d14} 70 | .CodeRay .string .char{color:#d14} 71 | .CodeRay .string .delimiter{color:#d14} 72 | .CodeRay .shell{color:#d14} 73 | .CodeRay .shell .delimiter{color:#d14} 74 | .CodeRay .symbol{color:#990073} 75 | .CodeRay .symbol .content{color:#a60} 76 | .CodeRay .symbol .delimiter{color:#630} 77 | .CodeRay .tag{color:#008080} 78 | .CodeRay .tag-special{color:#d70} 79 | .CodeRay .variable{color:#036} 80 | .CodeRay .insert{background:#afa} 81 | .CodeRay .delete{background:#faa} 82 | .CodeRay .change{color:#aaf;background:#007} 83 | .CodeRay .head{color:#f8f;background:#505} 84 | .CodeRay .insert .insert{color:#080} 85 | .CodeRay .delete .delete{color:#800} 86 | .CodeRay .change .change{color:#66f} 87 | .CodeRay .head .head{color:#f4f} -------------------------------------------------------------------------------- /standard/resources/stylesheets/ogc.css: -------------------------------------------------------------------------------- 1 | @import url(http://openshift.redhat.com/app/assets-20130701203230/overpass.css); 2 | @import url(http://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.0/css/font-awesome.css); 3 | /* normalize.css v2.1.1 | MIT License | git.io/normalize */ 4 | /* ========================================================================== HTML5 display definitions ========================================================================== */ 5 | /** Correct `block` display not defined in IE 8/9. */ 6 | article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } 7 | 8 | /** Correct `inline-block` display not defined in IE 8/9. */ 9 | audio, canvas, video { display: inline-block; } 10 | 11 | /** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ 12 | audio:not([controls]) { display: none; height: 0; } 13 | 14 | /** Address styling not present in IE 8/9. */ 15 | [hidden] { display: none; } 16 | 17 | /* ========================================================================== Base ========================================================================== */ 18 | /** 1. Prevent system color scheme's background color being used in Firefox, IE, and Opera. 2. Prevent system color scheme's text color being used in Firefox, IE, and Opera. 3. Set default font family to sans-serif. 4. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ 19 | html { background: #fff; /* 1 */ color: #000; /* 2 */ font-family: sans-serif; /* 3 */ -ms-text-size-adjust: 100%; /* 4 */ -webkit-text-size-adjust: 100%; /* 4 */ } 20 | 21 | /** Remove default margin. */ 22 | body { margin: 0; } 23 | 24 | /* ========================================================================== Links ========================================================================== */ 25 | /** Address `outline` inconsistency between Chrome and other browsers. */ 26 | a:focus { outline: thin dotted; } 27 | 28 | /** Improve readability when focused and also mouse hovered in all browsers. */ 29 | a:active, a:hover { outline: 0; } 30 | 31 | /* ========================================================================== Typography ========================================================================== */ 32 | /** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ 33 | h1 { font-size: 2em; margin: 0.67em 0; } 34 | 35 | /** Address styling not present in IE 8/9, Safari 5, and Chrome. */ 36 | abbr[title] { border-bottom: 1px dotted; } 37 | 38 | /** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ 39 | b, strong { font-weight: bold; } 40 | 41 | /** Address styling not present in Safari 5 and Chrome. */ 42 | dfn { font-style: italic; } 43 | 44 | /** Address differences between Firefox and other browsers. */ 45 | hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } 46 | 47 | /** Address styling not present in IE 8/9. */ 48 | mark { background: #ff0; color: #000; } 49 | 50 | /** Correct font family set oddly in Safari 5 and Chrome. */ 51 | code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } 52 | 53 | /** Improve readability of pre-formatted text in all browsers. */ 54 | pre { white-space: pre-wrap; } 55 | 56 | /** Set consistent quote types. */ 57 | q { quotes: "\201C" "\201D" "\2018" "\2019"; } 58 | 59 | /** Address inconsistent and variable font size in all browsers. */ 60 | small { font-size: 80%; } 61 | 62 | /** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ 63 | sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } 64 | 65 | sup { top: -0.5em; } 66 | 67 | sub { bottom: -0.25em; } 68 | 69 | /* ========================================================================== Embedded content ========================================================================== */ 70 | /** Remove border when inside `a` element in IE 8/9. */ 71 | img { border: 0; } 72 | 73 | /** Correct overflow displayed oddly in IE 9. */ 74 | svg:not(:root) { overflow: hidden; } 75 | 76 | /* ========================================================================== Figures ========================================================================== */ 77 | /** Address margin not present in IE 8/9 and Safari 5. */ 78 | figure { margin: 0; } 79 | 80 | /* ========================================================================== Forms ========================================================================== */ 81 | /** Define consistent border, margin, and padding. */ 82 | fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } 83 | 84 | /** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ 85 | legend { border: 0; /* 1 */ padding: 0; /* 2 */ } 86 | 87 | /** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ 88 | button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } 89 | 90 | /** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ 91 | button, input { line-height: normal; } 92 | 93 | /** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ 94 | button, select { text-transform: none; } 95 | 96 | /** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ 97 | button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } 98 | 99 | /** Re-set default cursor for disabled elements. */ 100 | button[disabled], html input[disabled] { cursor: default; } 101 | 102 | /** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ 103 | input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } 104 | 105 | /** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ 106 | input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } 107 | 108 | /** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ 109 | input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } 110 | 111 | /** Remove inner padding and border in Firefox 4+. */ 112 | button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } 113 | 114 | /** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ 115 | textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } 116 | 117 | /* ========================================================================== Tables ========================================================================== */ 118 | /** Remove most spacing between table cells. */ 119 | table { border-collapse: collapse; border-spacing: 0; } 120 | 121 | *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } 122 | 123 | html, body { font-size: 100%; } 124 | 125 | body { background: #e5e5e5; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } 126 | 127 | a:hover { cursor: pointer; } 128 | 129 | a:focus { outline: none; } 130 | 131 | img, object, embed { max-width: 100%; height: auto; } 132 | 133 | object, embed { height: 100%; } 134 | 135 | img { -ms-interpolation-mode: bicubic; } 136 | 137 | #map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } 138 | 139 | .left { float: left !important; } 140 | 141 | .right { float: right !important; } 142 | 143 | .text-left { text-align: left !important; } 144 | 145 | .text-right { text-align: right !important; } 146 | 147 | .text-center { text-align: center !important; } 148 | 149 | .text-justify { text-align: justify !important; } 150 | 151 | .hide { display: none; } 152 | 153 | .antialiased, body { -webkit-font-smoothing: antialiased; } 154 | 155 | img { display: inline-block; vertical-align: middle; } 156 | 157 | textarea { height: auto; min-height: 50px; } 158 | 159 | select { width: 100%; } 160 | 161 | p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.15625em; line-height: 1.6; } 162 | 163 | .subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #4d4d4d; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } 164 | 165 | /* Typography resets */ 166 | div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } 167 | 168 | /* Default Link Styles */ 169 | a { color: #006699; text-decoration: none; line-height: inherit; } 170 | a:hover, a:focus { color: #ea0011; } 171 | a img { border: none; } 172 | 173 | /* Default paragraph styles */ 174 | p { font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; font-weight: normal; font-size: 0.9375em; line-height: 1.4; margin-bottom: 1.375em; text-rendering: optimizeLegibility; } 175 | p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } 176 | 177 | /* Default header styles */ 178 | h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Overpass, "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 1em; margin-bottom: 0.5em; line-height: 1.2125em; } 179 | h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; } 180 | 181 | h1 { font-size: 2.125em; } 182 | 183 | h2 { font-size: 1.6875em; } 184 | 185 | h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } 186 | 187 | h4 { font-size: 1.125em; } 188 | 189 | h5 { font-size: 1.125em; } 190 | 191 | h6 { font-size: 1em; } 192 | 193 | hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } 194 | 195 | /* Helpful Typography Defaults */ 196 | em, i { font-style: italic; line-height: inherit; } 197 | 198 | strong, b { font-weight: bold; line-height: inherit; } 199 | 200 | small { font-size: 60%; line-height: inherit; } 201 | 202 | code { font-family: Menlo, Monaco, "Liberation Mono", Consolas, monospace; font-weight: normal; color: #3b3b3b; } 203 | 204 | /* Lists */ 205 | ul, ol, dl { font-size: 0.9375em; line-height: 1.4; margin-bottom: 1.375em; list-style-position: outside; font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; } 206 | 207 | ul, ol { margin-left: 1.625em; } 208 | 209 | /* Unordered Lists */ 210 | ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } 211 | ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } 212 | ul.square { list-style-type: square; } 213 | ul.circle { list-style-type: circle; } 214 | ul.disc { list-style-type: disc; } 215 | ul.no-bullet { list-style: none; } 216 | 217 | /* Ordered Lists */ 218 | ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } 219 | 220 | /* Definition Lists */ 221 | dl dt { margin-bottom: 0.3em; font-weight: bold; } 222 | dl dd { margin-bottom: 0.75em; } 223 | 224 | /* Abbreviations */ 225 | abbr, acronym { text-transform: uppercase; font-size: 90%; color: #404040; border-bottom: 1px dotted #dddddd; cursor: help; } 226 | 227 | abbr { text-transform: none; } 228 | 229 | /* Blockquotes */ 230 | blockquote { margin: 0 0 1.375em; padding: 0 0 0 1em; border-left: 5px solid #ededed; } 231 | blockquote cite { display: block; font-size: 0.8125em; color: #333333; } 232 | blockquote cite:before { content: "\2014 \0020"; } 233 | blockquote cite a, blockquote cite a:visited { color: #333333; } 234 | 235 | blockquote, blockquote p { line-height: 1.4; color: #404040; } 236 | 237 | /* Microformats */ 238 | .vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } 239 | .vcard li { margin: 0; display: block; } 240 | .vcard .fn { font-weight: bold; font-size: 0.9375em; } 241 | 242 | .vevent .summary { font-weight: bold; } 243 | .vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } 244 | 245 | @media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } 246 | h1 { font-size: 2.75em; } 247 | h2 { font-size: 2.3125em; } 248 | h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } 249 | h4 { font-size: 1.4375em; } } 250 | /* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) 251 | */ 252 | .print-only { display: none !important; } 253 | 254 | @media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } 255 | a, a:visited { text-decoration: underline; } 256 | a[href]:after { content: " (" attr(href) ")"; } 257 | abbr[title]:after { content: " (" attr(title) ")"; } 258 | .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } 259 | pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } 260 | thead { display: table-header-group; /* h5bp.com/t */ } 261 | tr, img { page-break-inside: avoid; } 262 | img { max-width: 100% !important; } 263 | @page { margin: 0.5cm; } 264 | p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } 265 | h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } 266 | .hide-on-print { display: none !important; } 267 | .print-only { display: block !important; } 268 | .hide-for-print { display: none !important; } 269 | .show-for-print { display: inherit !important; } } 270 | /* Tables */ 271 | table { background: white; margin-bottom: 1.25em; border: solid 1px #dddddd; } 272 | table thead, table tfoot { background: whitesmoke; font-weight: bold; } 273 | table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222222; text-align: left; } 274 | table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #222222; } 275 | table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; } 276 | table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } 277 | 278 | a:hover, a:focus { text-decoration: underline; } 279 | 280 | .clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } 281 | .clearfix:after, .float-group:after { clear: both; } 282 | 283 | *:not(pre) > code { font-size: 0.9375em; padding: 1px 4px; white-space: nowrap; background-color: #eff1f1; border: 1px solid #d4d9d9; -webkit-border-radius: 0; border-radius: 0; text-shadow: none; } 284 | 285 | pre, pre > code { line-height: 1.6; color: #3b3b3b; font-family: Menlo, Monaco, "Liberation Mono", Consolas, monospace; font-weight: normal; } 286 | 287 | kbd.keyseq { color: #737373; } 288 | 289 | kbd:not(.keyseq) { display: inline-block; color: #404040; font-size: 0.75em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } 290 | 291 | kbd kbd:first-child { margin-left: 0; } 292 | 293 | kbd kbd:last-child { margin-right: 0; } 294 | 295 | .menuseq, .menu { color: #272727; } 296 | 297 | #header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } 298 | #header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } 299 | #header:after, #content:after, #footnotes:after, #footer:after { clear: both; } 300 | 301 | #header { margin-bottom: 2.5em; } 302 | #header > h1 { color: black; font-weight: normal; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; } 303 | #header span { color: #404040; } 304 | #header #revnumber { text-transform: capitalize; } 305 | #header br { display: none; } 306 | #header br + span { padding-left: 3px; } 307 | #header br + span:before { content: "\2013 \0020"; } 308 | #header br + span.author { padding-left: 0; } 309 | #header br + span.author:before { content: ", "; } 310 | 311 | #toc { border-bottom: 0 solid #dddddd; padding-bottom: 1.25em; } 312 | #toc > ul { margin-left: 0.25em; } 313 | #toc ul.sectlevel0 > li > a { font-style: italic; } 314 | #toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } 315 | #toc ul { list-style-type: none; } 316 | 317 | #toctitle { color: #4d4d4d; } 318 | 319 | @media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; } 320 | #toc.toc2 { position: fixed; width: 20em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } 321 | #toc.toc2 #toctitle { margin-top: 0; } 322 | #toc.toc2 > ul { font-size: .95em; } 323 | #toc.toc2 ul ul { margin-left: 0; padding-left: 1.25em; } 324 | #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } 325 | body.toc2.toc-right { padding-left: 0; padding-right: 20em; } 326 | body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } 327 | #content #toc { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; border-width: 0; -webkit-border-radius: 0; border-radius: 0; } 328 | #content #toc > :first-child { margin-top: 0; } 329 | #content #toc > :last-child { margin-bottom: 0; } 330 | #content #toc a { text-decoration: none; } 331 | 332 | #content #toctitle { font-weight: bold; font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; font-size: 1em; padding-left: 0.125em; } 333 | 334 | #footer { max-width: 100%; background-color: white; padding: 1.25em; } 335 | 336 | #footer-text { color: #666666; line-height: 1.26; } 337 | 338 | .sect1 { padding-bottom: 1.25em; } 339 | 340 | .sect1 + .sect1 { border-top: 0 solid #dddddd; } 341 | 342 | #content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } 343 | #content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } 344 | #content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } 345 | #content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; } 346 | #content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; } 347 | 348 | .imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.25em; } 349 | 350 | .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; } 351 | 352 | .tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } 353 | 354 | table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } 355 | 356 | .admonitionblock > table { border: 0; background: none; width: 100%; } 357 | .admonitionblock > table td.icon { text-align: center; width: 80px; } 358 | .admonitionblock > table td.icon img { max-width: none; } 359 | .admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } 360 | .admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #404040; } 361 | .admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } 362 | 363 | .exampleblock > .content { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; -webkit-border-radius: 0; border-radius: 0; } 364 | .exampleblock > .content > :first-child { margin-top: 0; } 365 | .exampleblock > .content > :last-child { margin-bottom: 0; } 366 | .exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } 367 | .exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } 368 | .exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } 369 | 370 | .exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #cccccc; box-shadow: 0 1px 8px #cccccc; } 371 | 372 | .sidebarblock { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; -webkit-border-radius: 0; border-radius: 0; } 373 | .sidebarblock > :first-child { margin-top: 0; } 374 | .sidebarblock > :last-child { margin-bottom: 0; } 375 | .sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } 376 | .sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } 377 | .sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } 378 | .sidebarblock > .content > .title { color: #4d4d4d; margin-top: 0; line-height: 1.4; } 379 | 380 | .exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } 381 | 382 | .literalblock > .content pre, .listingblock > .content pre { background: #eff1f1; border-width: 0 0 0 2px; border-style: solid; border-color: rgba(120, 120, 120, 0.35); -webkit-border-radius: 0; border-radius: 0; padding: 1em 1.5em 0.875em 1.5em; word-wrap: break-word; } 383 | .literalblock > .content pre.nowrap, .listingblock > .content pre.nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } 384 | .literalblock > .content pre > code, .listingblock > .content pre > code { display: block; } 385 | @media only screen { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.7em; } } 386 | @media only screen and (min-width: 768px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.7875em; } } 387 | @media only screen and (min-width: 1280px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.875em; } } 388 | 389 | .listingblock > .content { position: relative; } 390 | 391 | .listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } 392 | 393 | .listingblock:hover code.asciidoc:before { content: "asciidoc"; } 394 | .listingblock:hover code.clojure:before { content: "clojure"; } 395 | .listingblock:hover code.css:before { content: "css"; } 396 | .listingblock:hover code.groovy:before { content: "groovy"; } 397 | .listingblock:hover code.html:before { content: "html"; } 398 | .listingblock:hover code.java:before { content: "java"; } 399 | .listingblock:hover code.javascript:before { content: "javascript"; } 400 | .listingblock:hover code.python:before { content: "python"; } 401 | .listingblock:hover code.ruby:before { content: "ruby"; } 402 | .listingblock:hover code.scss:before { content: "scss"; } 403 | .listingblock:hover code.xml:before { content: "xml"; } 404 | .listingblock:hover code.yaml:before { content: "yaml"; } 405 | 406 | .listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } 407 | 408 | .listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } 409 | 410 | table.pyhltable { border: 0; margin-bottom: 0; } 411 | 412 | table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } 413 | 414 | table.pyhltable td.code { padding-left: .75em; padding-right: 0; } 415 | 416 | .highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } 417 | 418 | .highlight.pygments .lineno { display: inline-block; margin-right: .25em; } 419 | 420 | table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } 421 | 422 | .quoteblock { margin: 0 0 1.375em; padding: 0 0 0 1em; border-left: 5px solid #ededed; } 423 | .quoteblock blockquote { margin: 0 0 1.375em 0; padding: 0 0 0.5625em 0; border: 0; } 424 | .quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } 425 | .quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.5625em; font-size: 0.8125em; color: #333333; } 426 | .quoteblock .attribution br { display: none; } 427 | .quoteblock .attribution cite { display: block; margin-bottom: 0.625em; } 428 | 429 | table thead th, table tfoot th { font-weight: bold; } 430 | 431 | table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 0; border-radius: 0; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } 432 | 433 | table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } 434 | 435 | table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } 436 | 437 | table.tableblock td .paragraph:last-child p, table.tableblock td > p:last-child { margin-bottom: 0; } 438 | 439 | th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } 440 | 441 | th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } 442 | 443 | th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } 444 | 445 | th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } 446 | 447 | th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } 448 | 449 | th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } 450 | 451 | p.tableblock.header { color: #222222; font-weight: bold; } 452 | 453 | td > div.verse { white-space: pre; } 454 | 455 | ol { margin-left: 1.875em; } 456 | 457 | ul li ol { margin-left: 1.625em; } 458 | 459 | dl dd { margin-left: 2em; } 460 | 461 | dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } 462 | 463 | ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.6875em; } 464 | 465 | ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } 466 | 467 | ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } 468 | 469 | ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } 470 | 471 | ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } 472 | 473 | ul.inline { margin: 0 auto 0.6875em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } 474 | ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } 475 | ul.inline > li > * { display: block; } 476 | 477 | .unstyled dl dt { font-weight: normal; font-style: normal; } 478 | 479 | ol.arabic { list-style-type: decimal; } 480 | 481 | ol.decimal { list-style-type: decimal-leading-zero; } 482 | 483 | ol.loweralpha { list-style-type: lower-alpha; } 484 | 485 | ol.upperalpha { list-style-type: upper-alpha; } 486 | 487 | ol.lowerroman { list-style-type: lower-roman; } 488 | 489 | ol.upperroman { list-style-type: upper-roman; } 490 | 491 | ol.lowergreek { list-style-type: lower-greek; } 492 | 493 | .hdlist > table, .colist > table { border: 0; background: none; } 494 | .hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } 495 | 496 | td.hdlist1 { padding-right: .8em; font-weight: bold; } 497 | 498 | td.hdlist1, td.hdlist2 { vertical-align: top; } 499 | 500 | .literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } 501 | 502 | .colist > table tr > td:first-of-type { padding: 0 .8em; line-height: 1; } 503 | .colist > table tr > td:last-of-type { padding: 0.25em 0; } 504 | 505 | .qanda > ol > li > p > em:only-child { color: #005580; } 506 | 507 | .thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } 508 | 509 | .imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } 510 | .imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } 511 | .imageblock > .title { margin-bottom: 0; } 512 | .imageblock.thumb, .imageblock.th { border-width: 6px; } 513 | .imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } 514 | 515 | .image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } 516 | .image.left { margin-right: 0.625em; } 517 | .image.right { margin-left: 0.625em; } 518 | 519 | a.image { text-decoration: none; } 520 | 521 | span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } 522 | span.footnote a, span.footnoteref a { text-decoration: none; } 523 | 524 | #footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } 525 | #footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } 526 | #footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } 527 | #footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } 528 | #footnotes .footnote:last-of-type { margin-bottom: 0; } 529 | 530 | #content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } 531 | 532 | .gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } 533 | .gist .file-data > table td.line-data { width: 99%; } 534 | 535 | div.unbreakable { page-break-inside: avoid; } 536 | 537 | .big { font-size: larger; } 538 | 539 | .small { font-size: smaller; } 540 | 541 | .underline { text-decoration: underline; } 542 | 543 | .overline { text-decoration: overline; } 544 | 545 | .line-through { text-decoration: line-through; } 546 | 547 | .aqua { color: #00bfbf; } 548 | 549 | .aqua-background { background-color: #00fafa; } 550 | 551 | .black { color: black; } 552 | 553 | .black-background { background-color: black; } 554 | 555 | .blue { color: #0000bf; } 556 | 557 | .blue-background { background-color: #0000fa; } 558 | 559 | .fuchsia { color: #bf00bf; } 560 | 561 | .fuchsia-background { background-color: #fa00fa; } 562 | 563 | .gray { color: #606060; } 564 | 565 | .gray-background { background-color: #7d7d7d; } 566 | 567 | .green { color: #006000; } 568 | 569 | .green-background { background-color: #007d00; } 570 | 571 | .lime { color: #00bf00; } 572 | 573 | .lime-background { background-color: #00fa00; } 574 | 575 | .maroon { color: #600000; } 576 | 577 | .maroon-background { background-color: #7d0000; } 578 | 579 | .navy { color: #000060; } 580 | 581 | .navy-background { background-color: #00007d; } 582 | 583 | .olive { color: #606000; } 584 | 585 | .olive-background { background-color: #7d7d00; } 586 | 587 | .purple { color: #600060; } 588 | 589 | .purple-background { background-color: #7d007d; } 590 | 591 | .red { color: #bf0000; } 592 | 593 | .red-background { background-color: #fa0000; } 594 | 595 | .silver { color: #909090; } 596 | 597 | .silver-background { background-color: #bcbcbc; } 598 | 599 | .teal { color: #006060; } 600 | 601 | .teal-background { background-color: #007d7d; } 602 | 603 | .white { color: #bfbfbf; } 604 | 605 | .white-background { background-color: #fafafa; } 606 | 607 | .yellow { color: #bfbf00; } 608 | 609 | .yellow-background { background-color: #fafa00; } 610 | 611 | span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } 612 | 613 | .admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } 614 | .admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #006699; color: #004c73; } 615 | .admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } 616 | .admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } 617 | .admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } 618 | .admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } 619 | 620 | .conum { display: inline-block; color: white !important; background-color: #404040; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } 621 | .conum * { color: white !important; } 622 | .conum + b { display: none; } 623 | .conum:after { content: attr(data-value); } 624 | .conum:not([data-value]):empty { display: none; } 625 | 626 | #header, #content, #footnotes { background: white; padding-left: 2.5em; padding-right: 2.5em; } 627 | 628 | #header { margin-bottom: 0; } 629 | #header > h1 { border-bottom: none; } 630 | 631 | #footnotes { margin-bottom: 2em; } 632 | 633 | .sect1 { padding-bottom: 0; } 634 | 635 | ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .olist, .olist .ulist { margin-bottom: 0.34375em; } 636 | -------------------------------------------------------------------------------- /standard/resources/stylesheets/rocket-panda.css: -------------------------------------------------------------------------------- 1 | @import url(http://openshift.redhat.com/app/assets-20130701203230/overpass.css); 2 | @import url(http://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.0/css/font-awesome.css); 3 | /* normalize.css v2.1.1 | MIT License | git.io/normalize */ 4 | /* ========================================================================== HTML5 display definitions ========================================================================== */ 5 | /** Correct `block` display not defined in IE 8/9. */ 6 | article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } 7 | 8 | /** Correct `inline-block` display not defined in IE 8/9. */ 9 | audio, canvas, video { display: inline-block; } 10 | 11 | /** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ 12 | audio:not([controls]) { display: none; height: 0; } 13 | 14 | /** Address styling not present in IE 8/9. */ 15 | [hidden] { display: none; } 16 | 17 | /* ========================================================================== Base ========================================================================== */ 18 | /** 1. Prevent system color scheme's background color being used in Firefox, IE, and Opera. 2. Prevent system color scheme's text color being used in Firefox, IE, and Opera. 3. Set default font family to sans-serif. 4. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ 19 | html { background: #fff; /* 1 */ color: #000; /* 2 */ font-family: sans-serif; /* 3 */ -ms-text-size-adjust: 100%; /* 4 */ -webkit-text-size-adjust: 100%; /* 4 */ } 20 | 21 | /** Remove default margin. */ 22 | body { margin: 0; } 23 | 24 | /* ========================================================================== Links ========================================================================== */ 25 | /** Address `outline` inconsistency between Chrome and other browsers. */ 26 | a:focus { outline: thin dotted; } 27 | 28 | /** Improve readability when focused and also mouse hovered in all browsers. */ 29 | a:active, a:hover { outline: 0; } 30 | 31 | /* ========================================================================== Typography ========================================================================== */ 32 | /** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ 33 | h1 { font-size: 2em; margin: 0.67em 0; } 34 | 35 | /** Address styling not present in IE 8/9, Safari 5, and Chrome. */ 36 | abbr[title] { border-bottom: 1px dotted; } 37 | 38 | /** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ 39 | b, strong { font-weight: bold; } 40 | 41 | /** Address styling not present in Safari 5 and Chrome. */ 42 | dfn { font-style: italic; } 43 | 44 | /** Address differences between Firefox and other browsers. */ 45 | hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } 46 | 47 | /** Address styling not present in IE 8/9. */ 48 | mark { background: #ff0; color: #000; } 49 | 50 | /** Correct font family set oddly in Safari 5 and Chrome. */ 51 | code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } 52 | 53 | /** Improve readability of pre-formatted text in all browsers. */ 54 | pre { white-space: pre-wrap; } 55 | 56 | /** Set consistent quote types. */ 57 | q { quotes: "\201C" "\201D" "\2018" "\2019"; } 58 | 59 | /** Address inconsistent and variable font size in all browsers. */ 60 | small { font-size: 80%; } 61 | 62 | /** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ 63 | sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } 64 | 65 | sup { top: -0.5em; } 66 | 67 | sub { bottom: -0.25em; } 68 | 69 | /* ========================================================================== Embedded content ========================================================================== */ 70 | /** Remove border when inside `a` element in IE 8/9. */ 71 | img { border: 0; } 72 | 73 | /** Correct overflow displayed oddly in IE 9. */ 74 | svg:not(:root) { overflow: hidden; } 75 | 76 | /* ========================================================================== Figures ========================================================================== */ 77 | /** Address margin not present in IE 8/9 and Safari 5. */ 78 | figure { margin: 0; } 79 | 80 | /* ========================================================================== Forms ========================================================================== */ 81 | /** Define consistent border, margin, and padding. */ 82 | fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } 83 | 84 | /** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ 85 | legend { border: 0; /* 1 */ padding: 0; /* 2 */ } 86 | 87 | /** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ 88 | button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } 89 | 90 | /** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ 91 | button, input { line-height: normal; } 92 | 93 | /** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ 94 | button, select { text-transform: none; } 95 | 96 | /** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ 97 | button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } 98 | 99 | /** Re-set default cursor for disabled elements. */ 100 | button[disabled], html input[disabled] { cursor: default; } 101 | 102 | /** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ 103 | input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } 104 | 105 | /** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ 106 | input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } 107 | 108 | /** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ 109 | input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } 110 | 111 | /** Remove inner padding and border in Firefox 4+. */ 112 | button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } 113 | 114 | /** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ 115 | textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } 116 | 117 | /* ========================================================================== Tables ========================================================================== */ 118 | /** Remove most spacing between table cells. */ 119 | table { border-collapse: collapse; border-spacing: 0; } 120 | 121 | *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } 122 | 123 | html, body { font-size: 100%; } 124 | 125 | body { background: #e5e5e5; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } 126 | 127 | a:hover { cursor: pointer; } 128 | 129 | a:focus { outline: none; } 130 | 131 | img, object, embed { max-width: 100%; height: auto; } 132 | 133 | object, embed { height: 100%; } 134 | 135 | img { -ms-interpolation-mode: bicubic; } 136 | 137 | #map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } 138 | 139 | .left { float: left !important; } 140 | 141 | .right { float: right !important; } 142 | 143 | .text-left { text-align: left !important; } 144 | 145 | .text-right { text-align: right !important; } 146 | 147 | .text-center { text-align: center !important; } 148 | 149 | .text-justify { text-align: justify !important; } 150 | 151 | .hide { display: none; } 152 | 153 | .antialiased, body { -webkit-font-smoothing: antialiased; } 154 | 155 | img { display: inline-block; vertical-align: middle; } 156 | 157 | textarea { height: auto; min-height: 50px; } 158 | 159 | select { width: 100%; } 160 | 161 | p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.15625em; line-height: 1.6; } 162 | 163 | .subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #4d4d4d; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } 164 | 165 | /* Typography resets */ 166 | div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } 167 | 168 | /* Default Link Styles */ 169 | a { color: #006699; text-decoration: none; line-height: inherit; } 170 | a:hover, a:focus { color: #ea0011; } 171 | a img { border: none; } 172 | 173 | /* Default paragraph styles */ 174 | p { font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; font-weight: normal; font-size: 0.9375em; line-height: 1.4; margin-bottom: 1.375em; text-rendering: optimizeLegibility; } 175 | p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } 176 | 177 | /* Default header styles */ 178 | h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Overpass, "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 1em; margin-bottom: 0.5em; line-height: 1.2125em; } 179 | h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; } 180 | 181 | h1 { font-size: 2.125em; } 182 | 183 | h2 { font-size: 1.6875em; } 184 | 185 | h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } 186 | 187 | h4 { font-size: 1.125em; } 188 | 189 | h5 { font-size: 1.125em; } 190 | 191 | h6 { font-size: 1em; } 192 | 193 | hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } 194 | 195 | /* Helpful Typography Defaults */ 196 | em, i { font-style: italic; line-height: inherit; } 197 | 198 | strong, b { font-weight: bold; line-height: inherit; } 199 | 200 | small { font-size: 60%; line-height: inherit; } 201 | 202 | code { font-family: Menlo, Monaco, "Liberation Mono", Consolas, monospace; font-weight: normal; color: #3b3b3b; } 203 | 204 | /* Lists */ 205 | ul, ol, dl { font-size: 0.9375em; line-height: 1.4; margin-bottom: 1.375em; list-style-position: outside; font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; } 206 | 207 | ul, ol { margin-left: 1.625em; } 208 | 209 | /* Unordered Lists */ 210 | ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } 211 | ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } 212 | ul.square { list-style-type: square; } 213 | ul.circle { list-style-type: circle; } 214 | ul.disc { list-style-type: disc; } 215 | ul.no-bullet { list-style: none; } 216 | 217 | /* Ordered Lists */ 218 | ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } 219 | 220 | /* Definition Lists */ 221 | dl dt { margin-bottom: 0.3em; font-weight: bold; } 222 | dl dd { margin-bottom: 0.75em; } 223 | 224 | /* Abbreviations */ 225 | abbr, acronym { text-transform: uppercase; font-size: 90%; color: #404040; border-bottom: 1px dotted #dddddd; cursor: help; } 226 | 227 | abbr { text-transform: none; } 228 | 229 | /* Blockquotes */ 230 | blockquote { margin: 0 0 1.375em; padding: 0 0 0 1em; border-left: 5px solid #ededed; } 231 | blockquote cite { display: block; font-size: 0.8125em; color: #333333; } 232 | blockquote cite:before { content: "\2014 \0020"; } 233 | blockquote cite a, blockquote cite a:visited { color: #333333; } 234 | 235 | blockquote, blockquote p { line-height: 1.4; color: #404040; } 236 | 237 | /* Microformats */ 238 | .vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } 239 | .vcard li { margin: 0; display: block; } 240 | .vcard .fn { font-weight: bold; font-size: 0.9375em; } 241 | 242 | .vevent .summary { font-weight: bold; } 243 | .vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } 244 | 245 | @media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } 246 | h1 { font-size: 2.75em; } 247 | h2 { font-size: 2.3125em; } 248 | h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } 249 | h4 { font-size: 1.4375em; } } 250 | /* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) 251 | */ 252 | .print-only { display: none !important; } 253 | 254 | @media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } 255 | a, a:visited { text-decoration: underline; } 256 | a[href]:after { content: " (" attr(href) ")"; } 257 | abbr[title]:after { content: " (" attr(title) ")"; } 258 | .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } 259 | pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } 260 | thead { display: table-header-group; /* h5bp.com/t */ } 261 | tr, img { page-break-inside: avoid; } 262 | img { max-width: 100% !important; } 263 | @page { margin: 0.5cm; } 264 | p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } 265 | h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } 266 | .hide-on-print { display: none !important; } 267 | .print-only { display: block !important; } 268 | .hide-for-print { display: none !important; } 269 | .show-for-print { display: inherit !important; } } 270 | /* Tables */ 271 | table { background: white; margin-bottom: 1.25em; border: solid 1px #dddddd; } 272 | table thead, table tfoot { background: whitesmoke; font-weight: bold; } 273 | table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222222; text-align: left; } 274 | table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #222222; } 275 | table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; } 276 | table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } 277 | 278 | a:hover, a:focus { text-decoration: underline; } 279 | 280 | .clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } 281 | .clearfix:after, .float-group:after { clear: both; } 282 | 283 | *:not(pre) > code { font-size: 0.9375em; padding: 1px 4px; white-space: nowrap; background-color: #eff1f1; border: 1px solid #d4d9d9; -webkit-border-radius: 0; border-radius: 0; text-shadow: none; } 284 | 285 | pre, pre > code { line-height: 1.6; color: #3b3b3b; font-family: Menlo, Monaco, "Liberation Mono", Consolas, monospace; font-weight: normal; } 286 | 287 | kbd.keyseq { color: #737373; } 288 | 289 | kbd:not(.keyseq) { display: inline-block; color: #404040; font-size: 0.75em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } 290 | 291 | kbd kbd:first-child { margin-left: 0; } 292 | 293 | kbd kbd:last-child { margin-right: 0; } 294 | 295 | .menuseq, .menu { color: #272727; } 296 | 297 | #header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } 298 | #header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } 299 | #header:after, #content:after, #footnotes:after, #footer:after { clear: both; } 300 | 301 | #header { margin-bottom: 2.5em; } 302 | #header > h1 { color: black; font-weight: normal; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; } 303 | #header span { color: #404040; } 304 | #header #revnumber { text-transform: capitalize; } 305 | #header br { display: none; } 306 | #header br + span { padding-left: 3px; } 307 | #header br + span:before { content: "\2013 \0020"; } 308 | #header br + span.author { padding-left: 0; } 309 | #header br + span.author:before { content: ", "; } 310 | 311 | #toc { border-bottom: 0 solid #dddddd; padding-bottom: 1.25em; } 312 | #toc > ul { margin-left: 0.25em; } 313 | #toc ul.sectlevel0 > li > a { font-style: italic; } 314 | #toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } 315 | #toc ul { list-style-type: none; } 316 | 317 | #toctitle { color: #4d4d4d; } 318 | 319 | @media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; } 320 | #toc.toc2 { position: fixed; width: 20em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } 321 | #toc.toc2 #toctitle { margin-top: 0; } 322 | #toc.toc2 > ul { font-size: .95em; } 323 | #toc.toc2 ul ul { margin-left: 0; padding-left: 1.25em; } 324 | #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } 325 | body.toc2.toc-right { padding-left: 0; padding-right: 20em; } 326 | body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } 327 | #content #toc { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; border-width: 0; -webkit-border-radius: 0; border-radius: 0; } 328 | #content #toc > :first-child { margin-top: 0; } 329 | #content #toc > :last-child { margin-bottom: 0; } 330 | #content #toc a { text-decoration: none; } 331 | 332 | #content #toctitle { font-weight: bold; font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Arial, sans-serif; font-size: 1em; padding-left: 0.125em; } 333 | 334 | #footer { max-width: 100%; background-color: white; padding: 1.25em; } 335 | 336 | #footer-text { color: #666666; line-height: 1.26; } 337 | 338 | .sect1 { padding-bottom: 1.25em; } 339 | 340 | .sect1 + .sect1 { border-top: 0 solid #dddddd; } 341 | 342 | #content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } 343 | #content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } 344 | #content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } 345 | #content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; } 346 | #content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; } 347 | 348 | .imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.25em; } 349 | 350 | .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; } 351 | 352 | .tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } 353 | 354 | table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } 355 | 356 | .admonitionblock > table { border: 0; background: none; width: 100%; } 357 | .admonitionblock > table td.icon { text-align: center; width: 80px; } 358 | .admonitionblock > table td.icon img { max-width: none; } 359 | .admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } 360 | .admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #404040; } 361 | .admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } 362 | 363 | .exampleblock > .content { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; -webkit-border-radius: 0; border-radius: 0; } 364 | .exampleblock > .content > :first-child { margin-top: 0; } 365 | .exampleblock > .content > :last-child { margin-bottom: 0; } 366 | .exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } 367 | .exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } 368 | .exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } 369 | 370 | .exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #cccccc; box-shadow: 0 1px 8px #cccccc; } 371 | 372 | .sidebarblock { border-style: solid; border-width: 1px; border-color: #cccccc; margin-bottom: 1.25em; padding: 1.25em; background: #e5e5e5; -webkit-border-radius: 0; border-radius: 0; } 373 | .sidebarblock > :first-child { margin-top: 0; } 374 | .sidebarblock > :last-child { margin-bottom: 0; } 375 | .sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } 376 | .sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } 377 | .sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } 378 | .sidebarblock > .content > .title { color: #4d4d4d; margin-top: 0; line-height: 1.4; } 379 | 380 | .exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } 381 | 382 | .literalblock > .content pre, .listingblock > .content pre { background: #eff1f1; border-width: 0 0 0 2px; border-style: solid; border-color: rgba(120, 120, 120, 0.35); -webkit-border-radius: 0; border-radius: 0; padding: 1em 1.5em 0.875em 1.5em; word-wrap: break-word; } 383 | .literalblock > .content pre.nowrap, .listingblock > .content pre.nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } 384 | .literalblock > .content pre > code, .listingblock > .content pre > code { display: block; } 385 | @media only screen { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.7em; } } 386 | @media only screen and (min-width: 768px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.7875em; } } 387 | @media only screen and (min-width: 1280px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.875em; } } 388 | 389 | .listingblock > .content { position: relative; } 390 | 391 | .listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } 392 | 393 | .listingblock:hover code.asciidoc:before { content: "asciidoc"; } 394 | .listingblock:hover code.clojure:before { content: "clojure"; } 395 | .listingblock:hover code.css:before { content: "css"; } 396 | .listingblock:hover code.groovy:before { content: "groovy"; } 397 | .listingblock:hover code.html:before { content: "html"; } 398 | .listingblock:hover code.java:before { content: "java"; } 399 | .listingblock:hover code.javascript:before { content: "javascript"; } 400 | .listingblock:hover code.python:before { content: "python"; } 401 | .listingblock:hover code.ruby:before { content: "ruby"; } 402 | .listingblock:hover code.scss:before { content: "scss"; } 403 | .listingblock:hover code.xml:before { content: "xml"; } 404 | .listingblock:hover code.yaml:before { content: "yaml"; } 405 | 406 | .listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } 407 | 408 | .listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } 409 | 410 | table.pyhltable { border: 0; margin-bottom: 0; } 411 | 412 | table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } 413 | 414 | table.pyhltable td.code { padding-left: .75em; padding-right: 0; } 415 | 416 | .highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } 417 | 418 | .highlight.pygments .lineno { display: inline-block; margin-right: .25em; } 419 | 420 | table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } 421 | 422 | .quoteblock { margin: 0 0 1.375em; padding: 0 0 0 1em; border-left: 5px solid #ededed; } 423 | .quoteblock blockquote { margin: 0 0 1.375em 0; padding: 0 0 0.5625em 0; border: 0; } 424 | .quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } 425 | .quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.5625em; font-size: 0.8125em; color: #333333; } 426 | .quoteblock .attribution br { display: none; } 427 | .quoteblock .attribution cite { display: block; margin-bottom: 0.625em; } 428 | 429 | table thead th, table tfoot th { font-weight: bold; } 430 | 431 | table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 0; border-radius: 0; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } 432 | 433 | table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } 434 | 435 | table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } 436 | 437 | table.tableblock td .paragraph:last-child p, table.tableblock td > p:last-child { margin-bottom: 0; } 438 | 439 | th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } 440 | 441 | th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } 442 | 443 | th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } 444 | 445 | th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } 446 | 447 | th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } 448 | 449 | th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } 450 | 451 | p.tableblock.header { color: #222222; font-weight: bold; } 452 | 453 | td > div.verse { white-space: pre; } 454 | 455 | ol { margin-left: 1.875em; } 456 | 457 | ul li ol { margin-left: 1.625em; } 458 | 459 | dl dd { margin-left: 2em; } 460 | 461 | dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } 462 | 463 | ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.6875em; } 464 | 465 | ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } 466 | 467 | ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } 468 | 469 | ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } 470 | 471 | ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } 472 | 473 | ul.inline { margin: 0 auto 0.6875em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } 474 | ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } 475 | ul.inline > li > * { display: block; } 476 | 477 | .unstyled dl dt { font-weight: normal; font-style: normal; } 478 | 479 | ol.arabic { list-style-type: decimal; } 480 | 481 | ol.decimal { list-style-type: decimal-leading-zero; } 482 | 483 | ol.loweralpha { list-style-type: lower-alpha; } 484 | 485 | ol.upperalpha { list-style-type: upper-alpha; } 486 | 487 | ol.lowerroman { list-style-type: lower-roman; } 488 | 489 | ol.upperroman { list-style-type: upper-roman; } 490 | 491 | ol.lowergreek { list-style-type: lower-greek; } 492 | 493 | .hdlist > table, .colist > table { border: 0; background: none; } 494 | .hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } 495 | 496 | td.hdlist1 { padding-right: .8em; font-weight: bold; } 497 | 498 | td.hdlist1, td.hdlist2 { vertical-align: top; } 499 | 500 | .literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } 501 | 502 | .colist > table tr > td:first-of-type { padding: 0 .8em; line-height: 1; } 503 | .colist > table tr > td:last-of-type { padding: 0.25em 0; } 504 | 505 | .qanda > ol > li > p > em:only-child { color: #005580; } 506 | 507 | .thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } 508 | 509 | .imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } 510 | .imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } 511 | .imageblock > .title { margin-bottom: 0; } 512 | .imageblock.thumb, .imageblock.th { border-width: 6px; } 513 | .imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } 514 | 515 | .image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } 516 | .image.left { margin-right: 0.625em; } 517 | .image.right { margin-left: 0.625em; } 518 | 519 | a.image { text-decoration: none; } 520 | 521 | span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } 522 | span.footnote a, span.footnoteref a { text-decoration: none; } 523 | 524 | #footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } 525 | #footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } 526 | #footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } 527 | #footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } 528 | #footnotes .footnote:last-of-type { margin-bottom: 0; } 529 | 530 | #content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } 531 | 532 | .gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } 533 | .gist .file-data > table td.line-data { width: 99%; } 534 | 535 | div.unbreakable { page-break-inside: avoid; } 536 | 537 | .big { font-size: larger; } 538 | 539 | .small { font-size: smaller; } 540 | 541 | .underline { text-decoration: underline; } 542 | 543 | .overline { text-decoration: overline; } 544 | 545 | .line-through { text-decoration: line-through; } 546 | 547 | .aqua { color: #00bfbf; } 548 | 549 | .aqua-background { background-color: #00fafa; } 550 | 551 | .black { color: black; } 552 | 553 | .black-background { background-color: black; } 554 | 555 | .blue { color: #0000bf; } 556 | 557 | .blue-background { background-color: #0000fa; } 558 | 559 | .fuchsia { color: #bf00bf; } 560 | 561 | .fuchsia-background { background-color: #fa00fa; } 562 | 563 | .gray { color: #606060; } 564 | 565 | .gray-background { background-color: #7d7d7d; } 566 | 567 | .green { color: #006000; } 568 | 569 | .green-background { background-color: #007d00; } 570 | 571 | .lime { color: #00bf00; } 572 | 573 | .lime-background { background-color: #00fa00; } 574 | 575 | .maroon { color: #600000; } 576 | 577 | .maroon-background { background-color: #7d0000; } 578 | 579 | .navy { color: #000060; } 580 | 581 | .navy-background { background-color: #00007d; } 582 | 583 | .olive { color: #606000; } 584 | 585 | .olive-background { background-color: #7d7d00; } 586 | 587 | .purple { color: #600060; } 588 | 589 | .purple-background { background-color: #7d007d; } 590 | 591 | .red { color: #bf0000; } 592 | 593 | .red-background { background-color: #fa0000; } 594 | 595 | .silver { color: #909090; } 596 | 597 | .silver-background { background-color: #bcbcbc; } 598 | 599 | .teal { color: #006060; } 600 | 601 | .teal-background { background-color: #007d7d; } 602 | 603 | .white { color: #bfbfbf; } 604 | 605 | .white-background { background-color: #fafafa; } 606 | 607 | .yellow { color: #bfbf00; } 608 | 609 | .yellow-background { background-color: #fafa00; } 610 | 611 | span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } 612 | 613 | .admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } 614 | .admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #006699; color: #004c73; } 615 | .admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } 616 | .admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } 617 | .admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } 618 | .admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } 619 | 620 | .conum { display: inline-block; color: white !important; background-color: #404040; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } 621 | .conum * { color: white !important; } 622 | .conum + b { display: none; } 623 | .conum:after { content: attr(data-value); } 624 | .conum:not([data-value]):empty { display: none; } 625 | 626 | #header, #content, #footnotes { background: white; padding-left: 2.5em; padding-right: 2.5em; } 627 | 628 | #header { margin-bottom: 0; } 629 | #header > h1 { border-bottom: none; } 630 | 631 | #footnotes { margin-bottom: 2em; } 632 | 633 | .sect1 { padding-bottom: 0; } 634 | 635 | ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .olist, .olist .ulist { margin-bottom: 0.34375em; } 636 | --------------------------------------------------------------------------------