commit
						bf097096c1
					
				@ -0,0 +1,84 @@
 | 
				
			||||
{
 | 
				
			||||
  "system": {
 | 
				
			||||
    "version": "0.1.1",
 | 
				
			||||
    "context": "",
 | 
				
			||||
    "theme": "hiplab",
 | 
				
			||||
    "logo": "www/content/_assets/images/logo.png",
 | 
				
			||||
    "app": {
 | 
				
			||||
      "debug": true,
 | 
				
			||||
      "port": 8084,
 | 
				
			||||
      "threaded": true,
 | 
				
			||||
      "host": "0.0.0.0"
 | 
				
			||||
    }
 | 
				
			||||
  },
 | 
				
			||||
  "plugins": {
 | 
				
			||||
    "themes": [
 | 
				
			||||
      "List",
 | 
				
			||||
      "Get"
 | 
				
			||||
    ]
 | 
				
			||||
  },
 | 
				
			||||
  "layout": {
 | 
				
			||||
    "root": "www/content",
 | 
				
			||||
    "index": "index.html",
 | 
				
			||||
    "on": {
 | 
				
			||||
      "load": {
 | 
				
			||||
        "pane": [
 | 
				
			||||
          "www/content/installation.html"
 | 
				
			||||
        ]
 | 
				
			||||
      },
 | 
				
			||||
      "error": {}
 | 
				
			||||
    },
 | 
				
			||||
    "icons": {
 | 
				
			||||
      "comment": "use folder names as keys and fontawesome type as values to add icons to menu"
 | 
				
			||||
    },
 | 
				
			||||
    "api": {
 | 
				
			||||
      "comment": "use keys as uri and function calls as values"
 | 
				
			||||
    },
 | 
				
			||||
    "map": [
 | 
				
			||||
      {}
 | 
				
			||||
    ],
 | 
				
			||||
    "order": {
 | 
				
			||||
      "menu": [
 | 
				
			||||
        "docs",
 | 
				
			||||
        "about"
 | 
				
			||||
      ]
 | 
				
			||||
    },
 | 
				
			||||
    "overwrite": {
 | 
				
			||||
      "copyright": {
 | 
				
			||||
        "title": "QCMS - Copyright",
 | 
				
			||||
        "text": "copyright",
 | 
				
			||||
        "type": "dialog",
 | 
				
			||||
        "uri": "www/content/about/copyright.html"
 | 
				
			||||
      },
 | 
				
			||||
      "plugins": {
 | 
				
			||||
        "title": "Build Plugins",
 | 
				
			||||
        "text": "Build Plugins"
 | 
				
			||||
      },
 | 
				
			||||
      "themes": {
 | 
				
			||||
        "text": "Change Themes"
 | 
				
			||||
      },
 | 
				
			||||
      "overview": {
 | 
				
			||||
        "text": "Why QCMS",
 | 
				
			||||
        "uri": "www/content/index.html"
 | 
				
			||||
      },
 | 
				
			||||
      "license": {
 | 
				
			||||
        "type": "dialog",
 | 
				
			||||
        "text": "License",
 | 
				
			||||
        "title": "QCMS License - MIT"
 | 
				
			||||
      }
 | 
				
			||||
    },
 | 
				
			||||
    "header": {
 | 
				
			||||
      "logo": true,
 | 
				
			||||
      "title": "QCMS",
 | 
				
			||||
      "subtitle": "Powered by - Python/Flask"
 | 
				
			||||
    },
 | 
				
			||||
    "footer": [
 | 
				
			||||
      {
 | 
				
			||||
        "text": "Designed & Built by Steve L. Nyemba"
 | 
				
			||||
      },
 | 
				
			||||
      {
 | 
				
			||||
        "text": "Powered By QCMS"
 | 
				
			||||
      }
 | 
				
			||||
    ]
 | 
				
			||||
  }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,8 @@
 | 
				
			||||
data-transport@git+https://github.com/lnyemba/data-transport
 | 
				
			||||
flask
 | 
				
			||||
flask-session
 | 
				
			||||
requests
 | 
				
			||||
numpy 
 | 
				
			||||
pandas
 | 
				
			||||
mistune
 | 
				
			||||
pygments
 | 
				
			||||
@ -0,0 +1,88 @@
 | 
				
			||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.5 Chrome/126.0.6478.183 Electron/31.3.0 Safari/537.36" version="24.7.5">
 | 
				
			||||
  <diagram name="Page-1" id="6eXQYGXEZFShR_b9AtQC">
 | 
				
			||||
    <mxGraphModel dx="468" dy="833" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
 | 
				
			||||
      <root>
 | 
				
			||||
        <mxCell id="0" />
 | 
				
			||||
        <mxCell id="1" parent="0" />
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-8" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="a64sFpkENEI93c3L45WZ-1" target="a64sFpkENEI93c3L45WZ-6" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-1" value="Web Engineer" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontStyle=1" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="120" y="360" width="30" height="60" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="a64sFpkENEI93c3L45WZ-2" target="a64sFpkENEI93c3L45WZ-9" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-2" value="Content Creator" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontStyle=1" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="120" y="500" width="30" height="60" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-6" value="Builds Site<div>With QCMS</div>" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="280" y="365" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-7" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-6" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-9" value="Edit Files" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="280" y="505" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-10" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-9" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="a64sFpkENEI93c3L45WZ-13" target="a64sFpkENEI93c3L45WZ-9" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-13" value="Create Content<div>From Markdown</div>" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="480" y="455" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-14" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-13" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="a64sFpkENEI93c3L45WZ-15" target="a64sFpkENEI93c3L45WZ-9" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-15" value="Content Content<div>From HTML5</div>" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="479" y="560" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-16" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-15" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-21" value="Define Folder Structure" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="160" y="260" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-22" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-21" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-23" value="Builds Plugins" style="html=1;dashed=0;rounded=1;absoluteArcSize=1;arcSize=20;verticalAlign=middle;align=center;whiteSpace=wrap;" parent="1" vertex="1">
 | 
				
			||||
          <mxGeometry x="440" y="260" width="160" height="50" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-24" value="*" style="text;resizeWidth=0;resizeHeight=0;points=[];part=1;verticalAlign=middle;align=center;html=1;" parent="a64sFpkENEI93c3L45WZ-23" vertex="1">
 | 
				
			||||
          <mxGeometry x="1" y="0.5" width="20" height="20" relative="1" as="geometry">
 | 
				
			||||
            <mxPoint x="-20" y="-10" as="offset" />
 | 
				
			||||
          </mxGeometry>
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.544;entryY=-0.1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="a64sFpkENEI93c3L45WZ-23" target="a64sFpkENEI93c3L45WZ-6" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="a64sFpkENEI93c3L45WZ-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.55;entryY=-0.08;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="a64sFpkENEI93c3L45WZ-21" target="a64sFpkENEI93c3L45WZ-6" edge="1">
 | 
				
			||||
          <mxGeometry relative="1" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="Gio7s8dyMPJOIiXoMkRo-1" value="QCMS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontStyle=1" vertex="1" parent="1">
 | 
				
			||||
          <mxGeometry x="84" y="191" width="60" height="30" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
        <mxCell id="Gio7s8dyMPJOIiXoMkRo-2" value="Content Management System" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
 | 
				
			||||
          <mxGeometry x="32" y="220" width="170" height="30" as="geometry" />
 | 
				
			||||
        </mxCell>
 | 
				
			||||
      </root>
 | 
				
			||||
    </mxGraphModel>
 | 
				
			||||
  </diagram>
 | 
				
			||||
</mxfile>
 | 
				
			||||
| 
		 After Width: | Height: | Size: 12 KiB  | 
| 
		 After Width: | Height: | Size: 15 KiB  | 
| 
		 After Width: | Height: | Size: 37 KiB  | 
@ -0,0 +1,38 @@
 | 
				
			||||
.border {
 | 
				
			||||
    border:1px solid #CAD5E0 ;    
 | 
				
			||||
}
 | 
				
			||||
.border-round {
 | 
				
			||||
    padding:6px;
 | 
				
			||||
    border-radius:8px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-left{
 | 
				
			||||
    border-top-left-radius: 8px;    
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-right{
 | 
				
			||||
    border-top-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-right{
 | 
				
			||||
    border-bottom-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-left{
 | 
				
			||||
    border-bottom-left-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-right{
 | 
				
			||||
    border-right:1px solid #CAD5E0;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.border-left{
 | 
				
			||||
    border-left:1px solid #CAD5E0;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-bottom { border-bottom:1px solid #CAD5E0}
 | 
				
			||||
.border-top { border-top:1px solid #CAD5E0}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,19 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file styles the footer of the page
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
.footer {
 | 
				
			||||
    text-align:center;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: repeat(3,1fr);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-size:12px;
 | 
				
			||||
    color:black;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    /* background-color: rgba(255,255,255,0.8); */
 | 
				
			||||
    
 | 
				
			||||
    grid-column: 1 /span 2;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
.main .header { display:grid; grid-template-columns:64px auto; gap:4px}
 | 
				
			||||
.main .header .title {font-size:28px; font-weight:bold}
 | 
				
			||||
.main .header img {width:55px; height:55px;}
 | 
				
			||||
@ -0,0 +1,22 @@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.main {
 | 
				
			||||
    height:98vh; display:grid; grid-template-columns:70% auto; gap:4px;
 | 
				
			||||
    grid-template-rows:70px 40px auto 32px;
 | 
				
			||||
    padding-left:2%; padding-right:2%;
 | 
				
			||||
    line-height: 1.5; font-size:16px; font-family: sans-serif; font-weight:lighter;
 | 
				
			||||
}
 | 
				
			||||
.main .content{
 | 
				
			||||
    align-self:center;
 | 
				
			||||
}
 | 
				
			||||
.main .pane {border-left:1px solid #CAD5E0; height:100%; padding:8px;}
 | 
				
			||||
.bold {font-weight:bold}
 | 
				
			||||
.small-text {font-size:12px; font-weight:lighter; color :#000000;}
 | 
				
			||||
.active {cursor:pointer; padding:2px; margin:2px; border-bottom:2px solid transparent}
 | 
				
			||||
.active:hover {border-bottom-color: #4682b4;}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* 
 | 
				
			||||
*/
 | 
				
			||||
.large-text {font-weight:bold; font-size:28px;}
 | 
				
			||||
    
 | 
				
			||||
@ -0,0 +1,78 @@
 | 
				
			||||
.menu {
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    border:1px solid #CAD5E0 ;
 | 
				
			||||
    
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-column: 1 / span 2;
 | 
				
			||||
    grid-template-columns: 92px repeat(7,auto);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.menu .icon {padding:4px;}
 | 
				
			||||
.menu .icon img {width:30px; height:30px;}
 | 
				
			||||
.menu .item {
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    cursor:pointer;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    text-align: left;
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .sub-menu {
 | 
				
			||||
    
 | 
				
			||||
    display:none;
 | 
				
			||||
    position:absolute;
 | 
				
			||||
    
 | 
				
			||||
    margin-top:2px;
 | 
				
			||||
    min-width:10%;
 | 
				
			||||
    z-index:90;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    text-align:left;
 | 
				
			||||
    align-items:left; 
 | 
				
			||||
    background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .item:hover .sub-menu{
 | 
				
			||||
    
 | 
				
			||||
    display:block;
 | 
				
			||||
    height:auto;    
 | 
				
			||||
}
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,2 @@
 | 
				
			||||
.main .pane { height:auto;}
 | 
				
			||||
.main .pane iframe{ width:100%; border:0px; height:80%;}
 | 
				
			||||
@ -0,0 +1,36 @@
 | 
				
			||||
/* Responsive Design */
 | 
				
			||||
@media (max-width: 1024px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 60% 40%;
 | 
				
			||||
        grid-template-rows: 70px auto 32px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 768px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 100%;
 | 
				
			||||
        grid-template-rows: auto;
 | 
				
			||||
        height: auto;
 | 
				
			||||
    }
 | 
				
			||||
    
 | 
				
			||||
    .main .pane {
 | 
				
			||||
        border-left: none;
 | 
				
			||||
        border-top: 1px solid #CAD5E0;
 | 
				
			||||
        padding: 8px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 480px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        padding: 5%;
 | 
				
			||||
        font-size: 14px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .large-text {
 | 
				
			||||
        font-size: 24px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .small-text {
 | 
				
			||||
        font-size: 10px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,38 @@
 | 
				
			||||
.border {
 | 
				
			||||
    border:1px solid #CAD5E0 ;    
 | 
				
			||||
}
 | 
				
			||||
.border-round {
 | 
				
			||||
    padding:6px;
 | 
				
			||||
    border-radius:8px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-left{
 | 
				
			||||
    border-top-left-radius: 8px;    
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-right{
 | 
				
			||||
    border-top-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-right{
 | 
				
			||||
    border-bottom-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-left{
 | 
				
			||||
    border-bottom-left-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-right{
 | 
				
			||||
    border-right:1px solid #CAD5E0;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.border-left{
 | 
				
			||||
    border-left:1px solid #CAD5E0;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-bottom { border-bottom:1px solid #CAD5E0}
 | 
				
			||||
.border-top { border-top:1px solid #CAD5E0}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,19 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file styles the footer of the page
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
.footer {
 | 
				
			||||
    text-align:center;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: repeat(3,1fr);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-size:12px;
 | 
				
			||||
    color:black;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    /* background-color: rgba(255,255,255,0.8); */
 | 
				
			||||
    
 | 
				
			||||
    grid-column: 1 /span 2;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
.main .header { display:grid; grid-template-columns:64px auto; gap:4px}
 | 
				
			||||
.main .header .title {font-size:28px; font-weight:bold}
 | 
				
			||||
.main .header img {width:55px; height:55px;}
 | 
				
			||||
@ -0,0 +1,37 @@
 | 
				
			||||
/**
 | 
				
			||||
* This is the default window and we will have to hide the pane (side)
 | 
				
			||||
*/
 | 
				
			||||
body {line-height: 1.5; font-weight:lighter; font-family:sans-serif;}
 | 
				
			||||
.main {height:98vh; display:grid; grid-template-columns:65% 35%; gap:4px;
 | 
				
			||||
    grid-template-rows:70px 40px auto 32px;
 | 
				
			||||
    padding-left:2%; padding-right:2%;
 | 
				
			||||
    }
 | 
				
			||||
    .main .header { display:grid; grid-template-columns:64px auto; gap:4px; align-items: center;}
 | 
				
			||||
    .main .header .title {font-size:28px; font-weight:bold}
 | 
				
			||||
    .main .header img {width:80px; height:80px;}
 | 
				
			||||
    .main .index{
 | 
				
			||||
        align-self:center;
 | 
				
			||||
        padding:8px;
 | 
				
			||||
    }
 | 
				
			||||
    .main .menu {border:1px solid transparent; background-color:#f3f3f3;}
 | 
				
			||||
    .main .pane {border-left:1px solid #CAD5E0; height:100%; padding:8px; line-height:1.5; font-size: 14px;}
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
    .search-box {display:block; grid-template-columns: none;}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.main .content{
 | 
				
			||||
    align-self:center;
 | 
				
			||||
}
 | 
				
			||||
.bold {font-weight:bold}
 | 
				
			||||
.small-text {font-size:12px; font-weight:lighter; color :#000000;}
 | 
				
			||||
.active {cursor:pointer; padding:2px; margin:2px; border-bottom:2px solid transparent}
 | 
				
			||||
.active:hover {border-bottom-color: #4682b4;}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* 
 | 
				
			||||
*/
 | 
				
			||||
.large-text {font-weight:bold; font-size:28px;}
 | 
				
			||||
    
 | 
				
			||||
@ -0,0 +1,110 @@
 | 
				
			||||
.menu {
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    border:1px solid #CAD5E0 ;
 | 
				
			||||
    
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-column: 1 / span 2;
 | 
				
			||||
    grid-template-columns: 92px repeat(7,auto);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.menu .icon {padding:4px;}
 | 
				
			||||
.menu .icon img {width:30px; height:30px;}
 | 
				
			||||
.menu .item {
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    cursor:pointer;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    text-align: left;
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .sub-menu {
 | 
				
			||||
    
 | 
				
			||||
    display:none;
 | 
				
			||||
    position:absolute;
 | 
				
			||||
    
 | 
				
			||||
    margin-top:2px;
 | 
				
			||||
    min-width:10%;
 | 
				
			||||
    z-index:90;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    text-align:left;
 | 
				
			||||
    align-items:left; 
 | 
				
			||||
    background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .item:hover .sub-menu{
 | 
				
			||||
    
 | 
				
			||||
    display:block;
 | 
				
			||||
    height:auto;    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,2 @@
 | 
				
			||||
.main .pane {display:block;}
 | 
				
			||||
/* .main .pane div:first-child {margin-top:4px; background-color:#f3f3f3; border-radius: 8px; padding:8px; min-height:150px} */
 | 
				
			||||
@ -0,0 +1,36 @@
 | 
				
			||||
/* Responsive Design */
 | 
				
			||||
@media (max-width: 1024px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 60% 40%;
 | 
				
			||||
        grid-template-rows: 70px auto 32px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 768px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 100%;
 | 
				
			||||
        grid-template-rows: auto;
 | 
				
			||||
        height: auto;
 | 
				
			||||
    }
 | 
				
			||||
    
 | 
				
			||||
    .main .pane {
 | 
				
			||||
        border-left: none;
 | 
				
			||||
        border-top: 1px solid #CAD5E0;
 | 
				
			||||
        padding: 8px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 480px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        padding: 5%;
 | 
				
			||||
        font-size: 14px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .large-text {
 | 
				
			||||
        font-size: 24px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .small-text {
 | 
				
			||||
        font-size: 10px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,38 @@
 | 
				
			||||
.border {
 | 
				
			||||
    border:1px solid #CAD5E0 ;    
 | 
				
			||||
}
 | 
				
			||||
.border-round {
 | 
				
			||||
    padding:6px;
 | 
				
			||||
    border-radius:8px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-left{
 | 
				
			||||
    border-top-left-radius: 8px;    
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-right{
 | 
				
			||||
    border-top-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-right{
 | 
				
			||||
    border-bottom-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-left{
 | 
				
			||||
    border-bottom-left-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-right{
 | 
				
			||||
    border-right:3px dotted #CAD5E0;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.border-left{
 | 
				
			||||
    border-left:3px dotted gray;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-bottom { border-bottom:1px dotted gray;}
 | 
				
			||||
.border-top { border-top:3px  dotted gray;}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,22 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file styles the footer of the page
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/* .main .footer { grid-column: 1 / span 2; font-size:13px; font-weight: lighter; padding:8px;} */
 | 
				
			||||
.footer {
 | 
				
			||||
    text-align:center;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: repeat(3,1fr);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-size:12px;
 | 
				
			||||
    color:black;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    /* background-color: rgba(255,255,255,0.8); */
 | 
				
			||||
    
 | 
				
			||||
    grid-column: 1 /span 2;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,13 @@
 | 
				
			||||
.main .header {
 | 
				
			||||
    
 | 
				
			||||
    grid-row:1;
 | 
				
			||||
    grid-column: 1  / span 2;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: 50px auto; gap:4px;
 | 
				
			||||
    line-height: 1;
 | 
				
			||||
    
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
.main .header .title {font-size:28px; text-transform: capitalize; font-weight:bold}
 | 
				
			||||
.main .header .subtitle {font-size:14px}
 | 
				
			||||
.main .header img { width:44px; height:44px;}
 | 
				
			||||
@ -0,0 +1,55 @@
 | 
				
			||||
.main {
 | 
				
			||||
    margin:10px;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: 50% 50% ; gap:4px;
 | 
				
			||||
    grid-template-rows: 48px 64px auto 32px;
 | 
				
			||||
    font-family: sans-serif;
 | 
				
			||||
    font-weight: lighter;
 | 
				
			||||
    font-size:18px;
 | 
				
			||||
    line-height: 1.5;
 | 
				
			||||
    justify-items: normal;
 | 
				
			||||
    ;
 | 
				
			||||
    height:96vh;
 | 
				
			||||
}
 | 
				
			||||
.main .content {
 | 
				
			||||
    grid-row:3;
 | 
				
			||||
    grid-column: 1 ;
 | 
				
			||||
    text-wrap: wrap;
 | 
				
			||||
    height:100%;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    align-content: start;
 | 
				
			||||
   
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.main .content #index {
 | 
				
			||||
    text-align: left;
 | 
				
			||||
    text-wrap: wrap;
 | 
				
			||||
}    
 | 
				
			||||
 | 
				
			||||
p {
 | 
				
			||||
    margin-top:22px;
 | 
				
			||||
}
 | 
				
			||||
table {
 | 
				
			||||
    width:99%;
 | 
				
			||||
    border: 1px solid #CAD5E0;
 | 
				
			||||
}
 | 
				
			||||
table td {padding:4px; margin:4px;}
 | 
				
			||||
table thead {
 | 
				
			||||
    
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    background-color:#f3f3f3;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.bold {font-weight:bold}
 | 
				
			||||
.small-text {font-size:12px; font-weight:lighter; color :#000000;}
 | 
				
			||||
.active {cursor:pointer; padding:2px; margin:2px; border-bottom:2px solid transparent}
 | 
				
			||||
.active:hover {border-bottom-color: #4682b4;}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* 
 | 
				
			||||
*/
 | 
				
			||||
.large-text {font-weight:bold; font-size:28px;}
 | 
				
			||||
    
 | 
				
			||||
@ -0,0 +1,110 @@
 | 
				
			||||
.menu {
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    border-bottom:3px dotted  gray ;
 | 
				
			||||
    
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-column: 1 / span 2;
 | 
				
			||||
    grid-template-columns: 92px repeat(7,auto);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.menu .icon {padding:4px;}
 | 
				
			||||
.menu .icon img {width:30px; height:30px;}
 | 
				
			||||
.menu .item {
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    cursor:pointer;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    text-align: left;
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .sub-menu {
 | 
				
			||||
    
 | 
				
			||||
    display:none;
 | 
				
			||||
    position:absolute;
 | 
				
			||||
    
 | 
				
			||||
    margin-top:2px;
 | 
				
			||||
    min-width:10%;
 | 
				
			||||
    z-index:90;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    text-align:left;
 | 
				
			||||
    align-items:left; 
 | 
				
			||||
    background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .item:hover .sub-menu{
 | 
				
			||||
    
 | 
				
			||||
    display:block;
 | 
				
			||||
    height:auto;    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,14 @@
 | 
				
			||||
.main .pane {
 | 
				
			||||
    border-left:3px dotted gray;
 | 
				
			||||
    grid-column: 2;
 | 
				
			||||
    font-family: sans-serif;
 | 
				
			||||
    padding-left: 10px;
 | 
				
			||||
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.pane iframe {
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    width:99%;
 | 
				
			||||
    height:100%;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,36 @@
 | 
				
			||||
/* Responsive Design */
 | 
				
			||||
@media (max-width: 1024px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 60% 40%;
 | 
				
			||||
        grid-template-rows: 70px auto 32px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 768px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 100%;
 | 
				
			||||
        grid-template-rows: auto;
 | 
				
			||||
        height: auto;
 | 
				
			||||
    }
 | 
				
			||||
    
 | 
				
			||||
    .main .pane {
 | 
				
			||||
        border-left: none;
 | 
				
			||||
        border-top: 1px solid #CAD5E0;
 | 
				
			||||
        padding: 8px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 480px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        padding: 5%;
 | 
				
			||||
        font-size: 14px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .large-text {
 | 
				
			||||
        font-size: 24px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .small-text {
 | 
				
			||||
        font-size: 10px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,38 @@
 | 
				
			||||
.border {
 | 
				
			||||
    border:1px solid #CAD5E0 ;    
 | 
				
			||||
}
 | 
				
			||||
.border-round {
 | 
				
			||||
    padding:6px;
 | 
				
			||||
    border-radius:8px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-left{
 | 
				
			||||
    border-top-left-radius: 8px;    
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-right{
 | 
				
			||||
    border-top-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-right{
 | 
				
			||||
    border-bottom-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-left{
 | 
				
			||||
    border-bottom-left-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-right{
 | 
				
			||||
    border-right:1px solid #CAD5E0;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.border-left{
 | 
				
			||||
    border-left:1px solid #CAD5E0;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-bottom { border-bottom:1px solid #CAD5E0}
 | 
				
			||||
.border-top { border-top:1px solid #CAD5E0}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,21 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file styles the footer of the page
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
.footer {
 | 
				
			||||
    grid-row:5;
 | 
				
			||||
    margin-top:10px;    
 | 
				
			||||
    text-align:center;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: repeat(3,1fr);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-size:12px;
 | 
				
			||||
    color:black;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    text-transform: capitalize; 
 | 
				
			||||
    /* background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,7 @@
 | 
				
			||||
.main .header {display:grid; grid-template-columns:64px auto; gap:4px; width:100%; align-items:center;}
 | 
				
			||||
.main .header .icon {width:64px; height:64px;}
 | 
				
			||||
.main .header .icon img {width:64px; height:64px;}
 | 
				
			||||
 | 
				
			||||
.main .header .title { font-size:32px; text-transform: uppercase; font-weight:bold}
 | 
				
			||||
.main .header .subtitle {font-style:italic;font-size:14px; color:gray; text-transform: capitalize;}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,50 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file implements theme Open Source Software, the expectation is just a pager that presents a tool/software
 | 
				
			||||
*/
 | 
				
			||||
body, ul, p, select {
 | 
				
			||||
    font-size: 16px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    font-family:sans-serif;
 | 
				
			||||
    line-height:1.5;
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
.main {
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: 100%;;
 | 
				
			||||
    margin:1%;
 | 
				
			||||
    margin-left:10%;
 | 
				
			||||
    margin-right:10%;
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    height:90%;
 | 
				
			||||
    width:80%;
 | 
				
			||||
}
 | 
				
			||||
.main .content{
 | 
				
			||||
    
 | 
				
			||||
    grid-row:4;
 | 
				
			||||
    align-self:center;
 | 
				
			||||
    height:100%;
 | 
				
			||||
    width:100%;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.main .content .banner {
 | 
				
			||||
    background-repeat: no-repeat;
 | 
				
			||||
    background-size: cover;
 | 
				
			||||
    background-position: center;
 | 
				
			||||
    height:200px;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    display: grid;
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/* .main .pane {border-left:1px solid #CAD5E0; height:100%; padding:8px;} */
 | 
				
			||||
.bold {font-weight:bold}
 | 
				
			||||
.small-text {font-size:12px; font-weight:lighter; color :#000000;}
 | 
				
			||||
.active {cursor:pointer; padding:2px; margin:2px; border-bottom:2px solid transparent}
 | 
				
			||||
.active:hover {border-bottom-color: #4682b4;}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* 
 | 
				
			||||
*/
 | 
				
			||||
.large-text {font-weight:bold; font-size:28px;}
 | 
				
			||||
    
 | 
				
			||||
@ -0,0 +1,82 @@
 | 
				
			||||
 | 
				
			||||
.menu .icon {padding:4px; align-items:center; display:grid;}
 | 
				
			||||
.menu .icon img {width:30px; height:30px;}
 | 
				
			||||
 | 
				
			||||
.main .menu .sub-menu {
 | 
				
			||||
    
 | 
				
			||||
    display:none;
 | 
				
			||||
    position:absolute;
 | 
				
			||||
    
 | 
				
			||||
    margin-top:2px;
 | 
				
			||||
    min-width:10%;
 | 
				
			||||
    z-index:90;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    text-align:left;
 | 
				
			||||
    align-items:left; 
 | 
				
			||||
    background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.main .menu .item {
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    cursor:pointer;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    text-align: left;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.main .menu .item:hover .sub-menu{
 | 
				
			||||
    
 | 
				
			||||
    display:block;
 | 
				
			||||
    height:auto;    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.main .menu {
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    grid-row:2;
 | 
				
			||||
    width:100%;
 | 
				
			||||
    display:none;
 | 
				
			||||
    
 | 
				
			||||
    /* grid-row:2; grid-column:1 ; */
 | 
				
			||||
    grid-template-columns: 92px repeat(7,auto);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    border:0;  height:48px; padding:0px;
 | 
				
			||||
    display:grid; grid-template:64px repeat(6,1fr); gap:4px; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    align-items: center;
 | 
				
			||||
}
 | 
				
			||||
.main .menu .icon .button {
 | 
				
			||||
    border:1px solid #CAD5E0; border-radius:8px; padding:2px;
 | 
				
			||||
    ;
 | 
				
			||||
}
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1 @@
 | 
				
			||||
.main .pane {display:block}
 | 
				
			||||
@ -0,0 +1,36 @@
 | 
				
			||||
/* Responsive Design */
 | 
				
			||||
@media (max-width: 1024px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 60% 40%;
 | 
				
			||||
        grid-template-rows: 70px auto 32px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 768px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 100%;
 | 
				
			||||
        grid-template-rows: auto;
 | 
				
			||||
        height: auto;
 | 
				
			||||
    }
 | 
				
			||||
    
 | 
				
			||||
    .main .pane {
 | 
				
			||||
        border-left: none;
 | 
				
			||||
        border-top: 1px solid #CAD5E0;
 | 
				
			||||
        padding: 8px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 480px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        padding: 5%;
 | 
				
			||||
        font-size: 14px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .large-text {
 | 
				
			||||
        font-size: 24px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .small-text {
 | 
				
			||||
        font-size: 10px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,38 @@
 | 
				
			||||
.border {
 | 
				
			||||
    border:1px solid #CAD5E0 ;    
 | 
				
			||||
}
 | 
				
			||||
.border-round {
 | 
				
			||||
    padding:6px;
 | 
				
			||||
    border-radius:8px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-left{
 | 
				
			||||
    border-top-left-radius: 8px;    
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-top-right{
 | 
				
			||||
    border-top-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-right{
 | 
				
			||||
    border-bottom-right-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
.border-round-bottom-left{
 | 
				
			||||
    border-bottom-left-radius: 8px;
 | 
				
			||||
    padding:6px;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-right{
 | 
				
			||||
    border-right:1px solid #CAD5E0;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.border-left{
 | 
				
			||||
    border-left:1px solid #CAD5E0;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.border-bottom { border-bottom:1px solid #CAD5E0}
 | 
				
			||||
.border-top { border-top:1px solid #CAD5E0}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,19 @@
 | 
				
			||||
/**
 | 
				
			||||
* This file styles the footer of the page
 | 
				
			||||
*/
 | 
				
			||||
 | 
				
			||||
.footer {
 | 
				
			||||
    text-align:center;
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-template-columns: repeat(3,1fr);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-size:12px;
 | 
				
			||||
    color:black;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    align-content: center;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    /* background-color: rgba(255,255,255,0.8); */
 | 
				
			||||
    
 | 
				
			||||
    grid-column: 1 /span 2;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
.main .header { display:grid; grid-template-columns:64px auto; gap:4px}
 | 
				
			||||
.main .header .title {font-size:28px; font-weight:bold}
 | 
				
			||||
.main .header img {width:55px; height:55px;}
 | 
				
			||||
@ -0,0 +1,22 @@
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
.main {
 | 
				
			||||
    height:98vh; display:grid; grid-template-columns:70% auto; gap:4px;
 | 
				
			||||
    grid-template-rows:70px 40px auto 32px;
 | 
				
			||||
    padding-left:2%; padding-right:2%;
 | 
				
			||||
    line-height: 1.5; font-size:16px; font-family: sans-serif; font-weight:lighter;
 | 
				
			||||
}
 | 
				
			||||
.main .content{
 | 
				
			||||
    align-self:center;
 | 
				
			||||
}
 | 
				
			||||
.main .pane {border-left:1px solid #CAD5E0; height:100%; padding:8px;}
 | 
				
			||||
.bold {font-weight:bold}
 | 
				
			||||
.small-text {font-size:12px; font-weight:lighter; color :#000000;}
 | 
				
			||||
.active {cursor:pointer; padding:2px; margin:2px; border-bottom:2px solid transparent}
 | 
				
			||||
.active:hover {border-bottom-color: #4682b4;}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* 
 | 
				
			||||
*/
 | 
				
			||||
.large-text {font-weight:bold; font-size:28px;}
 | 
				
			||||
    
 | 
				
			||||
@ -0,0 +1,79 @@
 | 
				
			||||
.menu {
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    border:1px solid #CAD5E0 ;
 | 
				
			||||
    
 | 
				
			||||
    display:grid;
 | 
				
			||||
    grid-column: 1 / span 2;
 | 
				
			||||
    grid-template-columns: 92px repeat(7,auto);
 | 
				
			||||
    gap:4px;
 | 
				
			||||
    text-transform: capitalize;
 | 
				
			||||
    align-items: center;
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
.menu .icon {padding:4px;}
 | 
				
			||||
.menu .icon img {width:30px; height:30px;}
 | 
				
			||||
.menu .item {
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    cursor:pointer;
 | 
				
			||||
    padding:4px;
 | 
				
			||||
    text-align: left;
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
   
 | 
				
			||||
    
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .sub-menu {
 | 
				
			||||
    
 | 
				
			||||
    display:none;
 | 
				
			||||
    position:absolute;
 | 
				
			||||
    
 | 
				
			||||
    margin-top:2px;
 | 
				
			||||
    min-width:10%;
 | 
				
			||||
    z-index:90;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    font-weight:lighter;
 | 
				
			||||
    text-align:left;
 | 
				
			||||
    align-items:left; 
 | 
				
			||||
    background-color: rgba(255,255,255,0.8);
 | 
				
			||||
    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
.menu .item:hover .sub-menu{
 | 
				
			||||
    
 | 
				
			||||
    display:block;
 | 
				
			||||
    height:auto;    
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
* TAB SPECIFICATIONS WITH RADIO BUTTONS AND LABELS
 | 
				
			||||
*/
 | 
				
			||||
.tab-content table { width:99%; border-radius: 8px; padding:8px; border:1px solid #d3d3d3;}
 | 
				
			||||
.tab-content table tr:nth-child(even) {background-color: #f3f3f3;}
 | 
				
			||||
/* .tab-content {width:80%;} */
 | 
				
			||||
 | 
				
			||||
.tabs {display:grid; grid-template-columns: repeat(auto-fit,209px); gap:0px; align-content:center; 
 | 
				
			||||
    /* background-color: #f3f3f3; */
 | 
				
			||||
    padding-top:4px;
 | 
				
			||||
    padding-left:4px;
 | 
				
			||||
    padding-right:4px;
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio] {display:none; }
 | 
				
			||||
.tabs input[type=radio] + label { font-weight:lighter;  
 | 
				
			||||
    border:1px solid transparent;
 | 
				
			||||
    border-bottom-color: #CAD5E0;
 | 
				
			||||
    background-color: #f3f3f3;
 | 
				
			||||
    padding:8px;
 | 
				
			||||
    padding-right:10px; padding-left:10px;
 | 
				
			||||
    
 | 
				
			||||
    cursor:pointer
 | 
				
			||||
}
 | 
				
			||||
.tabs input[type=radio]:checked +label {
 | 
				
			||||
    background-color: #ffffff;
 | 
				
			||||
    border-top-right-radius: 8px; 
 | 
				
			||||
    border-top-left-radius: 8px;
 | 
				
			||||
    font-weight:bold;
 | 
				
			||||
    border-color: #CAD5E0;
 | 
				
			||||
    border-bottom-color: #FFFFFF;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,36 @@
 | 
				
			||||
/* Responsive Design */
 | 
				
			||||
@media (max-width: 1024px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 60% 40%;
 | 
				
			||||
        grid-template-rows: 70px auto 32px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 768px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        grid-template-columns: 100%;
 | 
				
			||||
        grid-template-rows: auto;
 | 
				
			||||
        height: auto;
 | 
				
			||||
    }
 | 
				
			||||
    
 | 
				
			||||
    .main .pane {
 | 
				
			||||
        border-left: none;
 | 
				
			||||
        border-top: 1px solid #CAD5E0;
 | 
				
			||||
        padding: 8px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@media (max-width: 480px) {
 | 
				
			||||
    .main {
 | 
				
			||||
        padding: 5%;
 | 
				
			||||
        font-size: 14px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .large-text {
 | 
				
			||||
        font-size: 24px;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    .small-text {
 | 
				
			||||
        font-size: 10px;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,38 @@
 | 
				
			||||
"""
 | 
				
			||||
 | 
				
			||||
"""
 | 
				
			||||
import os
 | 
				
			||||
import cms
 | 
				
			||||
 | 
				
			||||
def _getPath(_config):
 | 
				
			||||
    _layout = _config['layout']
 | 
				
			||||
    path = os.sep.join([_layout['location'],_layout['root'],'_assets','themes'])
 | 
				
			||||
    return path
 | 
				
			||||
@cms.Plugin(mimetype='application/json')
 | 
				
			||||
def List (**_args) :
 | 
				
			||||
    """
 | 
				
			||||
    This will list available css themes we have on disk
 | 
				
			||||
    """
 | 
				
			||||
    _rq = _args['request']
 | 
				
			||||
    _config = _args['config']
 | 
				
			||||
    path = _getPath(_config) #os.sep.join([_config['layout']['location'],_config['layout']['root'],'_assets','themes'])
 | 
				
			||||
    
 | 
				
			||||
    return os.listdir(path)
 | 
				
			||||
def register ():
 | 
				
			||||
    """
 | 
				
			||||
    Registering 
 | 
				
			||||
    """
 | 
				
			||||
    pass
 | 
				
			||||
def Get (**_args):
 | 
				
			||||
    _request = _args['request']
 | 
				
			||||
    _config = _args['config']
 | 
				
			||||
    print (_request.args['theme'])
 | 
				
			||||
    _theme = 'default' if 'theme' not in _request.args else _request.args['theme']
 | 
				
			||||
    path = os.sep.join([_getPath(_config),_theme])
 | 
				
			||||
    files = os.listdir(path)
 | 
				
			||||
    _out = {}
 | 
				
			||||
    for file in files  :
 | 
				
			||||
        f = open (os.sep.join([path,file]))
 | 
				
			||||
        _out[file.split('.')[0]] = f.read()
 | 
				
			||||
        f.close()
 | 
				
			||||
    return {_theme:_out},"application/json"
 | 
				
			||||
@ -0,0 +1,13 @@
 | 
				
			||||
<style>
 | 
				
			||||
    .fa-check {color:green}
 | 
				
			||||
</style>
 | 
				
			||||
<img src="www/content/_assets/images/logo.png" align="left" style="width:150px"> <br>
 | 
				
			||||
<div>
 | 
				
			||||
 | 
				
			||||
<b>QCMS</b> is a python/flask based Content Management System
 | 
				
			||||
<ul>
 | 
				
			||||
    <br><i class="fa-solid fa-check"></i> Open-source under MIT license
 | 
				
			||||
    <br><i class="fa-solid fa-check"></i> Designed and build by <br>Steve L. Nyemba <i class="fa-solid fa-quote-left"></i> steve@the-phi.com <i class="fa-solid fa-quote-right"></i>
 | 
				
			||||
 | 
				
			||||
</ul></div>
 | 
				
			||||
<br>
 | 
				
			||||
@ -0,0 +1,8 @@
 | 
				
			||||
Copyright 2010 - 2024, Steve L. Nyemba
 | 
				
			||||
 | 
				
			||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 | 
				
			||||
 | 
				
			||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
				
			||||
 | 
				
			||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,37 @@
 | 
				
			||||
### Build plugins
 | 
				
			||||
A plugin is a basic <b>python</b> function that takes positional arguments i.e one being <b>request</b> and the other <b>config</b>. We allow the function to have access to the request object (if data were submitted) and to QCMS configuration if any configuration data is needed.
 | 
				
			||||
 | 
				
			||||
    
 | 
				
			||||
    <div class="source-code editor border">
 | 
				
			||||
        <span class="code-comment"># saving this function to www/html/_plugins/myplugins.py</span>
 | 
				
			||||
        <span class="code-comment">#</span>
 | 
				
			||||
        <span class="keyword">import</span> numpy as np
 | 
				
			||||
        <span class="keyword">import</span> cms 
 | 
				
			||||
 | 
				
			||||
        @cms.Plugin(mimetype="application/json", methods=["POST"])
 | 
				
			||||
        <span class="keyword">def</span> demo(**_args):
 | 
				
			||||
            req = _args['request']
 | 
				
			||||
            conf= _args['config']
 | 
				
			||||
            <span class="keyword">return</span> {"name":"foo","age":np.random.randint(0,100)}
 | 
				
			||||
    </div>
 | 
				
			||||
 | 
				
			||||
### Register Plugin
 | 
				
			||||
 | 
				
			||||
Once a plugin is build it needs to be registered, in order to allow the function be made available to calling code (JS/HTML5) 
 | 
				
			||||
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
$ qcms plugin-register qcms-manifest.json myplugins.py --import demo
 | 
				
			||||
</div>
 | 
				
			||||
 | 
				
			||||
Calling the registered function as an API. The example uses <b>curl</ba>
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
$ curl http://localhost:8000/api/myplugins/demo
 | 
				
			||||
</div>
 | 
				
			||||
 | 
				
			||||
### Limitations
 | 
				
			||||
 | 
				
			||||
**QCMS** lowers the barrier to entry and makes the following tradeoffs to deliver an optimal solution:
 | 
				
			||||
<ul>
 | 
				
			||||
    <i class="fa-solid fa-minus"></i> Plugins are basic python function that need to be registered with <b>QCMS</b> instance/site
 | 
				
			||||
    <br><i class="fa-solid fa-minus"></i> We delegate access control (read/write) to web content to a cloud service provider (nextcloud for now).
 | 
				
			||||
</ul>
 | 
				
			||||
@ -0,0 +1,49 @@
 | 
				
			||||
Themes consist of basic **css** located in **www/html/_assets/themes**. The css folder names represent the themes.
 | 
				
			||||
Each folder should have the following files :
 | 
				
			||||
<div class="border border-round" style="display:grid; grid-template-columns:auto auto; gap:4px; width:96%; text-transform:capitalize">
 | 
				
			||||
<div class="bold border-bottom" style="background-color:#f3f3f3; padding:4px;">Files (.css extensions)</div><div class="border-bottom bold" style="background-color:#f3f3f3; padding:4px;">Description</div>
 | 
				
			||||
<div>borders</div><div> styling of borders (top,bottom,right,left,round)</div>
 | 
				
			||||
<div>footer</div><div>styling the footer</div>
 | 
				
			||||
<div>header</div><div>styling the footer</div>
 | 
				
			||||
<div>layout</div><div>The general layout for a site and how to organize different panes</div>
 | 
				
			||||
<div>menu</div><div>styling the menu</div>
 | 
				
			||||
<div>pane</div><div>styling secondary pane, it's position and visibility depends on the theme</div>
 | 
				
			||||
</div>
 | 
				
			||||
 | 
				
			||||
### Setup themes
 | 
				
			||||
 | 
				
			||||
**QCMS** CLI interface allows to query the backend to determine available themes, in three simple phases described below
 | 
				
			||||
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
    #1. Listing available themes<br>
 | 
				
			||||
    $ qcms list-themes
 | 
				
			||||
</div>
 | 
				
			||||
 | 
				
			||||
<div class="source-code">#2. Selecting and applying theme<br>
 | 
				
			||||
$ qcms set-theme magazine</div>
 | 
				
			||||
 | 
				
			||||
<div class="source-code"># Verifying themes set<br>$ ls www/html/_assets/themes </div>
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
### Custom Themes
 | 
				
			||||
 | 
				
			||||
**QCMS** supports custom themes or user-defined themes. Build custom theme manually in three simple steps:
 | 
				
			||||
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
# 1. copy default theme to new folder (www/html/_assets/theme/mytheme)<br>
 | 
				
			||||
$ cp -r www/html/_assets/themes/default www/html/_assets/themes/mytheme
 | 
				
			||||
</div>
 | 
				
			||||
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
# 2. update configuration file to enable configuration<br>
 | 
				
			||||
{
 | 
				
			||||
    "system":{
 | 
				
			||||
        "theme":"mytheme"
 | 
				
			||||
        ...
 | 
				
			||||
    }
 | 
				
			||||
}</div>
 | 
				
			||||
 | 
				
			||||
<div class="source-code">
 | 
				
			||||
# 3. set the theme and reload the your app (from the app folder)<br>
 | 
				
			||||
$ qcms set-theme magazine
 | 
				
			||||
</div>
 | 
				
			||||
@ -0,0 +1,14 @@
 | 
				
			||||
### Build plugins
 | 
				
			||||
A plugin is a basic <b>python</b> function that takes positional arguments i.e one being <b>request</b> and the other <b>config</b>. We allow the function to have access to the request object (if data were submitted) and to QCMS configuration if any configuration data is needed.
 | 
				
			||||
 | 
				
			||||
    
 | 
				
			||||
    <div class="source-code editor">
 | 
				
			||||
        <span class="keyword">import</span> numpy as np
 | 
				
			||||
 | 
				
			||||
        <span class="keyword">def</span> demo(**_args):
 | 
				
			||||
            req = _args['request']
 | 
				
			||||
            conf= _args['config']
 | 
				
			||||
            <span class="keyword">return</span> {"name":"foo","age":np.random.randint(0,100)}
 | 
				
			||||
    </div>
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,46 @@
 | 
				
			||||
<div>
 | 
				
			||||
    <img src="www/content/_assets/images/logo.png" align="left" style="width:250px;">
 | 
				
			||||
    <h3>What is QCMS ?</h3>
 | 
				
			||||
    <i class="fa-solid fa-minus"> </i> Fast lightweight Python/Flask CMS designed for engineers
 | 
				
			||||
    <br><i class="fa-solid fa-minus"> </i> Builds a web site from folder structure (local or nextcloud)
 | 
				
			||||
    <br><i class="fa-solid fa-minus"> </i> Supports industry standard frameworks
 | 
				
			||||
    <div style="margin-left:60px; font-size:13px;">
 | 
				
			||||
        <i class="fa-solid fa-circle" style="font-size:5px; margin-left:10px;"> </i> JQuery, Apexcharts, fontawesome
 | 
				
			||||
        <br><i class="fa-solid fa-circle" style="font-size:5px; margin-left:10px;"> </i> Numpy, Pandas, flask
 | 
				
			||||
    </div>
 | 
				
			||||
    <i class="fa-solid fa-minus"> </i> Custom functions built & registered as API
 | 
				
			||||
    <br><i class="fa-solid fa-minus"> </i> Extensible themes support (mostly css)
 | 
				
			||||
</div>
 | 
				
			||||
<br>
 | 
				
			||||
<div >
 | 
				
			||||
    <div style="width:60%; margin-left:20%;" class="border-top"></div>
 | 
				
			||||
    <p>
 | 
				
			||||
       <h3>Why use QCMS</h3>
 | 
				
			||||
       <img src="www/content/_assets/images/logo-1.png" align="right" style="width:250px">
 | 
				
			||||
       <div>
 | 
				
			||||
            <b>QCMS</b> lowers the barrier of entry to building a site 
 | 
				
			||||
            <br><i class="fa-solid fa-minus"></i> It is open-source and available under MIT license
 | 
				
			||||
            <br><i class="fa-solid fa-minus"></i> Removing user administration overhead:smaller footprint & efficiency
 | 
				
			||||
            <br><i class="fa-solid fa-minus"></i> Using basic knowledge of how documents are organized on disk or in the cloud.
 | 
				
			||||
            <div style="margin-left:30px">
 | 
				
			||||
                <i class="fa-solid fa-circle" style="font-size:5px"></i> <b>Markdown</b> rendering for non-technical users (using an editor).
 | 
				
			||||
                <br><i class="fa-solid fa-circle" style="font-size:5px"></i> <b>HTML5</b> rendering for more advanced users
 | 
				
			||||
                <br><i class="fa-solid fa-circle" style="font-size:5px"></i> Suitable to deploy multiple sites on an <b>AWS</b> micro/nano instance
 | 
				
			||||
            </div> 
 | 
				
			||||
       </div>
 | 
				
			||||
    </p>
 | 
				
			||||
</div>
 | 
				
			||||
<br>
 | 
				
			||||
<div>
 | 
				
			||||
    <div style="width:65%; margin-left:20%;" class="border-top"></div>
 | 
				
			||||
    <h3>Use Cases</h3>
 | 
				
			||||
    <img src="www/content/_assets/images/usecase.png" align="left" style="width:40%; margin-right:1%">
 | 
				
			||||
    <div>
 | 
				
			||||
        <b>QCMS</b>, implements a separation of concerns between <b>web engineer</b> and the <b>content creator</b> with the least amount of friction
 | 
				
			||||
        <br>Ideally the roles would look like
 | 
				
			||||
        <ul>
 | 
				
			||||
            <i class="fa-solid fa-minus"></i> The <b>Web Engineers,</b> will setup virtualenv; setup port, install themes, makes sure sure content is accessible. Optionally can make content.
 | 
				
			||||
            <br><i class="fa-solid fa-minus"></i> The <b>Content Creator</b>, writes up files and uploads images ...
 | 
				
			||||
        </ul>
 | 
				
			||||
    </div>
 | 
				
			||||
</div>
 | 
				
			||||
@ -0,0 +1,120 @@
 | 
				
			||||
<style>
 | 
				
			||||
   
 | 
				
			||||
    .oss .quick-install {
 | 
				
			||||
        /* display:grid; grid-template-columns: 210px auto 210px;; gap:2px; align-items:center */
 | 
				
			||||
    }
 | 
				
			||||
    .oss .quick-install .active {display:block}
 | 
				
			||||
    .snippet {display:block; height:155px; margin:4px;}
 | 
				
			||||
    .snippet-frame {height: 155px; overflow:hidden;}
 | 
				
			||||
</style>
 | 
				
			||||
<script>
 | 
				
			||||
  $(document).ready(()=>{
 | 
				
			||||
      var _layout = {on:{load:{}}}
 | 
				
			||||
    _layout.on.load.copyright = ['about/copyright.html']
 | 
				
			||||
    qcms.page.loader(_layout)
 | 
				
			||||
    
 | 
				
			||||
  })
 | 
				
			||||
</script>
 | 
				
			||||
<div class="tabs">
 | 
				
			||||
    
 | 
				
			||||
    <input type="radio" checked name="qstart" id="install"/>
 | 
				
			||||
    <label for="install" class="border-round-top-left" onclick="$('.snippet-scroll-frame').animate({'margin-top':0})">Installation</label>
 | 
				
			||||
 | 
				
			||||
    <input type="radio" name="qstart" id="project"/>
 | 
				
			||||
    <label for="project" onclick="$('.snippet-scroll-frame').animate({'margin-top':-155})">Create Project</label>
 | 
				
			||||
    <!-- <input type="radio" name="qstart" disable id="extra" disabled/>
 | 
				
			||||
    <label for="extra" class="border-round-top-right" style="grid-column: 3 / span 6;"> </label> -->
 | 
				
			||||
    <div align="right" class="border-round-top-right border-bottom" style="grid-column:3 / span 6; background-color: #f3f3f3;">
 | 
				
			||||
      
 | 
				
			||||
    </div>
 | 
				
			||||
    
 | 
				
			||||
 | 
				
			||||
</div>
 | 
				
			||||
<div class="snippet-frame border-right border-left border-bottom" style="margin:4px; margin-top:0px; padding:8px;">
 | 
				
			||||
    <div class="snippet-scroll-frame">
 | 
				
			||||
        <div class="snippet quick-install" >          
 | 
				
			||||
            <div>
 | 
				
			||||
                <div class="source-code">
 | 
				
			||||
                    # install using virtualenv <br>
 | 
				
			||||
                    $ pip install --upgrade git+https://dev.the-phi.com/git/qcms/cms
 | 
				
			||||
                </div>
 | 
				
			||||
                <div class="source-code" style="margin-top:4px;">
 | 
				
			||||
                    # explore qcms commands and try them <br>
 | 
				
			||||
                    $ qcms --help
 | 
				
			||||
                </div>
 | 
				
			||||
        
 | 
				
			||||
            </div>
 | 
				
			||||
           
 | 
				
			||||
        </div>
 | 
				
			||||
        <div class="snippet quick-start">            
 | 
				
			||||
            <div>
 | 
				
			||||
                <div class="source-code">#creating a sample project with title and sample title <br>$ qcms create  myproject www/html --title mydemo --subtitle "flask cms demo"</div>
 | 
				
			||||
                <div class="source-code" style="margin-top:2px;">#bootup the newly created site<br>$ qcms bootup ./myproject/qcms-manifest.json</div>
 | 
				
			||||
                <br> <div class="small-text"><i class="fa-solid fa-minus"></i> Open your browser on port http://localhost:8084</div>
 | 
				
			||||
            </div>
 | 
				
			||||
        </div>        
 | 
				
			||||
    </div>
 | 
				
			||||
 | 
				
			||||
</div>
 | 
				
			||||
<p>
 | 
				
			||||
    <ul>
 | 
				
			||||
        <p>
 | 
				
			||||
        </p>
 | 
				
			||||
        <h3>Source code & License</h3>
 | 
				
			||||
        <b>{{layout.header.title}}</b>, is Open-source under MIT License, we welcome you to get a copy of the source code on github
 | 
				
			||||
        <p>
 | 
				
			||||
            <h3>Copyright</h3>
 | 
				
			||||
            <br>
 | 
				
			||||
            <div id="copyright"></div>
 | 
				
			||||
 | 
				
			||||
        </p>
 | 
				
			||||
    </ul>
 | 
				
			||||
</p>
 | 
				
			||||
<!-- <div class="readme">
 | 
				
			||||
    <p id="qstart">
 | 
				
			||||
        <h3>Quick Start</h3>
 | 
				
			||||
        <div class="quick-install" style="">
 | 
				
			||||
            <div align="center" class="active" onclick="window.location.href='#project'">
 | 
				
			||||
                <img src="www/content/_assets/images/logo-1.png" style="width:125px; display:none">
 | 
				
			||||
                <i class="fa-solid fa-down-long fa-bounce" style="font-size:32px;"></i>
 | 
				
			||||
            </div>
 | 
				
			||||
            <div>
 | 
				
			||||
                <div class="source-code">
 | 
				
			||||
                    # install using virtualenv <br>
 | 
				
			||||
                    $ pip install --upgrade git+https://dev.the-phi.com/git/qcms/cms
 | 
				
			||||
                </div>
 | 
				
			||||
                <div class="source-code" style="margin-top:4px;">
 | 
				
			||||
                    # explore qcms commands and try them <br>
 | 
				
			||||
                    $ qcms --help
 | 
				
			||||
                </div>
 | 
				
			||||
        
 | 
				
			||||
            </div>
 | 
				
			||||
            <div class="sticker">
 | 
				
			||||
                <img src="www/content/_assets/images/logo.png" style="width:125px">
 | 
				
			||||
            </div>
 | 
				
			||||
        </div>
 | 
				
			||||
    </p>
 | 
				
			||||
    
 | 
				
			||||
    <p id="project">
 | 
				
			||||
        
 | 
				
			||||
        <h3>First Project</h3>
 | 
				
			||||
        <div class="quick-install">
 | 
				
			||||
            <div class="sticker" align="center">
 | 
				
			||||
                <i class="fa-solid fa-cog fa-spin" style="font-size:48px; color:#4682B4;"></i>
 | 
				
			||||
                <i class="fa-solid fa-cog fa-spin" style="font-size:32px; color:#F65000; margin-left:-10px"></i>
 | 
				
			||||
                
 | 
				
			||||
            </div>
 | 
				
			||||
            <div>
 | 
				
			||||
                <div class="source-code">#creating a sample project with title and sample title <br>$ qcms create  myproject www/html --title mydemo --subtitle "flask cms demo"</div>
 | 
				
			||||
                <div class="source-code" style="margin-top:2px;">#bootup the newly created site<br>$ qcms bootup ./myproject/qcms-manifest.json</div>
 | 
				
			||||
            
 | 
				
			||||
            </div>
 | 
				
			||||
            <div align="center" class="active" onclick="window.location.href='#qstart'">
 | 
				
			||||
                <i class="fa-solid fa-up-long fa-bounce" style="font-size:32px;"></i>
 | 
				
			||||
                
 | 
				
			||||
            </div>
 | 
				
			||||
        </div>
 | 
				
			||||
    
 | 
				
			||||
        <br><div align="center" class="small-text"><i class="fa-solid fa-minus" style="margin-left:20px"> </i> Open your browser and go to https://localhost:8084/</div>
 | 
				
			||||
     </p>
 | 
				
			||||
</div> -->
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue