<?xml version="1.0" encoding="utf-8"?>
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<resources>
    <color name="fab_bg_action">#AAFF0000</color>
    <color name="fab_bg_click_b">#AAAA0000</color>
    <color name="fab_bg_opaque">#99000000</color>
    <color name="fab_bg_pressed">#EE333333</color>
    <color name="fab_bg_trans">#55000000</color>
    <color name="pf_bg_aa_black">#aa000000</color>
    <color name="pf_bg_white">#FFFFFF</color>
    <color name="pf_blue_dark">#FF283593</color>
    <color name="pf_boundary_1">#FFFF0000</color>
    <color name="pf_boundary_2">#FF00FF00</color>
    <color name="pf_boundary_3">#FF0000FF</color>
    <color name="pf_boundary_4">#FF990099</color>
    <color name="pf_boundary_5">#FF3333FF</color>
    <color name="pf_boundary_6">#FF009999</color>
    <color name="pf_font_blue">#0000FF</color>
    <color name="pf_white">#FFFFFFFF</color>
</resources>